deas 0.33.0 → 0.34.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/deas/server.rb +3 -3
- data/lib/deas/sinatra_app.rb +11 -5
- data/lib/deas/sinatra_runner.rb +11 -14
- data/lib/deas/test_runner.rb +25 -9
- data/lib/deas/version.rb +1 -1
- data/test/support/fake_sinatra_call.rb +23 -4
- data/test/unit/deas_runner_tests.rb +3 -3
- data/test/unit/server_configuration_tests.rb +3 -3
- data/test/unit/server_tests.rb +3 -3
- data/test/unit/sinatra_app_tests.rb +4 -0
- data/test/unit/sinatra_runner_tests.rb +18 -15
- data/test/unit/test_runner_tests.rb +20 -6
- data/test/unit/view_handler_tests.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfa612b3fc472e3c8a14005ca567c2a20b901476
|
4
|
+
data.tar.gz: c6e19d87a4393a780da387f19a5698100ab80296
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99c27beacb566a4f0361aadfd85c4d504c2bf11d0ed09112082f35ea115c37df3d69273da9482b27a9d0e50d6ef4eed1b2e3b1f8431eec5d50ffb053eb1e5622
|
7
|
+
data.tar.gz: 602b81f39fa49f1d92b244450248e7efc7515e06317c51b2ba951172ee9f67c29b4feb4ec7d14a30483bd0b5bfd6a68b03833848df85b6a5bbac7697fe65d409
|
data/lib/deas/server.rb
CHANGED
@@ -29,7 +29,7 @@ module Deas::Server
|
|
29
29
|
option :show_exceptions, NsOptions::Boolean, :default => false
|
30
30
|
option :static_files, NsOptions::Boolean, :default => true
|
31
31
|
option :reload_templates, NsOptions::Boolean, :default => false
|
32
|
-
option :
|
32
|
+
option :default_encoding, String, :default => 'utf-8'
|
33
33
|
|
34
34
|
# server handling options
|
35
35
|
|
@@ -190,8 +190,8 @@ module Deas::Server
|
|
190
190
|
self.configuration.logger *args
|
191
191
|
end
|
192
192
|
|
193
|
-
def
|
194
|
-
self.configuration.
|
193
|
+
def default_encoding(*args)
|
194
|
+
self.configuration.default_encoding *args
|
195
195
|
end
|
196
196
|
|
197
197
|
def template_source(*args)
|
data/lib/deas/sinatra_app.rb
CHANGED
@@ -21,6 +21,7 @@ module Deas
|
|
21
21
|
set :sessions, server_config.sessions
|
22
22
|
set :static, server_config.static_files
|
23
23
|
set :reload_templates, server_config.reload_templates
|
24
|
+
set :default_encoding, server_config.default_encoding
|
24
25
|
set :logging, false
|
25
26
|
|
26
27
|
# raise_errors and show_exceptions prevent Deas error handlers from
|
@@ -30,11 +31,16 @@ module Deas
|
|
30
31
|
set :show_exceptions, false
|
31
32
|
|
32
33
|
# custom settings
|
33
|
-
set :deas_error_procs,
|
34
|
-
set :
|
35
|
-
set :
|
36
|
-
set :
|
37
|
-
|
34
|
+
set :deas_error_procs, server_config.error_procs
|
35
|
+
set :logger, server_config.logger
|
36
|
+
set :router, server_config.router
|
37
|
+
set :template_source, server_config.template_source
|
38
|
+
|
39
|
+
# TODO: rework with `server_config.default_encoding` once we move off of using Sinatra
|
40
|
+
# TODO: could maybe move into a deas-json mixin once off of Sinatra
|
41
|
+
# Add charset to json content type responses - by default only added to these:
|
42
|
+
# ["application/javascript", "application/xml", "application/xhtml+xml", /^text\//]
|
43
|
+
settings.add_charset << "application/json"
|
38
44
|
|
39
45
|
server_config.settings.each{ |set_args| set *set_args }
|
40
46
|
server_config.middlewares.each{ |use_args| use *use_args }
|
data/lib/deas/sinatra_runner.rb
CHANGED
@@ -20,15 +20,7 @@ module Deas
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def content_type(*args)
|
23
|
-
|
24
|
-
|
25
|
-
opts, value = [
|
26
|
-
args.last.kind_of?(::Hash) ? args.pop : {},
|
27
|
-
args.first
|
28
|
-
]
|
29
|
-
@sinatra_call.content_type(value, {
|
30
|
-
:charset => @sinatra_call.settings.deas_default_charset
|
31
|
-
}.merge(opts || {}))
|
23
|
+
@sinatra_call.content_type(*args)
|
32
24
|
end
|
33
25
|
|
34
26
|
def status(*args)
|
@@ -40,18 +32,23 @@ module Deas
|
|
40
32
|
end
|
41
33
|
|
42
34
|
def source_render(source, template_name, locals = nil)
|
43
|
-
|
35
|
+
if self.content_type.nil?
|
36
|
+
self.content_type(get_content_type_ext(template_name) || 'html')
|
37
|
+
end
|
44
38
|
super
|
45
39
|
end
|
46
40
|
|
47
|
-
def send_file(
|
48
|
-
|
41
|
+
def send_file(file_path, opts = nil, &block)
|
42
|
+
if self.content_type.nil?
|
43
|
+
self.content_type(get_content_type_ext(file_path))
|
44
|
+
end
|
45
|
+
@sinatra_call.send_file(file_path, opts || {}, &block)
|
49
46
|
end
|
50
47
|
|
51
48
|
private
|
52
49
|
|
53
|
-
def
|
54
|
-
File.extname(
|
50
|
+
def get_content_type_ext(file_path)
|
51
|
+
File.extname(file_path)[1..-1]
|
55
52
|
end
|
56
53
|
|
57
54
|
end
|
data/lib/deas/test_runner.rb
CHANGED
@@ -9,7 +9,7 @@ module Deas
|
|
9
9
|
|
10
10
|
class TestRunner < Runner
|
11
11
|
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :response_value
|
13
13
|
|
14
14
|
def initialize(handler_class, args = nil)
|
15
15
|
if !handler_class.include?(Deas::ViewHandler)
|
@@ -29,11 +29,18 @@ module Deas
|
|
29
29
|
})
|
30
30
|
args.each{|key, value| self.handler.send("#{key}=", value) }
|
31
31
|
|
32
|
-
@
|
32
|
+
@response_value = catch(:halt){ self.handler.init; nil }
|
33
|
+
end
|
34
|
+
|
35
|
+
# TODO: remove eventually
|
36
|
+
def return_value
|
37
|
+
warn "calling `return_value` on a test runner is deprecated - " \
|
38
|
+
"switch to `response_value` instead"
|
39
|
+
self.response_value
|
33
40
|
end
|
34
41
|
|
35
42
|
def run
|
36
|
-
@
|
43
|
+
@response_value ||= catch(:halt){ self.handler.run }
|
37
44
|
end
|
38
45
|
|
39
46
|
# Helpers
|
@@ -60,18 +67,27 @@ module Deas
|
|
60
67
|
def redirect?; true; end
|
61
68
|
end
|
62
69
|
|
63
|
-
def content_type(
|
64
|
-
|
70
|
+
def content_type(*args)
|
71
|
+
return @content_type if args.empty?
|
72
|
+
opts, value = [
|
73
|
+
args.last.kind_of?(Hash) ? args.pop : {},
|
74
|
+
args.last
|
75
|
+
]
|
76
|
+
@content_type = ContentTypeArgs.new(value, opts)
|
65
77
|
end
|
66
78
|
ContentTypeArgs = Struct.new(:value, :opts)
|
67
79
|
|
68
|
-
def status(
|
69
|
-
|
80
|
+
def status(*args)
|
81
|
+
return @status if args.empty?
|
82
|
+
value = args.last
|
83
|
+
@status = StatusArgs.new(value)
|
70
84
|
end
|
71
85
|
StatusArgs = Struct.new(:value)
|
72
86
|
|
73
|
-
def headers(
|
74
|
-
|
87
|
+
def headers(*args)
|
88
|
+
return @headers if args.empty?
|
89
|
+
value = args.last
|
90
|
+
@headers = HeadersArgs.new(value)
|
75
91
|
end
|
76
92
|
HeadersArgs = Struct.new(:value)
|
77
93
|
|
data/lib/deas/version.rb
CHANGED
@@ -20,8 +20,11 @@ class FakeSinatraCall
|
|
20
20
|
@router = Deas::Router.new
|
21
21
|
@template_source = Deas::NullTemplateSource.new
|
22
22
|
|
23
|
+
@content_type = nil
|
24
|
+
@status = 200
|
25
|
+
@headers = {}
|
26
|
+
|
23
27
|
@settings = OpenStruct.new({
|
24
|
-
:deas_default_charset => 'utf-8',
|
25
28
|
:logger => @logger,
|
26
29
|
:router => @router,
|
27
30
|
:template_source => @template_source
|
@@ -36,9 +39,25 @@ class FakeSinatraCall
|
|
36
39
|
halt 302, { 'Location' => args[0] }
|
37
40
|
end
|
38
41
|
|
39
|
-
def content_type(*args)
|
40
|
-
|
41
|
-
|
42
|
+
def content_type(*args)
|
43
|
+
return @content_type if args.empty?
|
44
|
+
opts, value = [
|
45
|
+
args.last.kind_of?(Hash) ? args.pop : {},
|
46
|
+
args.last
|
47
|
+
]
|
48
|
+
opts_value = opts.keys.map{ |k| "#{k}=#{opts[k]}" }.join(';')
|
49
|
+
@content_type = [value, opts_value].reject{ |v| v.to_s.empty? }.join(';')
|
50
|
+
end
|
51
|
+
|
52
|
+
def status(*args)
|
53
|
+
return @status if args.empty?
|
54
|
+
@status = args.last
|
55
|
+
end
|
56
|
+
|
57
|
+
def headers(*args)
|
58
|
+
return @headers if args.empty?
|
59
|
+
@headers = args.last
|
60
|
+
end
|
42
61
|
|
43
62
|
def send_file(file_path, opts, &block)
|
44
63
|
if block
|
@@ -48,7 +48,7 @@ class Deas::DeasRunner
|
|
48
48
|
class RunTests < InitTests
|
49
49
|
desc "and run"
|
50
50
|
setup do
|
51
|
-
@
|
51
|
+
@response_value = @runner.run
|
52
52
|
@handler = @runner.instance_variable_get("@handler")
|
53
53
|
end
|
54
54
|
subject{ @handler }
|
@@ -63,8 +63,8 @@ class Deas::DeasRunner
|
|
63
63
|
assert_equal true, subject.run_bang_called
|
64
64
|
end
|
65
65
|
|
66
|
-
should "
|
67
|
-
assert_equal true, @
|
66
|
+
should "use the handler's run! return value as its response value" do
|
67
|
+
assert_equal true, @response_value
|
68
68
|
end
|
69
69
|
|
70
70
|
end
|
@@ -21,7 +21,7 @@ class Deas::Server::Configuration
|
|
21
21
|
|
22
22
|
should have_imeths :env, :root, :public_root, :views_root
|
23
23
|
should have_imeths :dump_errors, :method_override, :sessions, :show_exceptions
|
24
|
-
should have_imeths :static_files, :reload_templates, :
|
24
|
+
should have_imeths :static_files, :reload_templates, :default_encoding
|
25
25
|
|
26
26
|
# server handling options
|
27
27
|
|
@@ -79,8 +79,8 @@ class Deas::Server::Configuration
|
|
79
79
|
assert_nothing_raised{ config.root '/path/to/root'; config.validate! }
|
80
80
|
end
|
81
81
|
|
82
|
-
should "use `utf-8` as the
|
83
|
-
assert_equal 'utf-8', subject.
|
82
|
+
should "use `utf-8` as the default encoding by default" do
|
83
|
+
assert_equal 'utf-8', subject.default_encoding
|
84
84
|
end
|
85
85
|
|
86
86
|
end
|
data/test/unit/server_tests.rb
CHANGED
@@ -23,7 +23,7 @@ module Deas::Server
|
|
23
23
|
|
24
24
|
# DSL for server handling settings
|
25
25
|
should have_imeths :init, :error, :template_helpers, :template_helper?
|
26
|
-
should have_imeths :use, :set, :verbose_logging, :logger, :
|
26
|
+
should have_imeths :use, :set, :verbose_logging, :logger, :default_encoding
|
27
27
|
should have_imeths :template_source
|
28
28
|
|
29
29
|
# DSL for server routing settings
|
@@ -93,8 +93,8 @@ module Deas::Server
|
|
93
93
|
subject.template_source a_source
|
94
94
|
assert_equal a_source, config.template_source
|
95
95
|
|
96
|
-
subject.
|
97
|
-
assert_equal 'latin1', config.
|
96
|
+
subject.default_encoding 'latin1'
|
97
|
+
assert_equal 'latin1', config.default_encoding
|
98
98
|
end
|
99
99
|
|
100
100
|
should "add and query helper modules" do
|
@@ -27,6 +27,7 @@ module Deas::SinatraApp
|
|
27
27
|
c.show_exceptions = true
|
28
28
|
c.static = true
|
29
29
|
c.reload_templates = true
|
30
|
+
c.default_encoding = 'latin1'
|
30
31
|
c.router = @router
|
31
32
|
end
|
32
33
|
@sinatra_app = Deas::SinatraApp.new(@configuration)
|
@@ -52,6 +53,7 @@ module Deas::SinatraApp
|
|
52
53
|
assert_equal false, settings.sessions
|
53
54
|
assert_equal true, settings.static
|
54
55
|
assert_equal true, settings.reload_templates
|
56
|
+
assert_equal 'latin1', settings.default_encoding
|
55
57
|
assert_instance_of Deas::NullLogger, settings.logger
|
56
58
|
assert_instance_of Deas::Router, settings.router
|
57
59
|
assert_instance_of Deas::NullTemplateSource, settings.template_source
|
@@ -60,6 +62,8 @@ module Deas::SinatraApp
|
|
60
62
|
assert_equal false, settings.logging
|
61
63
|
assert_equal false, settings.raise_errors
|
62
64
|
assert_equal false, settings.show_exceptions
|
65
|
+
|
66
|
+
assert_includes "application/json", settings.add_charset
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
@@ -33,27 +33,27 @@ class Deas::SinatraRunner
|
|
33
33
|
should have_imeths :run
|
34
34
|
|
35
35
|
should "call the sinatra_call's halt with" do
|
36
|
-
|
37
|
-
assert_equal [ 'test' ],
|
36
|
+
response_value = catch(:halt){ subject.halt('test') }
|
37
|
+
assert_equal [ 'test' ], response_value
|
38
38
|
end
|
39
39
|
|
40
40
|
should "call the sinatra_call's redirect method with" do
|
41
|
-
|
42
|
-
|
41
|
+
response_value = catch(:halt){ subject.redirect('http://google.com') }
|
42
|
+
exp = [ 302, { 'Location' => 'http://google.com' } ]
|
43
43
|
|
44
|
-
assert_equal
|
44
|
+
assert_equal exp, response_value
|
45
45
|
end
|
46
46
|
|
47
|
-
should "call the sinatra_call's content_type
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
assert_equal expected, subject.content_type('text/plain', :charset => 'latin1')
|
47
|
+
should "call the sinatra_call's content_type to set the response content type" do
|
48
|
+
args = ['txt', { :charset => 'latin1' }]
|
49
|
+
exp = @fake_sinatra_call.content_type(*args)
|
50
|
+
subject.content_type(*args)
|
51
|
+
assert_equal exp, subject.content_type
|
53
52
|
end
|
54
53
|
|
55
54
|
should "call the sinatra_call's status to set the response status" do
|
56
|
-
|
55
|
+
subject.status(422)
|
56
|
+
assert_equal 422, subject.status
|
57
57
|
end
|
58
58
|
|
59
59
|
should "call the sinatra_call's headers to set the response headers" do
|
@@ -61,15 +61,18 @@ class Deas::SinatraRunner
|
|
61
61
|
'a-header' => 'some value',
|
62
62
|
'other' => 'other'
|
63
63
|
}
|
64
|
-
|
64
|
+
subject.headers(exp_headers)
|
65
|
+
assert_equal exp_headers, subject.headers
|
65
66
|
end
|
66
67
|
|
67
68
|
should "call the sinatra_call's send_file to set the send files" do
|
68
69
|
block_called = false
|
69
|
-
args = subject.send_file('a/file', {:some => 'opts'}, &proc{ block_called = true })
|
70
|
-
assert_equal 'a/file', args.file_path
|
70
|
+
args = subject.send_file('a/file.txt', {:some => 'opts'}, &proc{ block_called = true })
|
71
|
+
assert_equal 'a/file.txt', args.file_path
|
71
72
|
assert_equal({:some => 'opts'}, args.options)
|
72
73
|
assert_true block_called
|
74
|
+
|
75
|
+
assert_equal 'txt', subject.content_type
|
73
76
|
end
|
74
77
|
|
75
78
|
end
|
@@ -44,8 +44,9 @@ class Deas::TestRunner
|
|
44
44
|
end
|
45
45
|
subject{ @runner }
|
46
46
|
|
47
|
-
should have_readers :
|
47
|
+
should have_readers :response_value
|
48
48
|
should have_imeths :run
|
49
|
+
should have_imeths :return_value # TODO: deprecated
|
49
50
|
|
50
51
|
should "raise an invalid error when not passed a view handler" do
|
51
52
|
assert_raises(Deas::InvalidServiceHandlerError) do
|
@@ -81,14 +82,21 @@ class Deas::TestRunner
|
|
81
82
|
assert_true subject.handler.init_called
|
82
83
|
end
|
83
84
|
|
84
|
-
should "not set a
|
85
|
-
assert_nil subject.
|
85
|
+
should "not set a response value on initialize" do
|
86
|
+
assert_nil subject.response_value
|
86
87
|
end
|
87
88
|
|
88
|
-
should "set its
|
89
|
-
assert_nil subject.
|
89
|
+
should "set its response value to the return value of `run!` on run" do
|
90
|
+
assert_nil subject.response_value
|
90
91
|
subject.run
|
91
|
-
assert_equal subject.handler.run!, subject.
|
92
|
+
assert_equal subject.handler.run!, subject.response_value
|
93
|
+
end
|
94
|
+
|
95
|
+
# TODO: deprecated
|
96
|
+
should "alias its response value at `return_value`" do
|
97
|
+
assert_equal subject.response_value, subject.return_value
|
98
|
+
subject.run
|
99
|
+
assert_equal subject.response_value, subject.return_value
|
92
100
|
end
|
93
101
|
|
94
102
|
should "build halt args if halt is called" do
|
@@ -116,6 +124,8 @@ class Deas::TestRunner
|
|
116
124
|
assert_respond_to meth, value
|
117
125
|
end
|
118
126
|
assert_equal 'something', value.value
|
127
|
+
|
128
|
+
assert_same value, subject.content_type
|
119
129
|
end
|
120
130
|
|
121
131
|
should "build status args if status is called" do
|
@@ -123,6 +133,8 @@ class Deas::TestRunner
|
|
123
133
|
assert_kind_of StatusArgs, value
|
124
134
|
assert_respond_to :value, value
|
125
135
|
assert_equal 432, value.value
|
136
|
+
|
137
|
+
assert_same value, subject.status
|
126
138
|
end
|
127
139
|
|
128
140
|
should "build headers args if headers is called" do
|
@@ -131,6 +143,8 @@ class Deas::TestRunner
|
|
131
143
|
assert_respond_to :value, value
|
132
144
|
exp_val = {:some => 'thing'}
|
133
145
|
assert_equal exp_val, value.value
|
146
|
+
|
147
|
+
assert_same value, subject.headers
|
134
148
|
end
|
135
149
|
|
136
150
|
should "build send file args if send file is called" do
|
@@ -225,9 +225,9 @@ module Deas::ViewHandler
|
|
225
225
|
})
|
226
226
|
runner.run
|
227
227
|
|
228
|
-
assert_equal 200, runner.
|
229
|
-
assert_equal({ 'Content-Type' => 'text/plain' }, runner.
|
230
|
-
assert_equal 'test halting', runner.
|
228
|
+
assert_equal 200, runner.response_value.status
|
229
|
+
assert_equal({ 'Content-Type' => 'text/plain' }, runner.response_value.headers)
|
230
|
+
assert_equal 'test halting', runner.response_value.body
|
231
231
|
end
|
232
232
|
|
233
233
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.34.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Redding
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-06-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ns-options
|