deas 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/deas/runner.rb CHANGED
@@ -10,17 +10,12 @@ module Deas
10
10
  @handler = @handler_class.new(self)
11
11
  end
12
12
 
13
- def halt(*args)
14
- raise NotImplementedError
15
- end
16
-
17
- def render(*args)
18
- raise NotImplementedError
19
- end
20
-
21
- def redirect(*args)
22
- raise NotImplementedError
23
- end
13
+ def halt(*args); raise NotImplementedError; end
14
+ def redirect(*args); raise NotImplementedError; end
15
+ def content_type(*args); raise NotImplementedError; end
16
+ def status(*args); raise NotImplementedError; end
17
+ def headers(*args); raise NotImplementedError; end
18
+ def render(*args); raise NotImplementedError; end
24
19
 
25
20
  end
26
21
 
data/lib/deas/server.rb CHANGED
@@ -31,14 +31,15 @@ module Deas::Server
31
31
  option :reload_templates, NsOptions::Boolean, :default => false
32
32
 
33
33
  # server handling options
34
- option :error_procs, Array, :default => []
35
- option :init_procs, Array, :default => []
36
- option :logger, :default => proc{ Deas::NullLogger.new }
37
- option :middlewares, Array, :default => []
38
- option :settings, Hash, :default => {}
39
- option :verbose_logging, :default => true
40
- option :routes, Array, :default => []
34
+ option :error_procs, Array, :default => []
35
+ option :init_procs, Array, :default => []
36
+ option :logger, :default => proc{ Deas::NullLogger.new }
37
+ option :middlewares, Array, :default => []
38
+ option :settings, Hash, :default => {}
39
+ option :verbose_logging, :default => true
40
+ option :routes, Array, :default => []
41
41
  option :view_handler_ns, String
42
+ option :default_charset, String, :default => 'utf-8'
42
43
 
43
44
  attr_reader :template_helpers
44
45
 
@@ -159,6 +160,10 @@ module Deas::Server
159
160
  self.configuration.init_procs << block
160
161
  end
161
162
 
163
+ def error(&block)
164
+ self.configuration.error_procs << block
165
+ end
166
+
162
167
  def template_helpers(*helper_modules)
163
168
  helper_modules.each{ |m| self.configuration.template_helpers << m }
164
169
  self.configuration.template_helpers
@@ -168,14 +173,6 @@ module Deas::Server
168
173
  self.configuration.template_helpers.include?(helper_module)
169
174
  end
170
175
 
171
- def error(&block)
172
- self.configuration.error_procs << block
173
- end
174
-
175
- def logger(*args)
176
- self.configuration.logger *args
177
- end
178
-
179
176
  def use(*args)
180
177
  self.configuration.middlewares << args
181
178
  end
@@ -192,6 +189,14 @@ module Deas::Server
192
189
  self.configuration.verbose_logging *args
193
190
  end
194
191
 
192
+ def logger(*args)
193
+ self.configuration.logger *args
194
+ end
195
+
196
+ def default_charset(*args)
197
+ self.configuration.default_charset *args
198
+ end
199
+
195
200
  def get(path, handler_class_name)
196
201
  self.route(:get, path, handler_class_name)
197
202
  end
@@ -30,9 +30,10 @@ module Deas
30
30
  set :show_exceptions, false
31
31
 
32
32
  # custom settings
33
- set :deas_template_scope, server_config.template_scope
34
- set :deas_error_procs, server_config.error_procs
35
- set :logger, server_config.logger
33
+ set :deas_template_scope, server_config.template_scope
34
+ set :deas_error_procs, server_config.error_procs
35
+ set :deas_default_charset, server_config.default_charset
36
+ set :logger, server_config.logger
36
37
 
37
38
  server_config.settings.each{ |set_args| set *set_args }
38
39
  server_config.middlewares.each{ |use_args| use *use_args }
@@ -34,15 +34,37 @@ module Deas
34
34
  @sinatra_call.halt(*args)
35
35
  end
36
36
 
