summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStormwind <stormwind@stormwinds-page.de>2012-11-23 18:10:27 +0100
committerStormwind <stormwind@stormwinds-page.de>2012-11-23 18:10:27 +0100
commit1b96ebb36d4cb41e33e877b15b865332aaca8fa5 (patch)
tree06577d14c7757f0d0abb810184b81c72cad36077
parenta2e6c299cd15b8335441e3b5ba07fe95256f3a2d (diff)
parent495d8f650302d5226cd677b062891ea9021483d5 (diff)
Merge remote-tracking branch 'origin/master'
-rw-r--r--lib/zero/controller.rb14
-rw-r--r--lib/zero/renderer.rb52
-rw-r--r--spec/spec_helper.rb12
-rw-r--r--spec/unit/controller/call_spec.rb14
4 files changed, 68 insertions, 24 deletions
diff --git a/lib/zero/controller.rb b/lib/zero/controller.rb
index 3c3af8c..5784aa0 100644
--- a/lib/zero/controller.rb
+++ b/lib/zero/controller.rb
@@ -7,7 +7,7 @@ module Zero
class Controller
# initialize a new instance of the controller and call response on it
def self.call(env)
- new(Rack::Request.new(env)).response
+ new(Zero::Request.new(env)).response
end
# initialize the controller
@@ -20,7 +20,17 @@ module Zero
# build the response and return it
# @return Response a rack conform response
def response
- raise NotImplementedError.new("Not Implemented in ${__FILE__}")
+ process if respond_to?(:process)
+ render
+ @response
+ end
+
+ def process
+ raise NotImplementedError.new("'render' not implemented in #{self.class}")
+ end
+
+ def process
+ raise NotImplementedError.new("'render' not implemented in #{self.class}")
end
end
end
diff --git a/lib/zero/renderer.rb b/lib/zero/renderer.rb
index 740d156..40a9bed 100644
--- a/lib/zero/renderer.rb
+++ b/lib/zero/renderer.rb
@@ -14,30 +14,32 @@ module Zero
# The call to #render will return the String representation of the template
# with all data given.
class Renderer
- # set a base path for template search
- # @param path [String] the path to the template base dir
- def self.template_path=(path)
- @@path = path + '/'
- end
+ class << self
+ # set a base path for template search
+ # @param path [String] the path to the template base dir
+ def template_path=(path)
+ @@path = path + '/'
+ end
- # save a mapping hash for the type
- #
- # With that it is possible to map long and complex contant types to simpler
- # representations. These get then used in the finding process for the best
- # fitting template.
- #
- # @example
- # Zero::Renderer.map = {'text/html' => 'html'}
- #
- # @param map [Hash] maps the content type to a simple representation
- def self.type_map=(map)
- @@map = map
- end
+ # save a mapping hash for the type
+ #
+ # With that it is possible to map long and complex contant types to simpler
+ # representations. These get then used in the finding process for the best
+ # fitting template.
+ #
+ # @example
+ # Zero::Renderer.map = {'text/html' => 'html'}
+ #
+ # @param map [Hash] maps the content type to a simple representation
+ def type_map=(map)
+ @@map = map
+ end
- # returns the type map
- # @return [Hash] the mapping for types
- def self.type_map
- @@map ||= {}
+ # returns the type map
+ # @return [Hash] the mapping for types
+ def type_map
+ @@map ||= {}
+ end
end
# take the path and render the template within the context
@@ -72,6 +74,12 @@ module Zero
raise FileNotFoundError.new("Template '#{template_path}' not found!")
end
+ # @see transform
+ # @api private
+ def transform(string)
+ self.class.transform(string)
+ end
+
# transform a type into a simpler representation
# @api private
# @param string [String] the original type name
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 154faf4..909e1e8 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,6 +1,18 @@
+unless RUBY_ENGINE == 'rbx' then
+ require 'simplecov'
+ SimpleCov.start do
+ add_filter '_spec.rb'
+ end
+end
+
require 'rack'
require 'zero/all'
+class SpecController < Zero::Controller
+ def process; end
+ def render; @response = [200, {'Content-Type' => 'text/html'}, ['foo']]; end
+end
+
class SpecApp
attr_reader :env
diff --git a/spec/unit/controller/call_spec.rb b/spec/unit/controller/call_spec.rb
new file mode 100644
index 0000000..af6f719
--- /dev/null
+++ b/spec/unit/controller/call_spec.rb
@@ -0,0 +1,14 @@
+require 'spec_helper'
+
+describe Zero::Controller, '.call' do
+ subject { SpecController.call(env) }
+ let(:env) { EnvGenerator.get('/foo') }
+
+ it "returns a response" do
+ subject.should be_respond_to(:to_a)
+ end
+
+ it "returns an object with the first element being a status" do
+ subject[0].should be_kind_of(Numeric)
+ end
+end