sanford 0.19.0 → 0.19.1
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.
- checksums.yaml +5 -5
- data/Gemfile +2 -2
- data/lib/sanford/runner.rb +4 -0
- data/lib/sanford/service_handler.rb +5 -4
- data/lib/sanford/template_engine.rb +8 -0
- data/lib/sanford/template_source.rb +5 -0
- data/lib/sanford/version.rb +1 -1
- data/sanford.gemspec +1 -1
- data/test/support/app_server.rb +22 -7
- data/test/support/template.erb +1 -1
- data/test/system/server_tests.rb +18 -2
- data/test/system/service_handler_tests.rb +32 -3
- data/test/unit/runner_tests.rb +41 -7
- data/test/unit/service_handler_tests.rb +8 -0
- data/test/unit/template_engine_tests.rb +15 -2
- data/test/unit/template_source_tests.rb +45 -7
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA1:
|
3
|
-
data.tar.gz: be152ddfab1bc45693e6d3f7770fb2dcac53e7ac
|
4
|
-
metadata.gz: 550b49e83a11d06488fbdddcec205ef4adb7df58
|
5
2
|
SHA512:
|
6
|
-
data.tar.gz:
|
7
|
-
metadata.gz:
|
3
|
+
data.tar.gz: 37d9c67d1935a3a4de78f3fae6fd4f01127d5cea1e516c3e312f0dd4a61a33e4d4bf7296b3e73d67823113938d6aecb2177bb1044180667f92f9d44b6e7a73f6
|
4
|
+
metadata.gz: b5b32bfaf14577c18ce4da0506753aae3ebff7f4fee0e858a1c43e5b090d59117a6f713854cd7f7ed51a543b59a18b6d1456a510da191bdc24d85d3a085399f6
|
5
|
+
SHA1:
|
6
|
+
data.tar.gz: f630d9098164756eec0de60f38a03567c357be3b
|
7
|
+
metadata.gz: ed54304eab935901a6f8882e713dd58a2878659b
|
data/Gemfile
CHANGED
data/lib/sanford/runner.rb
CHANGED
@@ -62,10 +62,11 @@ module Sanford
|
|
62
62
|
def params; @sanford_runner.params; end
|
63
63
|
|
64
64
|
# response
|
65
|
-
def status(*args);
|
66
|
-
def data(*args);
|
67
|
-
def halt(*args);
|
68
|
-
def render(*args);
|
65
|
+
def status(*args); @sanford_runner.status(*args); end
|
66
|
+
def data(*args); @sanford_runner.data(*args); end
|
67
|
+
def halt(*args); @sanford_runner.halt(*args); end
|
68
|
+
def render(*args); @sanford_runner.render(*args); end
|
69
|
+
def partial(*args); @sanford_runner.partial(*args); end
|
69
70
|
|
70
71
|
end
|
71
72
|
|
@@ -17,6 +17,10 @@ module Sanford
|
|
17
17
|
raise NotImplementedError
|
18
18
|
end
|
19
19
|
|
20
|
+
def partial(name, locals)
|
21
|
+
raise NotImplementedError
|
22
|
+
end
|
23
|
+
|
20
24
|
def ==(other_engine)
|
21
25
|
if other_engine.kind_of?(TemplateEngine)
|
22
26
|
self.source_path == other_engine.source_path &&
|
@@ -31,6 +35,10 @@ module Sanford
|
|
31
35
|
class NullTemplateEngine < TemplateEngine
|
32
36
|
|
33
37
|
def render(template_name, service_handler, locals)
|
38
|
+
self.partial(template_name, locals)
|
39
|
+
end
|
40
|
+
|
41
|
+
def partial(template_name, locals)
|
34
42
|
paths = Dir.glob(self.source_path.join("#{template_name}*"))
|
35
43
|
if paths.size > 1
|
36
44
|
raise ArgumentError, "#{template_name.inspect} matches more than one " \
|
@@ -41,6 +41,11 @@ module Sanford
|
|
41
41
|
engine.render(template_name, service_handler, locals)
|
42
42
|
end
|
43
43
|
|
44
|
+
def partial(template_name, locals)
|
45
|
+
engine = @engines[get_template_ext(template_name)]
|
46
|
+
engine.partial(template_name, locals)
|
47
|
+
end
|
48
|
+
|
44
49
|
def ==(other_template_source)
|
45
50
|
if other_template_source.kind_of?(TemplateSource)
|
46
51
|
self.path == other_template_source.path &&
|
data/lib/sanford/version.rb
CHANGED
data/sanford.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_development_dependency("assert", ["~> 2.16.
|
21
|
+
gem.add_development_dependency("assert", ["~> 2.16.3"])
|
22
22
|
|
23
23
|
gem.add_dependency("dat-tcp", ["~> 0.8.2"])
|
24
24
|
gem.add_dependency("much-plugin", ["~> 0.2.0"])
|
data/test/support/app_server.rb
CHANGED
@@ -21,6 +21,14 @@ class AppERBEngine < Sanford::TemplateEngine
|
|
21
21
|
b = RenderScope.new(service_handler).get_binding
|
22
22
|
ERB.new(File.read(full_path)).result(b)
|
23
23
|
end
|
24
|
+
|
25
|
+
def partial(path, locals)
|
26
|
+
require 'erb'
|
27
|
+
full_path = ROOT_PATH.join("test/support/#{path}.erb")
|
28
|
+
|
29
|
+
b = RenderScope.new(nil).get_binding
|
30
|
+
ERB.new(File.read(full_path)).result(b)
|
31
|
+
end
|
24
32
|
end
|
25
33
|
|
26
34
|
class AppServer
|
@@ -38,12 +46,13 @@ class AppServer
|
|
38
46
|
router do
|
39
47
|
service_handler_ns 'AppHandlers'
|
40
48
|
|
41
|
-
service 'echo',
|
42
|
-
service 'raise',
|
43
|
-
service 'bad_response',
|
44
|
-
service '
|
45
|
-
service '
|
46
|
-
service '
|
49
|
+
service 'echo', 'Echo'
|
50
|
+
service 'raise', 'Raise'
|
51
|
+
service 'bad_response', 'BadResponse'
|
52
|
+
service 'render_template', 'RenderTemplate'
|
53
|
+
service 'partial_template', 'PartialTemplate'
|
54
|
+
service 'halt', 'Halt'
|
55
|
+
service 'custom_error', 'CustomError'
|
47
56
|
end
|
48
57
|
|
49
58
|
Sanford::TemplateSource.new(ROOT_PATH.join('test/support').to_s).tap do |s|
|
@@ -96,11 +105,17 @@ module AppHandlers
|
|
96
105
|
def init!
|
97
106
|
@message = params['message']
|
98
107
|
end
|
99
|
-
|
108
|
+
end
|
109
|
+
class RenderTemplate < Template
|
100
110
|
def run!
|
101
111
|
render "template"
|
102
112
|
end
|
103
113
|
end
|
114
|
+
class PartialTemplate < Template
|
115
|
+
def run!
|
116
|
+
partial "template"
|
117
|
+
end
|
118
|
+
end
|
104
119
|
|
105
120
|
class Halt
|
106
121
|
include Sanford::ServiceHandler
|
data/test/support/template.erb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ERB Template Message: <%= view.message %>
|
1
|
+
ERB Template Message: <%= view.nil? ? '' : view.message %>
|
data/test/system/server_tests.rb
CHANGED
@@ -166,11 +166,11 @@ module Sanford::Server
|
|
166
166
|
|
167
167
|
end
|
168
168
|
|
169
|
-
class
|
169
|
+
class RenderTemplateTests < RunningAppServerTests
|
170
170
|
desc "calling a service that renders a template"
|
171
171
|
setup do
|
172
172
|
@message = Factory.text
|
173
|
-
@client.set_request('
|
173
|
+
@client.set_request('render_template', :message => @message)
|
174
174
|
@response = @client.call
|
175
175
|
end
|
176
176
|
|
@@ -182,6 +182,22 @@ module Sanford::Server
|
|
182
182
|
|
183
183
|
end
|
184
184
|
|
185
|
+
class PartialTemplateTests < RunningAppServerTests
|
186
|
+
desc "calling a service that renders a partial template"
|
187
|
+
setup do
|
188
|
+
@message = Factory.text
|
189
|
+
@client.set_request('partial_template', :message => @message)
|
190
|
+
@response = @client.call
|
191
|
+
end
|
192
|
+
|
193
|
+
should "return a success response with the rendered data" do
|
194
|
+
assert_equal 200, subject.code
|
195
|
+
assert_nil subject.status.message
|
196
|
+
assert_equal "ERB Template Message: \n", subject.data
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
185
201
|
class KeepAliveTests < RunningAppServerTests
|
186
202
|
desc "receiving a keep-alive connection"
|
187
203
|
setup do
|
@@ -57,11 +57,11 @@ module Sanford::ServiceHandler
|
|
57
57
|
|
58
58
|
end
|
59
59
|
|
60
|
-
class
|
61
|
-
desc "AppHandlers::
|
60
|
+
class RenderTemplateHandlerTests < SystemTests
|
61
|
+
desc "AppHandlers::RenderTemplate"
|
62
62
|
setup do
|
63
63
|
@params = { 'message' => Factory.text }
|
64
|
-
@runner = test_runner(AppHandlers::
|
64
|
+
@runner = test_runner(AppHandlers::RenderTemplate, {
|
65
65
|
:params => @params,
|
66
66
|
:template_source => AppServer.config.template_source
|
67
67
|
})
|
@@ -78,12 +78,41 @@ module Sanford::ServiceHandler
|
|
78
78
|
should "return a 200 response and render the template when run" do
|
79
79
|
response = @runner.run
|
80
80
|
assert_equal 200, response.code
|
81
|
+
|
81
82
|
exp = "ERB Template Message: #{@params['message']}\n"
|
82
83
|
assert_equal exp, response.data
|
83
84
|
end
|
84
85
|
|
85
86
|
end
|
86
87
|
|
88
|
+
class PartialTemplateHandlerTests < SystemTests
|
89
|
+
desc "AppHandlers::PartialTemplate"
|
90
|
+
setup do
|
91
|
+
@params = { 'message' => Factory.text }
|
92
|
+
@runner = test_runner(AppHandlers::PartialTemplate, {
|
93
|
+
:params => @params,
|
94
|
+
:template_source => AppServer.config.template_source
|
95
|
+
})
|
96
|
+
@handler = @runner.handler
|
97
|
+
end
|
98
|
+
subject{ @handler }
|
99
|
+
|
100
|
+
should have_readers :message
|
101
|
+
|
102
|
+
should "know its message" do
|
103
|
+
assert_equal @params['message'], subject.message
|
104
|
+
end
|
105
|
+
|
106
|
+
should "return a 200 response and render the template when run" do
|
107
|
+
response = @runner.run
|
108
|
+
assert_equal 200, response.code
|
109
|
+
|
110
|
+
exp = "ERB Template Message: \n"
|
111
|
+
assert_equal exp, response.data
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
87
116
|
class HaltHandlerTests < SystemTests
|
88
117
|
desc "AppHandlers::Halt"
|
89
118
|
setup do
|
data/test/unit/runner_tests.rb
CHANGED
@@ -41,8 +41,8 @@ class Sanford::Runner
|
|
41
41
|
should have_readers :handler_class, :handler
|
42
42
|
should have_readers :logger, :router, :template_source
|
43
43
|
should have_readers :request, :params
|
44
|
-
should have_imeths :run, :to_response
|
45
|
-
should have_imeths :halt
|
44
|
+
should have_imeths :run, :to_response, :status, :data
|
45
|
+
should have_imeths :halt, :render, :partial
|
46
46
|
|
47
47
|
should "know its handler class and handler" do
|
48
48
|
assert_equal @handler_class, subject.handler_class
|
@@ -180,19 +180,28 @@ class Sanford::Runner
|
|
180
180
|
|
181
181
|
end
|
182
182
|
|
183
|
-
class
|
184
|
-
desc "the `render` method"
|
183
|
+
class RenderPartialTests < InitTests
|
185
184
|
setup do
|
186
185
|
@template_name = Factory.path
|
187
|
-
@locals
|
188
|
-
|
189
|
-
|
186
|
+
@locals = { Factory.string => Factory.string }
|
187
|
+
@data = Factory.text
|
188
|
+
|
190
189
|
@source = @runner.template_source
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
class RenderTests < RenderPartialTests
|
195
|
+
desc "the `render` method"
|
196
|
+
setup do
|
197
|
+
data = @data
|
198
|
+
@render_called_with = nil
|
191
199
|
Assert.stub(@source, :render){ |*args| @render_called_with = args; data }
|
192
200
|
end
|
193
201
|
|
194
202
|
should "call to the template source's render method and set the return value as data" do
|
195
203
|
subject.render(@template_name, @locals)
|
204
|
+
|
196
205
|
exp = [@template_name, subject.handler, @locals]
|
197
206
|
assert_equal exp, @render_called_with
|
198
207
|
assert_equal @data, subject.data
|
@@ -200,12 +209,37 @@ class Sanford::Runner
|
|
200
209
|
|
201
210
|
should "default the locals if none given" do
|
202
211
|
subject.render(@template_name)
|
212
|
+
|
203
213
|
exp = [@template_name, subject.handler, {}]
|
204
214
|
assert_equal exp, @render_called_with
|
205
215
|
end
|
206
216
|
|
207
217
|
end
|
208
218
|
|
219
|
+
class PartialTests < RenderPartialTests
|
220
|
+
desc "the `partial` method"
|
221
|
+
setup do
|
222
|
+
data = @data
|
223
|
+
@partial_called_with = nil
|
224
|
+
Assert.stub(@source, :partial){ |*args| @partial_called_with = args; data }
|
225
|
+
end
|
226
|
+
|
227
|
+
should "call to the template source's partial method and set the return value as data" do
|
228
|
+
subject.partial(@template_name, @locals)
|
229
|
+
|
230
|
+
exp = [@template_name, @locals]
|
231
|
+
assert_equal exp, @partial_called_with
|
232
|
+
assert_equal @data, subject.data
|
233
|
+
end
|
234
|
+
|
235
|
+
should "default the locals if none given" do
|
236
|
+
subject.partial(@template_name)
|
237
|
+
exp = [@template_name, {}]
|
238
|
+
assert_equal exp, @partial_called_with
|
239
|
+
end
|
240
|
+
|
241
|
+
end
|
242
|
+
|
209
243
|
class TestServiceHandler
|
210
244
|
include Sanford::ServiceHandler
|
211
245
|
|
@@ -255,6 +255,14 @@ module Sanford::ServiceHandler
|
|
255
255
|
assert_equal exp_args, @meth_args
|
256
256
|
end
|
257
257
|
|
258
|
+
should "call to the runner for its partial helper" do
|
259
|
+
capture_runner_meth_args_for(:partial)
|
260
|
+
exp_args = @args
|
261
|
+
subject.instance_eval{ partial(*exp_args) }
|
262
|
+
|
263
|
+
assert_equal exp_args, @meth_args
|
264
|
+
end
|
265
|
+
|
258
266
|
private
|
259
267
|
|
260
268
|
def stub_runner_with_something_for(meth)
|
@@ -19,7 +19,7 @@ class Sanford::TemplateEngine
|
|
19
19
|
subject{ @engine }
|
20
20
|
|
21
21
|
should have_readers :source_path, :logger, :opts
|
22
|
-
should have_imeths :render
|
22
|
+
should have_imeths :render, :partial
|
23
23
|
|
24
24
|
should "default its source path" do
|
25
25
|
assert_equal Pathname.new(nil.to_s), subject.source_path
|
@@ -56,6 +56,12 @@ class Sanford::TemplateEngine
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
should "raise NotImplementedError on `partial`" do
|
60
|
+
assert_raises NotImplementedError do
|
61
|
+
subject.partial(@path, @locals)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
59
65
|
end
|
60
66
|
|
61
67
|
class NullTemplateEngineTests < Assert::Context
|
@@ -69,10 +75,11 @@ class Sanford::TemplateEngine
|
|
69
75
|
assert_kind_of Sanford::TemplateEngine, subject
|
70
76
|
end
|
71
77
|
|
72
|
-
should "read and return the given path in its source path
|
78
|
+
should "read and return the given path in its source path" do
|
73
79
|
exists_file = ['test/support/template', 'test/support/template.erb'].sample
|
74
80
|
exp = File.read(Dir.glob("#{subject.source_path.join(exists_file)}*").first)
|
75
81
|
assert_equal exp, subject.render(exists_file, @service_handler, @locals)
|
82
|
+
assert_equal exp, subject.partial(exists_file, @locals)
|
76
83
|
end
|
77
84
|
|
78
85
|
should "complain if given a path that matches multiple files" do
|
@@ -80,6 +87,9 @@ class Sanford::TemplateEngine
|
|
80
87
|
assert_raises ArgumentError do
|
81
88
|
subject.render(conflict_file, @service_handler, @locals)
|
82
89
|
end
|
90
|
+
assert_raises ArgumentError do
|
91
|
+
subject.partial(conflict_file, @locals)
|
92
|
+
end
|
83
93
|
end
|
84
94
|
|
85
95
|
should "complain if given a path that does not exist in its source path" do
|
@@ -87,6 +97,9 @@ class Sanford::TemplateEngine
|
|
87
97
|
assert_raises ArgumentError do
|
88
98
|
subject.render(no_exists_file, @service_handler, @locals)
|
89
99
|
end
|
100
|
+
assert_raises ArgumentError do
|
101
|
+
subject.partial(no_exists_file, @locals)
|
102
|
+
end
|
90
103
|
end
|
91
104
|
|
92
105
|
end
|
@@ -22,7 +22,7 @@ class Sanford::TemplateSource
|
|
22
22
|
|
23
23
|
should have_readers :path, :engines
|
24
24
|
should have_imeths :engine, :engine_for?, :engine_for_template?
|
25
|
-
should have_imeths :render
|
25
|
+
should have_imeths :render, :partial
|
26
26
|
|
27
27
|
should "know its path" do
|
28
28
|
assert_equal @source_path.to_s, subject.path
|
@@ -94,20 +94,24 @@ class Sanford::TemplateSource
|
|
94
94
|
|
95
95
|
end
|
96
96
|
|
97
|
-
class
|
98
|
-
desc "when rendering a template"
|
97
|
+
class TemplateTests < InitTests
|
99
98
|
setup do
|
100
99
|
@source.engine('test', TestEngine)
|
101
100
|
@source.engine('json', JsonEngine)
|
102
101
|
end
|
103
102
|
|
103
|
+
end
|
104
|
+
|
105
|
+
class RenderTemplateTests < TemplateTests
|
106
|
+
desc "when rendering a template"
|
107
|
+
|
104
108
|
should "render a matching template using the configured engine" do
|
105
109
|
locals = { :something => Factory.string }
|
106
110
|
result = subject.render('test_template', TestServiceHandler, locals)
|
107
|
-
assert_equal 'test-engine', result
|
111
|
+
assert_equal 'test-engine-render', result
|
108
112
|
|
109
113
|
result = subject.render('test_template.test', TestServiceHandler, locals)
|
110
|
-
assert_equal 'test-engine', result
|
114
|
+
assert_equal 'test-engine-render', result
|
111
115
|
end
|
112
116
|
|
113
117
|
should "use the null template engine when an engine can't be found" do
|
@@ -126,6 +130,34 @@ class Sanford::TemplateSource
|
|
126
130
|
|
127
131
|
end
|
128
132
|
|
133
|
+
class PartialTemplateTests < TemplateTests
|
134
|
+
desc "when rendering a partial template"
|
135
|
+
|
136
|
+
should "render a matching partial template using the configured engine" do
|
137
|
+
locals = { :something => Factory.string }
|
138
|
+
result = subject.partial('test_template', locals)
|
139
|
+
assert_equal 'test-engine-partial', result
|
140
|
+
|
141
|
+
result = subject.partial('test_template.test', locals)
|
142
|
+
assert_equal 'test-engine-partial', result
|
143
|
+
end
|
144
|
+
|
145
|
+
should "use the null template engine when an engine can't be found" do
|
146
|
+
assert_raises(ArgumentError) do
|
147
|
+
subject.partial(Factory.string, {})
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
should "complain if the given template name matches multiple templates" do
|
152
|
+
# there should be 2 files called "conflict_template" in `test/support`
|
153
|
+
# with diff extensions
|
154
|
+
assert_raises(ArgumentError) do
|
155
|
+
subject.partial('conflict_template', {})
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
129
161
|
class NullTemplateSourceTests < Assert::Context
|
130
162
|
desc "Sanford::NullTemplateSource"
|
131
163
|
setup do
|
@@ -151,13 +183,19 @@ class Sanford::TemplateSource
|
|
151
183
|
|
152
184
|
class TestEngine < Sanford::TemplateEngine
|
153
185
|
def render(path, service_handler, locals)
|
154
|
-
'test-engine'
|
186
|
+
'test-engine-render'
|
187
|
+
end
|
188
|
+
def partial(path, locals)
|
189
|
+
'test-engine-partial'
|
155
190
|
end
|
156
191
|
end
|
157
192
|
|
158
193
|
class JsonEngine < Sanford::TemplateEngine
|
159
194
|
def render(path, service_handler, locals)
|
160
|
-
'json-engine'
|
195
|
+
'json-engine-render'
|
196
|
+
end
|
197
|
+
def partial(path, locals)
|
198
|
+
'json-engine-partial'
|
161
199
|
end
|
162
200
|
end
|
163
201
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sanford
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.19.
|
4
|
+
version: 0.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Collin Redding
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2017-08-17 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: assert
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2.16.
|
22
|
+
version: 2.16.3
|
23
23
|
type: :development
|
24
24
|
version_requirements: *id001
|
25
25
|
- !ruby/object:Gem::Dependency
|
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
154
|
requirements: []
|
155
155
|
|
156
156
|
rubyforge_project:
|
157
|
-
rubygems_version: 2.6.
|
157
|
+
rubygems_version: 2.6.6
|
158
158
|
signing_key:
|
159
159
|
specification_version: 4
|
160
160
|
summary: Sanford TCP protocol server for hosting services
|