37
+ def redirect(*args)
38
+ @sinatra_call.redirect(*args)
39
+ end
40
+
41
+ def content_type(*args)
42
+ return @sinatra_call.content_type if args.empty?
43
+
44
+ opts, value = [
45
+ args.last.kind_of?(::Hash) ? args.pop : {},
46
+ args.first
47
+ ]
48
+ @sinatra_call.content_type(value, {
49
+ :charset => @sinatra_call.settings.deas_default_charset
50
+ }.merge(opts || {}))
51
+ end
52
+
53
+ def status(*args)
54
+ @sinatra_call.status(*args)
55
+ end
56
+
57
+ def headers(*args)
58
+ @sinatra_call.headers(*args)
59
+ end
60
+
37
61
  def render(template_name, options = nil, &block)
38
62
  options ||= {}
39
63
  options[:locals] = { :view => @handler }.merge(options[:locals] || {})
40
64
  options[:layout] ||= @handler_class.layouts
41
- Deas::Template.new(@sinatra_call, template_name, options).render(&block)
42
- end
43
65
 
44
- def redirect(*args)
45
- @sinatra_call.redirect(*args)
66
+ self.content_type(get_content_type(template_name)) if self.content_type.nil?
67
+ Deas::Template.new(@sinatra_call, template_name, options).render(&block)
46
68
  end
47
69
 
48
70
  private
@@ -51,5 +73,9 @@ module Deas
51
73
  callbacks.each{|proc| @handler.instance_eval(&proc) }
52
74
  end
53
75
 
76
+ def get_content_type(template_name)
77
+ File.extname(template_name)[1..-1] || 'html'
78
+ end
79
+
54
80
  end
55
81
  end
@@ -32,22 +32,38 @@ module Deas
32
32
  throw(:halt, args)
33
33
  end
34
34
 
35
- def render(template_name, options = nil, &block)
36
- RenderArgs.new(template_name, options, block)
37
- end
38
-
39
35
  def redirect(path, *halt_args)
40
36
  RedirectArgs.new(path, halt_args)
41
37
  end
42
38
 
43
- RenderArgs = Struct.new(:template_name, :options, :block)
44
-
45
39
  class RedirectArgs < Struct.new(:path, :halt_args)
46
- def redirect?
47
- true
48
- end
40
+ def redirect?; true; end
41
+ end
42
+
43
+ def content_type(value, opts={})
44
+ ContentTypeArgs.new(value, opts)
45
+ end
46
+
47
+ ContentTypeArgs = Struct.new(:value, :opts)
48
+
49
+ def status(value)
50
+ StatusArgs.new(value)
49
51
  end
50
52
 
53
+ StatusArgs = Struct.new(:value)
54
+
55
+ def headers(value)
56
+ HeadersArgs.new(value)
57
+ end
58
+
59
+ HeadersArgs = Struct.new(:value)
60
+
61
+ def render(template_name, options = nil, &block)
62
+ RenderArgs.new(template_name, options, block)
63
+ end
64
+
65
+ RenderArgs = Struct.new(:template_name, :options, :block)
66
+
51
67
  end
52
68
 
53
69
  end
data/lib/deas/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Deas
2
- VERSION = "0.13.1"
2
+ VERSION = "0.14.0"
3
3
  end
@@ -47,8 +47,11 @@ module Deas
47
47
 
48
48
  # Helpers
49
49
 
50
- def halt(*args); @deas_runner.halt(*args); end
51
- def redirect(*args); @deas_runner.redirect(*args); end
50
+ def halt(*args); @deas_runner.halt(*args); end
51
+ def redirect(*args); @deas_runner.redirect(*args); end
52
+ def content_type(*args); @deas_runner.content_type(*args); end
53
+ def status(*args); @deas_runner.status(*args); end
54
+ def headers(*args); @deas_runner.headers(*args); end
52
55
 
53
56
  def render(*args, &block)
54
57
  @deas_runner.render(*args, &block)
@@ -1,7 +1,7 @@
1
1
  require 'deas'
2
2
  require 'ostruct'
3
3
 
4
- class FakeApp
4
+ class FakeSinatraCall
5
5
 
6
6
  # Mimic's the context that is accessible in a Sinatra' route. Should provide
7
7
  # any methods needed to replace using an actual Sinatra app.
@@ -14,7 +14,8 @@ class FakeApp
14
14
  @session = @request.session
15
15
  @response = FakeResponse.new
16
16
  @settings = OpenStruct.new(settings.merge({
17
- :deas_template_scope => Deas::Template::Scope
17
+ :deas_template_scope => Deas::Template::Scope,
18
+ :deas_default_charset => 'utf-8'
18
19
  }))
19
20
  end
20
21
 
@@ -22,6 +23,14 @@ class FakeApp
22
23
  throw :halt, args
23
24
  end
24
25
 
26
+ def redirect(*args)
27
+ halt 302, { 'Location' => args[0] }
28
+ end
29
+
30
+ def content_type(*args); args; end
31
+ def status(*args); args; end
32
+ def headers(*args); args; end
33
+
25
34
  # return the template name for each nested calls
26
35
  def erb(name, opts, &block)
27
36
  if block
@@ -31,10 +40,6 @@ class FakeApp
31
40
  end
32
41
  end
33
42
 
34
- def redirect(*args)
35
- halt 302, { 'Location' => args[0] }
36
- end
37
-
38
43
  end
39
44
 
40
45
  class FakeRequest < Struct.new(:http_method, :path, :params, :session)
@@ -19,12 +19,18 @@ class DeasTestServer
19
19
  end
20
20
  end
21
21
 
22
- get '/show', 'ShowHandler'
23
- get '/halt', 'HaltHandler'
24
- get '/error', 'ErrorHandler'
25
- get '/redirect', 'RedirectHandler'
26
- post '/session', 'SetSessionHandler'
27
- get '/session', 'UseSessionHandler'
22
+ get '/show', 'ShowHandler'
23
+ get '/show.html', 'ShowHtmlHandler'
24
+ get '/show.json', 'ShowJsonHandler'
25
+ get '/show-latin1-json', 'ShowLatinJsonHandler'
26
+ get '/show-text', 'ShowTextHandler'
27
+ get '/show-headers-text', 'ShowHeadersTextHandler'
28
+
29
+ get '/halt', 'HaltHandler'
30
+ get '/error', 'ErrorHandler'
31
+ get '/redirect', 'RedirectHandler'
32
+ post '/session', 'SetSessionHandler'
33
+ get '/session', 'UseSessionHandler'
28
34
 
29
35
  get '/with_layout', 'WithLayoutHandler'
30
36
  get '/alt_with_layout', 'AlternateWithLayoutHandler'
@@ -71,6 +77,50 @@ class ShowHandler
71
77
 
72
78
  end
73
79
 
80
+ class ShowHtmlHandler
81
+ include Deas::ViewHandler
82
+
83
+ def run!; render 'show.html'; end
84
+
85
+ end
86
+
87
+ class ShowJsonHandler
88
+ include Deas::ViewHandler
89
+
90
+ def run!; render 'show.json'; end
91
+
92
+ end
93
+
94
+ class ShowLatinJsonHandler
95
+ include Deas::ViewHandler
96
+
97
+ def run!
98
+ content_type :json, :charset => 'latin1'
99
+ render 'show_json'
100
+ end
101
+
102
+ end
103
+
104
+ class ShowTextHandler
105
+ include Deas::ViewHandler
106
+
107
+ def run!
108
+ hdrs = {'Content-Type' => 'text/plain'}
109
+ halt 200, hdrs, render('show.json')
110
+ end
111
+
112
+ end
113
+
114
+ class ShowHeadersTextHandler
115
+ include Deas::ViewHandler
116
+
117
+ def run!
118
+ headers 'Content-Type' => 'text/plain'
119
+ render('show.json')
120
+ end
121
+
122
+ end
123
+
74
124
  class HaltHandler
75
125
  include Deas::ViewHandler
76
126
 
@@ -61,3 +61,32 @@ class HaltViewHandler
61
61
  end
62
62
 
63
63
  end
64
+
65
+ class ContentTypeViewHandler
66
+ include Deas::ViewHandler
67
+
68
+ def run!
69
+ content_type 'text/plain', :charset => 'latin1'
70
+ end
71
+
72
+ end
73
+
74
+ class StatusViewHandler
75
+ include Deas::ViewHandler
76
+
77
+ def run!
78
+ status 422
79
+ end
80
+
81
+ end
82
+
83
+ class HeadersViewHandler
84
+ include Deas::ViewHandler
85
+
86
+ def run!
87
+ headers \
88
+ 'other' => "other",
89
+ 'a-header' => 'some value'
90
+ end
91
+
92
+ end
File without changes
File without changes
File without changes
@@ -25,6 +25,26 @@ module Deas
25
25
  assert_equal expected_body, last_response.body
26
26
  end
27
27
 
28
+ should "set the content type appropriately" do
29
+ get '/show'
30
+ assert_equal 'text/html;charset=utf-8', last_response.headers['Content-Type']
31
+
32
+ get '/show.html'
33
+ assert_equal 'text/html;charset=utf-8', last_response.headers['Content-Type']
34
+
35
+ get '/show.json'
36
+ assert_equal 'application/json;charset=utf-8', last_response.headers['Content-Type']
37
+
38
+ get '/show-latin1-json'
39
+ assert_equal 'application/json;charset=latin1', last_response.headers['Content-Type']
40
+
41
+ get '/show-text'
42
+ assert_equal 'text/plain', last_response.headers['Content-Type']
43
+
44
+ get '/show-headers-text'
45
+ assert_equal 'text/plain', last_response.headers['Content-Type']
46
+ end
47
+
28
48
  should "allow halting with a custom response" do
29
49
  get '/halt', 'with' => 234
30
50
 
@@ -7,8 +7,8 @@ class Deas::ErrorHandler
7
7
  desc "Deas::ErrorHandler"
8
8
  setup do
9
9
  @exception = RuntimeError.new
10
- @fake_app = FakeApp.new
11
- @error_handler = Deas::ErrorHandler.new(@exception, @fake_app, [])
10
+ @fake_sinatra_call = FakeSinatraCall.new
11
+ @error_handler = Deas::ErrorHandler.new(@exception, @fake_sinatra_call, [])
12
12
  end
13
13
  subject{ @error_handler }
14
14
 
@@ -25,12 +25,12 @@ class Deas::ErrorHandler
25
25
  "my return value"
26
26
  end ]
27
27
 
28
- @error_handler = Deas::ErrorHandler.new(@exception, @fake_app, @error_procs)
28
+ @error_handler = Deas::ErrorHandler.new(@exception, @fake_sinatra_call, @error_procs)
29
29
  @response = @error_handler.run
30
30
  end
31
31
 
32
32
  should "run the proc in the context of the app" do
33
- assert_equal @exception, @fake_app.settings.exception_that_occurred
33
+ assert_equal @exception, @fake_sinatra_call.settings.exception_that_occurred
34
34
  end
35
35
 
36
36
  should "return whatever the proc returns" do
@@ -57,14 +57,14 @@ class Deas::ErrorHandler
57
57
  end
58
58
  ]
59
59
 
60
- @error_handler = Deas::ErrorHandler.new(@exception, @fake_app, @error_procs)
60
+ @error_handler = Deas::ErrorHandler.new(@exception, @fake_sinatra_call, @error_procs)
61
61
  @response = @error_handler.run
62
62
  end
63
63
 
64
64
  should "run all the error procs" do
65
- assert_equal true, @fake_app.settings.first_proc_run
66
- assert_equal true, @fake_app.settings.second_proc_run
67
- assert_equal true, @fake_app.settings.third_proc_run
65
+ assert_equal true, @fake_sinatra_call.settings.first_proc_run
66
+ assert_equal true, @fake_sinatra_call.settings.second_proc_run
67
+ assert_equal true, @fake_sinatra_call.settings.third_proc_run
68
68
  end
69
69
 
70
70
  should "return the last non-nil response" do
@@ -86,13 +86,13 @@ class Deas::ErrorHandler
86
86
  end
87
87
  ]
88
88
 
89
- @error_handler = Deas::ErrorHandler.new(@exception, @fake_app, @error_procs)
89
+ @error_handler = Deas::ErrorHandler.new(@exception, @fake_sinatra_call, @error_procs)
90
90
  @response = catch(:halt){ @error_handler.run }
91
91
  end
92
92
 
93
93
  should "run error procs until one halts" do
94
- assert_equal true, @fake_app.settings.first_proc_run
95
- assert_nil @fake_app.settings.second_proc_run
94
+ assert_equal true, @fake_sinatra_call.settings.first_proc_run
95
+ assert_nil @fake_sinatra_call.settings.second_proc_run
96
96
  end
97
97
 
98
98
  should "return whatever was halted" do
@@ -1,5 +1,5 @@
1
1
  require 'assert'
2
- require 'test/support/fake_app'
2
+ require 'test/support/fake_sinatra_call'
3
3
  require 'deas/logging'
4
4
 
5
5
  module Deas::Logging
@@ -7,7 +7,7 @@ module Deas::Logging
7
7
  class BaseTests < Assert::Context
8
8
  desc "Deas::Logging"
9
9
  setup do
10
- @app = FakeApp.new
10
+ @app = FakeSinatraCall.new
11
11
  end
12
12
  subject{ Deas::Logging }
13
13
 
@@ -1,7 +1,7 @@
1
1
  require 'assert'
2
2
  require 'deas/route'
3
3
  require 'deas/sinatra_runner'
4
- require 'test/support/fake_app'
4
+ require 'test/support/fake_sinatra_call'
5
5
  require 'test/support/view_handlers'
6
6
 
7
7
  class Deas::Route
@@ -13,19 +13,32 @@ class Deas::Runner
13
13
 
14
14
  should have_reader :app_settings
15
15
  should have_readers :request, :response, :params, :logger, :session
16
+ should have_imeths :halt, :redirect, :content_type, :status, :render
16
17
 
17
18
  should "raise NotImplementedError with #halt" do
18
19
  assert_raises(NotImplementedError){ subject.halt }
19
20
  end
20
21
 
21
- should "raise NotImplementedError with #render" do
22
- assert_raises(NotImplementedError){ subject.render }
23
- end
24
-
25
22
  should "raise NotImplementedError with #redirect" do
26
23
  assert_raises(NotImplementedError){ subject.redirect }
27
24
  end
28
25
 
26
+ should "raise NotImplementedError with #content_type" do
27
+ assert_raises(NotImplementedError){ subject.content_type }
28
+ end
29
+
30
+ should "raise NotImplementedError with #status" do
31
+ assert_raises(NotImplementedError){ subject.status }
32
+ end
33
+
34
+ should "raise NotImplementedError with #headers" do
35
+ assert_raises(NotImplementedError){ subject.headers }
36
+ end
37
+
38
+ should "raise NotImplementedError with #render" do
39
+ assert_raises(NotImplementedError){ subject.render }
40
+ end
41
+
29
42
  end
30
43
 
31
44
  end
@@ -22,7 +22,7 @@ class Deas::Server::Configuration
22
22
 
23
23
  # server handling options
24
24
  should have_imeths :error_procs, :init_procs, :logger, :middlewares, :settings
25
- should have_imeths :verbose_logging, :routes, :view_handler_ns
25
+ should have_imeths :verbose_logging, :routes, :view_handler_ns, :default_charset
26
26
 
27
27
  should have_reader :template_helpers
28
28
  should have_imeths :valid?, :validate!
@@ -78,6 +78,10 @@ class Deas::Server::Configuration
78
78
  assert_nothing_raised{ config.root '/path/to/root'; config.validate! }
79
79
  end
80
80
 
81
+ should "use `utf-8` as the default_charset by default" do
82
+ assert_equal 'utf-8', subject.default_charset
83
+ end
84
+
81
85
  end
82
86
 
83
87
  class ValidationTests < BaseTests
@@ -21,9 +21,10 @@ module Deas::Server
21
21
  should have_imeths :static_files, :reload_templates
22
22
 
23
23
  # DSL for server handling
24
- should have_imeths :init, :template_helpers, :template_helper?, :error
25
- should have_imeths :logger, :use, :set, :view_handler_ns, :verbose_logging
26
- should have_imeths :get, :post, :put, :patch, :delete, :route
24
+ should have_imeths :init, :error, :template_helpers, :template_helper?
25
+ should have_imeths :use, :set, :view_handler_ns, :verbose_logging, :logger
26
+ should have_imeths :default_charset
27
+ should have_imeths :get, :post, :put, :patch, :delete, :redirect, :route
27
28
 
28
29
  should "allow setting it's configuration options" do
29
30
  config = subject.configuration
@@ -58,6 +59,18 @@ module Deas::Server
58
59
  subject.reload_templates true
59
60
  assert_equal true, config.reload_templates
60
61
 
62
+ assert_equal 0, config.init_procs.size
63
+ init_proc = proc{ }
64
+ subject.init(&init_proc)
65
+ assert_equal 1, config.init_procs.size
66
+ assert_equal init_proc, config.init_procs.first
67
+
68
+ assert_equal 0, config.error_procs.size
69
+ error_proc = proc{ }
70
+ subject.error(&error_proc)
71
+ assert_equal 1, config.error_procs.size
72
+ assert_equal error_proc, config.error_procs.first
73
+
61
74
  subject.use 'MyMiddleware'
62
75
  assert_equal [ ['MyMiddleware'] ], config.middlewares
63
76
 
@@ -68,11 +81,28 @@ module Deas::Server
68
81
  subject.logger stdout_logger
69
82
  assert_equal stdout_logger, config.logger
70
83
 
71
- assert_equal 0, config.init_procs.size
72
- init_proc = proc{ }
73
- subject.init(&init_proc)
74
- assert_equal 1, config.init_procs.size
75
- assert_equal init_proc, config.init_procs.first
84
+ subject.default_charset 'latin1'
85
+ assert_equal 'latin1', config.default_charset
86
+ end
87
+
88
+ should "add and query helper modules" do
89
+ subject.template_helpers(helper_module = Module.new)
90
+ assert subject.template_helper?(helper_module)
91
+ end
92
+
93
+ should "set a namespace and use it when defining routes" do
94
+ subject.view_handler_ns 'MyStuff'
95
+ assert_equal 'MyStuff', subject.configuration.view_handler_ns
96
+
97
+ # should use the ns
98
+ subject.route(:get, '/ns_test', 'NsTest')
99
+ route = subject.configuration.routes.last
100
+ assert_equal 'MyStuff::NsTest', route.handler_class_name
101
+
102
+ # should ignore the ns when the leading colons are present
103
+ subject.route(:post, '/no_ns_test', '::NoNsTest')
104
+ route = subject.configuration.routes.last
105
+ assert_equal '::NoNsTest', route.handler_class_name
76
106
  end
77
107
 
78
108
  should "add a GET route using #get" do
@@ -146,27 +176,6 @@ module Deas::Server
146
176
  assert_equal 'GetInfo', route.handler_class_name
147
177
  end
148
178
 
149
- should "set a namespace with #view_handler_ns and " \
150
- "use it when defining routes" do
151
- subject.view_handler_ns 'MyStuff'
152
- assert_equal 'MyStuff', subject.configuration.view_handler_ns
153
-
154
- # should use the ns
155
- subject.route(:get, '/ns_test', 'NsTest')
156
- route = subject.configuration.routes.last
157
- assert_equal 'MyStuff::NsTest', route.handler_class_name
158
-
159
- # should ignore the ns when the leading colons are present
160
- subject.route(:post, '/no_ns_test', '::NoNsTest')
161
- route = subject.configuration.routes.last
162
- assert_equal '::NoNsTest', route.handler_class_name
163
- end
164
-
165
- should "add and query helper modules" do
166
- subject.template_helpers(helper_module = Module.new)
167
- assert subject.template_helper?(helper_module)
168
- end
169
-
170
179
  end
171
180
 
172
181
  end
@@ -1,7 +1,7 @@
1
1
  require 'assert'
2
2
  require 'deas/sinatra_runner'
3
3
  require 'deas/template'
4
- require 'test/support/fake_app'
4
+ require 'test/support/fake_sinatra_call'
5
5
  require 'test/support/view_handlers'
6
6
 
7
7
  class Deas::SinatraRunner
@@ -9,13 +9,13 @@ class Deas::SinatraRunner
9
9
  class BaseTests < Assert::Context
10
10
  desc "Deas::SinatraRunner"
11
11
  setup do
12
- @fake_sinatra_call = FakeApp.new
12
+ @fake_sinatra_call = FakeSinatraCall.new
13
13
  @runner = Deas::SinatraRunner.new(FlagViewHandler, @fake_sinatra_call)
14
14
  end
15
15
  subject{ @runner }
16
16
 
17
- should have_imeths :run, :request, :response, :params, :logger, :halt
18
- should have_imeths :render, :session, :redirect
17
+ should have_imeths :run, :request, :response, :params, :logger, :session
18
+ should have_imeths :halt, :redirect, :content_type, :status, :render
19
19
 
20
20
  should "return the sinatra_call's request with #request" do
21
21
  assert_equal @fake_sinatra_call.request, subject.request
@@ -42,6 +42,33 @@ class Deas::SinatraRunner
42
42
  assert_equal [ 'test' ], return_value
43
43
  end
44
44
 
45
+ should "call the sinatra_call's redirect method with #redirect" do
46
+ return_value = catch(:halt){ subject.redirect('http://google.com') }
47
+ expected = [ 302, { 'Location' => 'http://google.com' } ]
48
+
49
+ assert_equal expected, return_value
50
+ end
51
+
52
+ should "call the sinatra_call's content_type method using the default_charset" do
53
+ expected = @fake_sinatra_call.content_type('text/plain', :charset => 'utf-8')
54
+ assert_equal expected, subject.content_type('text/plain')
55
+
56
+ expected = @fake_sinatra_call.content_type('text/plain', :charset => 'latin1')
57
+ assert_equal expected, subject.content_type('text/plain', :charset => 'latin1')
58
+ end
59
+
60
+ should "call the sinatra_call's status to set the response status" do
61
+ assert_equal [422], subject.status(422)
62
+ end
63
+
64
+ should "call the sinatra_call's status to set the response status" do
65
+ exp_headers = {
66
+ 'a-header' => 'some value',
67
+ 'other' => 'other'
68
+ }
69
+ assert_equal [exp_headers], subject.headers(exp_headers)
70
+ end
71
+
45
72
  should "render the template with a :view local and the handler layouts with #render" do
46
73
  exp_handler = FlagViewHandler.new(subject)
47
74
  exp_layouts = FlagViewHandler.layouts
@@ -53,13 +80,6 @@ class Deas::SinatraRunner
53
80
  assert_equal exp_result, subject.render('index')
54
81
  end
55
82
 
56
- should "call the sinatra_call's redirect method with #redirect" do
57
- return_value = catch(:halt){ subject.redirect('http://google.com') }
58
- expected = [ 302, { 'Location' => 'http://google.com' } ]
59
-
60
- assert_equal expected, return_value
61
- end
62
-
63
83
  end
64
84
 
65
85
  class RunTests < BaseTests
@@ -1,13 +1,13 @@
1
1
  require 'assert'
2
2
  require 'deas/template'
3
- require 'test/support/fake_app'
3
+ require 'test/support/fake_sinatra_call'
4
4
 
5
5
  class Deas::Template
6
6
 
7
7
  class BaseTests < Assert::Context
8
8
  desc "Deas::Template"
9
9
  setup do
10
- @fake_sinatra_call = FakeApp.new
10
+ @fake_sinatra_call = FakeSinatraCall.new
11
11
  @template = Deas::Template.new(@fake_sinatra_call, 'users/index')
12
12
  end
13
13
  subject{ @template }
@@ -23,9 +23,9 @@ class Deas::Template
23
23
  end
24
24
 
25
25
  should "know a named template's render engine" do
26
- fake_app = FakeApp.new(:views => TEST_SUPPORT_ROOT.join('views'))
26
+ fake_sinatra_call = FakeSinatraCall.new(:views => TEST_SUPPORT_ROOT.join('views'))
27
27
 
28
- views_exist = Deas::Template.new(fake_app, 'whatever')
28
+ views_exist = Deas::Template.new(fake_sinatra_call, 'whatever')
29
29
  assert_equal 'erb', views_exist.engine('layout1')
30
30
  assert_equal 'haml', views_exist.engine('haml_layout1')
31
31
  assert_equal 'other', views_exist.engine('some.html.file')
@@ -33,7 +33,7 @@ class Deas::Template
33
33
  assert_equal 'erb', views_exist.engine('some_no_engine_extension')
34
34
  assert_equal 'erb', views_exist.engine('does_not_exist')
35
35
 
36
- views_no_exist = Deas::Template.new(fake_app, 'whatever', {
36
+ views_no_exist = Deas::Template.new(fake_sinatra_call, 'whatever', {
37
37
  :views => '/does/not/exist'
38
38
  })
39
39
  assert_equal 'erb', views_no_exist.engine('layout1')
@@ -173,4 +173,45 @@ module Deas::ViewHandler
173
173
 
174
174
  end
175
175
 
176
+ class ContentTypeTests < BaseTests
177
+ desc "content_type"
178
+
179
+ should "should set the response content_type/charset" do
180
+ runner = test_runner(ContentTypeViewHandler)
181
+ content_type_args = runner.run
182
+
183
+ assert_equal 'text/plain', content_type_args.value
184
+ assert_equal({:charset => 'latin1'}, content_type_args.opts)
185
+ end
186
+
187
+ end
188
+
189
+ class StatusTests < BaseTests
190
+ desc "status"
191
+
192
+ should "should set the response status" do
193
+ runner = test_runner(StatusViewHandler)
194
+ status_args = runner.run
195
+
196
+ assert_equal 422, status_args.value
197
+ end
198
+
199
+ end
200
+
201
+ class HeadersTests < BaseTests
202
+ desc "headers"
203
+
204
+ should "should set the response status" do
205
+ runner = test_runner(HeadersViewHandler)
206
+ headers_args = runner.run
207
+ exp_headers = {
208
+ 'a-header' => 'some value',
209
+ 'other' => 'other'
210
+ }
211
+
212
+ assert_equal exp_headers, headers_args.value
213
+ end
214
+
215
+ end
216
+
176
217
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deas
3
3
  version: !ruby/object:Gem::Version
4
- hash: 41
4
+ hash: 39
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 13
9
- - 1
10
- version: 0.13.1
8
+ - 14
9
+ - 0
10
+ version: 0.14.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -163,7 +163,7 @@ files:
163
163
  - lib/deas/view_handler.rb
164
164
  - log/.gitkeep
165
165
  - test/helper.rb
166
- - test/support/fake_app.rb
166
+ - test/support/fake_sinatra_call.rb
167
167
  - test/support/routes.rb
168
168
  - test/support/view_handlers.rb
169
169
  - test/support/views/_info.erb
@@ -173,6 +173,9 @@ files:
173
173
  - test/support/views/layout2.erb
174
174
  - test/support/views/layout3.erb
175
175
  - test/support/views/show.erb
176
+ - test/support/views/show.html.erb
177
+ - test/support/views/show.json.erb
178
+ - test/support/views/show_json.erb
176
179
  - test/support/views/some.html.file.other
177
180
  - test/support/views/some_file.engine
178
181
  - test/support/views/some_no_engine_extension
@@ -227,7 +230,7 @@ specification_version: 3
227
230
  summary: Handler-based web framework powered by Sinatra
228
231
  test_files:
229
232
  - test/helper.rb
230
- - test/support/fake_app.rb
233
+ - test/support/fake_sinatra_call.rb
231
234
  - test/support/routes.rb
232
235
  - test/support/view_handlers.rb
233
236
  - test/support/views/_info.erb
@@ -237,6 +240,9 @@ test_files:
237
240
  - test/support/views/layout2.erb
238
241
  - test/support/views/layout3.erb
239
242
  - test/support/views/show.erb
243
+ - test/support/views/show.html.erb
244
+ - test/support/views/show.json.erb
245
+ - test/support/views/show_json.erb
240
246
  - test/support/views/some.html.file.other
241
247
  - test/support/views/some_file.engine
242
248
  - test/support/views/some_no_engine_extension