sanford 0.11.1 → 0.12.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/sanford/cli.rb +7 -6
- data/lib/sanford/route.rb +7 -1
- data/lib/sanford/runner.rb +19 -2
- data/lib/sanford/sanford_runner.rb +1 -13
- data/lib/sanford/server.rb +3 -7
- data/lib/sanford/server_data.rb +15 -10
- data/lib/sanford/service_handler.rb +6 -11
- data/lib/sanford/template_engine.rb +3 -1
- data/lib/sanford/template_source.rb +10 -2
- data/lib/sanford/test_runner.rb +9 -10
- data/lib/sanford/version.rb +1 -1
- data/sanford.gemspec +2 -2
- data/test/support/app_server.rb +3 -2
- data/test/unit/cli_tests.rb +29 -21
- data/test/unit/route_tests.rb +39 -13
- data/test/unit/runner_tests.rb +36 -13
- data/test/unit/sanford_runner_tests.rb +19 -42
- data/test/unit/server_data_tests.rb +46 -22
- data/test/unit/server_tests.rb +4 -20
- data/test/unit/service_handler_tests.rb +28 -40
- data/test/unit/template_engine_tests.rb +12 -1
- data/test/unit/template_source_tests.rb +30 -7
- data/test/unit/test_runner_tests.rb +20 -39
- metadata +16 -16
data/lib/sanford/cli.rb
CHANGED
@@ -23,7 +23,7 @@ module Sanford
|
|
23
23
|
rescue CLIRB::HelpExit
|
24
24
|
@kernel.puts help
|
25
25
|
rescue CLIRB::VersionExit
|
26
|
-
@kernel.puts
|
26
|
+
@kernel.puts Sanford::VERSION
|
27
27
|
rescue CLIRB::Error, Sanford::ConfigFile::InvalidError => exception
|
28
28
|
@kernel.puts "#{exception.message}\n\n"
|
29
29
|
@kernel.puts help
|
@@ -40,8 +40,9 @@ module Sanford
|
|
40
40
|
|
41
41
|
def run!(*args)
|
42
42
|
@cli.parse!(args)
|
43
|
-
command
|
44
|
-
config_file_path
|
43
|
+
config_file_path, command = @cli.args
|
44
|
+
config_file_path ||= 'config.sanford'
|
45
|
+
command ||= 'run'
|
45
46
|
server = Sanford::ConfigFile.new(config_file_path).server
|
46
47
|
case(command)
|
47
48
|
when 'run'
|
@@ -58,9 +59,9 @@ module Sanford
|
|
58
59
|
end
|
59
60
|
|
60
61
|
def help
|
61
|
-
"Usage: sanford [CONFIG_FILE] [COMMAND]\n" \
|
62
|
-
"Commands: run, start, stop, restart" \
|
63
|
-
"#{@cli}"
|
62
|
+
"Usage: sanford [CONFIG_FILE] [COMMAND] [options]\n\n" \
|
63
|
+
"Commands: run, start, stop, restart\n" \
|
64
|
+
"Options: #{@cli}"
|
64
65
|
end
|
65
66
|
|
66
67
|
end
|
data/lib/sanford/route.rb
CHANGED
@@ -17,7 +17,13 @@ module Sanford
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def run(request, server_data)
|
20
|
-
SanfordRunner.new(self.handler_class,
|
20
|
+
SanfordRunner.new(self.handler_class, {
|
21
|
+
:request => request,
|
22
|
+
:params => request.params,
|
23
|
+
:logger => server_data.logger,
|
24
|
+
:router => server_data.router,
|
25
|
+
:template_source => server_data.template_source
|
26
|
+
}).run
|
21
27
|
end
|
22
28
|
|
23
29
|
private
|
data/lib/sanford/runner.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
# need to define class immediately b/c of circular requires:
|
2
|
+
# - runner -> router -> route -> sanford_runner -> runner
|
3
|
+
module Sanford; end
|
4
|
+
class Sanford::Runner; end
|
5
|
+
|
1
6
|
require 'sanford-protocol'
|
2
7
|
require 'sanford/logger'
|
8
|
+
require 'sanford/router'
|
3
9
|
require 'sanford/template_source'
|
4
10
|
|
5
11
|
module Sanford
|
@@ -9,17 +15,28 @@ module Sanford
|
|
9
15
|
ResponseArgs = Struct.new(:status, :data)
|
10
16
|
|
11
17
|
attr_reader :handler_class, :handler
|
12
|
-
attr_reader :request, :params, :logger, :template_source
|
18
|
+
attr_reader :request, :params, :logger, :router, :template_source
|
13
19
|
|
14
|
-
def initialize(handler_class)
|
20
|
+
def initialize(handler_class, args = nil)
|
15
21
|
@handler_class = handler_class
|
16
22
|
@handler = @handler_class.new(self)
|
23
|
+
|
24
|
+
a = args || {}
|
25
|
+
@request = a[:request]
|
26
|
+
@params = a[:params] || {}
|
27
|
+
@logger = a[:logger] || Sanford::NullLogger.new
|
28
|
+
@router = a[:router] || Sanford::Router.new
|
29
|
+
@template_source = a[:template_source] || Sanford::NullTemplateSource.new
|
17
30
|
end
|
18
31
|
|
19
32
|
def run
|
20
33
|
raise NotImplementedError
|
21
34
|
end
|
22
35
|
|
36
|
+
def render(path, locals = nil)
|
37
|
+
self.template_source.render(path, self.handler, locals || {})
|
38
|
+
end
|
39
|
+
|
23
40
|
# It's best to keep what `halt` and `catch_halt` return in the same format.
|
24
41
|
# Currently this is a `ResponseArgs` object. This is so no matter how the
|
25
42
|
# block returns (either by throwing or running normally), you get the same
|
@@ -2,19 +2,7 @@ require 'sanford/runner'
|
|
2
2
|
|
3
3
|
module Sanford
|
4
4
|
|
5
|
-
class SanfordRunner <
|
6
|
-
|
7
|
-
def initialize(handler_class, request, server_data)
|
8
|
-
@request = request
|
9
|
-
@params = @request.params
|
10
|
-
@logger = server_data.logger
|
11
|
-
@template_source = server_data.template_source
|
12
|
-
|
13
|
-
super(handler_class)
|
14
|
-
end
|
15
|
-
|
16
|
-
# call the handler init and the handler run - if the init halts, run won't
|
17
|
-
# be called.
|
5
|
+
class SanfordRunner < Runner
|
18
6
|
|
19
7
|
def run
|
20
8
|
build_response do
|
data/lib/sanford/server.rb
CHANGED
@@ -172,11 +172,6 @@ module Sanford
|
|
172
172
|
self.configuration.template_source(*args)
|
173
173
|
end
|
174
174
|
|
175
|
-
def build_template_source(path, &block)
|
176
|
-
block ||= proc{ }
|
177
|
-
self.template_source TemplateSource.new(path).tap(&block)
|
178
|
-
end
|
179
|
-
|
180
175
|
end
|
181
176
|
|
182
177
|
class Connection
|
@@ -266,9 +261,10 @@ module Sanford
|
|
266
261
|
|
267
262
|
def to_hash
|
268
263
|
super.merge({
|
264
|
+
:init_procs => self.init_procs,
|
269
265
|
:error_procs => self.error_procs,
|
270
|
-
:
|
271
|
-
:
|
266
|
+
:router => self.router,
|
267
|
+
:routes => self.routes
|
272
268
|
})
|
273
269
|
end
|
274
270
|
|
data/lib/sanford/server_data.rb
CHANGED
@@ -10,24 +10,29 @@ module Sanford
|
|
10
10
|
attr_reader :name
|
11
11
|
attr_reader :ip, :port
|
12
12
|
attr_reader :pid_file
|
13
|
-
attr_reader :logger, :verbose_logging
|
14
13
|
attr_reader :receives_keep_alive
|
15
|
-
attr_reader :
|
16
|
-
attr_reader :
|
17
|
-
attr_reader :
|
14
|
+
attr_reader :verbose_logging, :logger, :template_source
|
15
|
+
attr_reader :init_procs, :error_procs
|
16
|
+
attr_reader :router, :routes
|
18
17
|
|
19
18
|
def initialize(args = nil)
|
20
19
|
args ||= {}
|
21
|
-
@name
|
22
|
-
@ip
|
23
|
-
@port
|
20
|
+
@name = args[:name]
|
21
|
+
@ip = args[:ip]
|
22
|
+
@port = args[:port]
|
24
23
|
@pid_file = args[:pid_file]
|
25
|
-
|
26
|
-
@verbose_logging = !!args[:verbose_logging]
|
24
|
+
|
27
25
|
@receives_keep_alive = !!args[:receives_keep_alive]
|
26
|
+
|
27
|
+
@verbose_logging = !!args[:verbose_logging]
|
28
|
+
@logger = args[:logger]
|
29
|
+
@template_source = args[:template_source]
|
30
|
+
|
31
|
+
@init_procs = args[:init_procs] || []
|
28
32
|
@error_procs = args[:error_procs] || []
|
33
|
+
|
34
|
+
@router = args[:router]
|
29
35
|
@routes = build_routes(args[:routes] || [])
|
30
|
-
@template_source = args[:template_source]
|
31
36
|
end
|
32
37
|
|
33
38
|
def route_for(name)
|
@@ -37,23 +37,18 @@ module Sanford
|
|
37
37
|
|
38
38
|
def inspect
|
39
39
|
reference = '0x0%x' % (self.object_id << 1)
|
40
|
-
"#<#{self.class}:#{reference} @request=#{
|
40
|
+
"#<#{self.class}:#{reference} @request=#{request.inspect}>"
|
41
41
|
end
|
42
42
|
|
43
43
|
private
|
44
44
|
|
45
45
|
# Helpers
|
46
46
|
|
47
|
-
def render(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
def halt(*args); @sanford_runner.halt(*args); end
|
54
|
-
def request; @sanford_runner.request; end
|
55
|
-
def params; @sanford_runner.params; end
|
56
|
-
def logger; @sanford_runner.logger; end
|
47
|
+
def render(*args); @sanford_runner.render(*args); end
|
48
|
+
def halt(*args); @sanford_runner.halt(*args); end
|
49
|
+
def request; @sanford_runner.request; end
|
50
|
+
def params; @sanford_runner.params; end
|
51
|
+
def logger; @sanford_runner.logger; end
|
57
52
|
|
58
53
|
def run_callback(callback)
|
59
54
|
(self.class.send("#{callback}_callbacks") || []).each do |callback|
|
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'pathname'
|
2
|
+
require 'sanford/logger'
|
2
3
|
|
3
4
|
module Sanford
|
4
5
|
|
5
6
|
class TemplateEngine
|
6
7
|
|
7
|
-
attr_reader :source_path, :opts
|
8
|
+
attr_reader :source_path, :logger, :opts
|
8
9
|
|
9
10
|
def initialize(opts = nil)
|
10
11
|
@opts = opts || {}
|
11
12
|
@source_path = Pathname.new(@opts['source_path'].to_s)
|
13
|
+
@logger = @opts['logger'] || Sanford::NullLogger.new
|
12
14
|
end
|
13
15
|
|
14
16
|
def render(path, service_handler, locals)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'sanford/logger'
|
1
2
|
require 'sanford/template_engine'
|
2
3
|
|
3
4
|
module Sanford
|
@@ -10,9 +11,12 @@ module Sanford
|
|
10
11
|
|
11
12
|
attr_reader :path, :engines
|
12
13
|
|
13
|
-
def initialize(path)
|
14
|
+
def initialize(path, logger = nil)
|
14
15
|
@path = path.to_s
|
15
|
-
@default_opts = {
|
16
|
+
@default_opts = {
|
17
|
+
'source_path' => @path,
|
18
|
+
'logger' => logger || Sanford::NullLogger.new
|
19
|
+
}
|
16
20
|
@engines = Hash.new{ |h,k| Sanford::NullTemplateEngine.new(@default_opts) }
|
17
21
|
end
|
18
22
|
|
@@ -25,6 +29,10 @@ module Sanford
|
|
25
29
|
@engines[input_ext.to_s] = engine_class.new(engine_opts)
|
26
30
|
end
|
27
31
|
|
32
|
+
def engine_for?(template_name)
|
33
|
+
@engines.keys.include?(get_template_ext(template_name))
|
34
|
+
end
|
35
|
+
|
28
36
|
def render(template_path, service_handler, locals)
|
29
37
|
engine = @engines[get_template_ext(template_path)]
|
30
38
|
engine.render(template_path, service_handler, locals)
|
data/lib/sanford/test_runner.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'sanford-protocol'
|
2
|
-
require 'sanford/logger'
|
3
2
|
require 'sanford/runner'
|
4
3
|
require 'sanford/service_handler'
|
5
|
-
require 'sanford/template_source'
|
6
4
|
|
7
5
|
module Sanford
|
8
6
|
|
9
7
|
InvalidServiceHandlerError = Class.new(StandardError)
|
10
8
|
|
11
|
-
class TestRunner <
|
9
|
+
class TestRunner < Runner
|
12
10
|
|
13
11
|
attr_reader :response
|
14
12
|
|
@@ -17,14 +15,15 @@ module Sanford
|
|
17
15
|
raise InvalidServiceHandlerError, "#{handler_class.inspect} is not a"\
|
18
16
|
" Sanford::ServiceHandler"
|
19
17
|
end
|
20
|
-
args = (args || {}).dup
|
21
|
-
@request = args.delete(:request)
|
22
|
-
@params = args.delete(:params) || {}
|
23
|
-
@logger = args.delete(:logger) || Sanford::NullLogger.new
|
24
|
-
@template_source = args.delete(:template_source) ||
|
25
|
-
Sanford::NullTemplateSource.new
|
26
18
|
|
27
|
-
|
19
|
+
args = (args || {}).dup
|
20
|
+
super(handler_class, {
|
21
|
+
:request => args.delete(:request),
|
22
|
+
:params => args.delete(:params),
|
23
|
+
:logger => args.delete(:logger),
|
24
|
+
:router => args.delete(:router),
|
25
|
+
:template_source => args.delete(:template_source)
|
26
|
+
})
|
28
27
|
args.each{ |key, value| @handler.send("#{key}=", value) }
|
29
28
|
|
30
29
|
return_value = catch(:halt){ @handler.init; nil }
|
data/lib/sanford/version.rb
CHANGED
data/sanford.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
|
|
20
20
|
|
21
21
|
gem.add_dependency("dat-tcp", ["~> 0.5"])
|
22
22
|
gem.add_dependency("ns-options", ["~> 1.1"])
|
23
|
-
gem.add_dependency("sanford-protocol", ["~> 0.
|
23
|
+
gem.add_dependency("sanford-protocol", ["~> 0.10"])
|
24
24
|
|
25
|
-
gem.add_development_dependency("assert", ["~> 2.
|
25
|
+
gem.add_development_dependency("assert", ["~> 2.12"])
|
26
26
|
end
|
data/test/support/app_server.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
|
-
require 'sanford'
|
3
2
|
require 'sanford-protocol'
|
3
|
+
require 'sanford'
|
4
4
|
|
5
5
|
if !defined?(ROOT_PATH)
|
6
6
|
ROOT_PATH = Pathname.new(File.expand_path('../../..', __FILE__))
|
@@ -40,8 +40,9 @@ class AppServer
|
|
40
40
|
service 'custom_error', 'CustomError'
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
Sanford::TemplateSource.new(ROOT_PATH.join('test/support').to_s).tap do |s|
|
44
44
|
s.engine 'erb', AppERBEngine
|
45
|
+
template_source s
|
45
46
|
end
|
46
47
|
|
47
48
|
error do |exception, server_data, request|
|
data/test/unit/cli_tests.rb
CHANGED
@@ -1,10 +1,23 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'sanford/cli'
|
3
3
|
|
4
|
+
require 'sanford/server'
|
5
|
+
|
4
6
|
class Sanford::CLI
|
5
7
|
|
6
8
|
class UnitTests < Assert::Context
|
7
9
|
desc "Sanford::CLI"
|
10
|
+
setup do
|
11
|
+
@cli_class = Sanford::CLI
|
12
|
+
end
|
13
|
+
subject{ @cli_class }
|
14
|
+
|
15
|
+
should have_imeths :run
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class InitTests < UnitTests
|
20
|
+
desc "when init"
|
8
21
|
setup do
|
9
22
|
@kernel_spy = KernelSpy.new
|
10
23
|
@file_path = Factory.file_path
|
@@ -14,48 +27,43 @@ class Sanford::CLI
|
|
14
27
|
@config_file = FakeConfigFile.new(@server)
|
15
28
|
Assert.stub(Sanford::ConfigFile, :new).with(@file_path){ @config_file }
|
16
29
|
|
30
|
+
@process_spy = ProcessSpy.new
|
31
|
+
@process_signal_spy = ProcessSignalSpy.new
|
32
|
+
|
17
33
|
@cli = Sanford::CLI.new(@kernel_spy)
|
18
34
|
end
|
19
35
|
subject{ @cli }
|
20
36
|
|
21
|
-
should have_cmeths :run
|
22
37
|
should have_imeths :run
|
23
38
|
|
24
39
|
end
|
25
40
|
|
26
|
-
class
|
41
|
+
class DefaultsTests < InitTests
|
27
42
|
setup do
|
28
|
-
@
|
29
|
-
@process_signal_spy = ProcessSignalSpy.new
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
class DefaultsTests < CommandTests
|
35
|
-
desc "with no command or file path"
|
36
|
-
setup do
|
37
|
-
file_path = 'config.sanford'
|
38
|
-
Assert.stub(Sanford::ConfigFile, :new).with(file_path){ @config_file }
|
43
|
+
Assert.stub(Sanford::ConfigFile, :new).with('config.sanford'){ @config_file }
|
39
44
|
Assert.stub(Sanford::Process, :new).with(@server, :daemonize => false) do
|
40
45
|
@process_spy
|
41
46
|
end
|
47
|
+
end
|
42
48
|
|
43
|
-
|
49
|
+
should "default the command when its not provided" do
|
50
|
+
subject.run(@file_path)
|
51
|
+
assert_true @process_spy.run_called
|
44
52
|
end
|
45
53
|
|
46
|
-
should "
|
54
|
+
should "default the command and file path when they aren't provided" do
|
55
|
+
subject.run
|
47
56
|
assert_true @process_spy.run_called
|
48
57
|
end
|
49
58
|
|
50
59
|
end
|
51
60
|
|
52
|
-
class RunTests <
|
61
|
+
class RunTests < InitTests
|
53
62
|
desc "with the run command"
|
54
63
|
setup do
|
55
64
|
Assert.stub(Sanford::Process, :new).with(@server, :daemonize => false) do
|
56
65
|
@process_spy
|
57
66
|
end
|
58
|
-
|
59
67
|
@cli.run(@file_path, 'run')
|
60
68
|
end
|
61
69
|
|
@@ -65,7 +73,7 @@ class Sanford::CLI
|
|
65
73
|
|
66
74
|
end
|
67
75
|
|
68
|
-
class StartTests <
|
76
|
+
class StartTests < InitTests
|
69
77
|
desc "with the start command"
|
70
78
|
setup do
|
71
79
|
Assert.stub(Sanford::Process, :new).with(@server, :daemonize => true) do
|
@@ -81,7 +89,7 @@ class Sanford::CLI
|
|
81
89
|
|
82
90
|
end
|
83
91
|
|
84
|
-
class StopTests <
|
92
|
+
class StopTests < InitTests
|
85
93
|
desc "with the stop command"
|
86
94
|
setup do
|
87
95
|
Assert.stub(Sanford::ProcessSignal, :new).with(@server, 'TERM') do
|
@@ -97,7 +105,7 @@ class Sanford::CLI
|
|
97
105
|
|
98
106
|
end
|
99
107
|
|
100
|
-
class RestartTests <
|
108
|
+
class RestartTests < InitTests
|
101
109
|
desc "with the restart command"
|
102
110
|
setup do
|
103
111
|
Assert.stub(Sanford::ProcessSignal, :new).with(@server, 'USR2') do
|
@@ -113,7 +121,7 @@ class Sanford::CLI
|
|
113
121
|
|
114
122
|
end
|
115
123
|
|
116
|
-
class InvalidCommandTests <
|
124
|
+
class InvalidCommandTests < InitTests
|
117
125
|
desc "with an invalid command"
|
118
126
|
setup do
|
119
127
|
@command = Factory.string
|
data/test/unit/route_tests.rb
CHANGED
@@ -36,22 +36,32 @@ class Sanford::Route
|
|
36
36
|
class RunTests < UnitTests
|
37
37
|
desc "when run"
|
38
38
|
setup do
|
39
|
-
@
|
40
|
-
|
41
|
-
|
39
|
+
@runner_spy = SanfordRunnerSpy.new
|
40
|
+
Assert.stub(Sanford::SanfordRunner, :new) do |*args|
|
41
|
+
@runner_spy.build(*args)
|
42
|
+
@runner_spy
|
43
|
+
end
|
42
44
|
|
43
|
-
@
|
44
|
-
|
45
|
-
@route.handler_class,
|
46
|
-
@request,
|
47
|
-
@server_data
|
48
|
-
){ @runner_spy }
|
45
|
+
@request = OpenStruct.new('params' => 'some-params')
|
46
|
+
@server_data = Sanford::ServerData.new
|
49
47
|
|
48
|
+
@route.validate!
|
50
49
|
@response = @route.run(@request, @server_data)
|
51
50
|
end
|
52
51
|
subject{ @response }
|
53
52
|
|
54
53
|
should "build and run a sanford runner" do
|
54
|
+
assert_equal @route.handler_class, @runner_spy.handler_class
|
55
|
+
|
56
|
+
exp_args = {
|
57
|
+
:request => @request,
|
58
|
+
:params => @request.params,
|
59
|
+
:logger => @server_data.logger,
|
60
|
+
:router => @server_data.router,
|
61
|
+
:template_source => @server_data.template_source
|
62
|
+
}
|
63
|
+
assert_equal exp_args, @runner_spy.args
|
64
|
+
|
55
65
|
assert_true @runner_spy.run_called
|
56
66
|
end
|
57
67
|
|
@@ -75,18 +85,34 @@ class Sanford::Route
|
|
75
85
|
|
76
86
|
TestHandler = Class.new
|
77
87
|
|
78
|
-
class
|
79
|
-
attr_reader :response, :run_called
|
88
|
+
class SanfordRunnerSpy
|
80
89
|
|
81
|
-
|
82
|
-
|
90
|
+
attr_reader :run_called
|
91
|
+
attr_reader :handler_class, :args
|
92
|
+
attr_reader :request, :params, :logger, :router, :template_source
|
93
|
+
attr_reader :response
|
94
|
+
|
95
|
+
def initialize
|
83
96
|
@run_called = false
|
84
97
|
end
|
85
98
|
|
99
|
+
def build(handler_class, args)
|
100
|
+
@handler_class, @args = handler_class, args
|
101
|
+
|
102
|
+
@request = args[:request]
|
103
|
+
@params = args[:params]
|
104
|
+
@logger = args[:logger]
|
105
|
+
@router = args[:router]
|
106
|
+
@template_source = args[:template_source]
|
107
|
+
|
108
|
+
@response = Factory.string
|
109
|
+
end
|
110
|
+
|
86
111
|
def run
|
87
112
|
@run_called = true
|
88
113
|
@response
|
89
114
|
end
|
115
|
+
|
90
116
|
end
|
91
117
|
|
92
118
|
end
|
data/test/unit/runner_tests.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'sanford/runner'
|
3
3
|
|
4
|
-
require 'sanford/
|
4
|
+
require 'sanford/logger'
|
5
|
+
require 'sanford/router'
|
6
|
+
require 'sanford/template_source'
|
5
7
|
require 'sanford/service_handler'
|
6
8
|
|
7
9
|
class Sanford::Runner
|
@@ -10,7 +12,6 @@ class Sanford::Runner
|
|
10
12
|
desc "Sanford::Runner"
|
11
13
|
setup do
|
12
14
|
@handler_class = TestServiceHandler
|
13
|
-
|
14
15
|
@runner_class = Sanford::Runner
|
15
16
|
end
|
16
17
|
subject{ @runner_class }
|
@@ -20,12 +21,13 @@ class Sanford::Runner
|
|
20
21
|
class InitTests < UnitTests
|
21
22
|
desc "when init"
|
22
23
|
setup do
|
23
|
-
|
24
|
+
source = FakeTemplateSource.new
|
25
|
+
@runner = @runner_class.new(@handler_class, :template_source => source)
|
24
26
|
end
|
25
27
|
subject{ @runner }
|
26
28
|
|
27
29
|
should have_readers :handler_class, :handler
|
28
|
-
should have_readers :request, :params, :logger, :template_source
|
30
|
+
should have_readers :request, :params, :logger, :router, :template_source
|
29
31
|
should have_imeths :run
|
30
32
|
should have_imeths :halt
|
31
33
|
|
@@ -34,11 +36,30 @@ class Sanford::Runner
|
|
34
36
|
assert_instance_of @handler_class, subject.handler
|
35
37
|
end
|
36
38
|
|
37
|
-
should "
|
38
|
-
|
39
|
-
assert_nil
|
40
|
-
|
41
|
-
|
39
|
+
should "default its settings" do
|
40
|
+
runner = @runner_class.new(@handler_class)
|
41
|
+
assert_nil runner.request
|
42
|
+
assert_equal ::Hash.new, runner.params
|
43
|
+
assert_kind_of Sanford::NullLogger, runner.logger
|
44
|
+
assert_kind_of Sanford::Router, runner.router
|
45
|
+
assert_kind_of Sanford::NullTemplateSource, runner.template_source
|
46
|
+
end
|
47
|
+
|
48
|
+
should "not implement its run method" do
|
49
|
+
assert_raises(NotImplementedError){ subject.run }
|
50
|
+
end
|
51
|
+
|
52
|
+
should "use the template source to render" do
|
53
|
+
path = 'template.json'
|
54
|
+
locals = { 'something' => Factory.string }
|
55
|
+
exp = subject.template_source.render(path, subject.handler, locals)
|
56
|
+
assert_equal exp, subject.render(path, locals)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "default its locals to an empty hash when rendering" do
|
60
|
+
path = Factory.file_path
|
61
|
+
exp = subject.template_source.render(path, subject.handler, {})
|
62
|
+
assert_equal exp, subject.render(path)
|
42
63
|
end
|
43
64
|
|
44
65
|
should "throw halt with response args using `halt`" do
|
@@ -67,14 +88,16 @@ class Sanford::Runner
|
|
67
88
|
assert_equal data, result.data
|
68
89
|
end
|
69
90
|
|
70
|
-
should "raise a not implemented error when run" do
|
71
|
-
assert_raises(NotImplementedError){ subject.run }
|
72
|
-
end
|
73
|
-
|
74
91
|
end
|
75
92
|
|
76
93
|
class TestServiceHandler
|
77
94
|
include Sanford::ServiceHandler
|
78
95
|
end
|
79
96
|
|
97
|
+
class FakeTemplateSource
|
98
|
+
def render(path, service_handler, locals)
|
99
|
+
[path.to_s, service_handler.class.to_s, locals]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
80
103
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'sanford/sanford_runner'
|
3
3
|
|
4
|
-
require 'sanford/
|
4
|
+
require 'sanford/runner'
|
5
5
|
require 'sanford/service_handler'
|
6
6
|
|
7
7
|
class Sanford::SanfordRunner
|
@@ -10,14 +10,6 @@ class Sanford::SanfordRunner
|
|
10
10
|
desc "Sanford::SanfordRunner"
|
11
11
|
setup do
|
12
12
|
@handler_class = TestServiceHandler
|
13
|
-
@request = Sanford::Protocol::Request.new(Factory.string, {
|
14
|
-
:something => Factory.string
|
15
|
-
})
|
16
|
-
@server_data = Sanford::ServerData.new({
|
17
|
-
:logger => Factory.string,
|
18
|
-
:template_source => Factory.string
|
19
|
-
})
|
20
|
-
|
21
13
|
@runner_class = Sanford::SanfordRunner
|
22
14
|
end
|
23
15
|
subject{ @runner_class }
|
@@ -31,16 +23,11 @@ class Sanford::SanfordRunner
|
|
31
23
|
class InitTests < UnitTests
|
32
24
|
desc "when init"
|
33
25
|
setup do
|
34
|
-
@runner = @runner_class.new(@handler_class
|
26
|
+
@runner = @runner_class.new(@handler_class)
|
35
27
|
end
|
36
28
|
subject{ @runner }
|
37
29
|
|
38
|
-
should
|
39
|
-
assert_equal @request, subject.request
|
40
|
-
assert_equal @request.params, subject.params
|
41
|
-
assert_equal @server_data.logger, subject.logger
|
42
|
-
assert_equal @server_data.template_source, subject.template_source
|
43
|
-
end
|
30
|
+
should have_imeths :run
|
44
31
|
|
45
32
|
end
|
46
33
|
|
@@ -77,8 +64,9 @@ class Sanford::SanfordRunner
|
|
77
64
|
class RunHaltInBeforeTests < UnitTests
|
78
65
|
desc "running a handler that halts in a before callback"
|
79
66
|
setup do
|
80
|
-
|
81
|
-
|
67
|
+
runner = @runner_class.new(@handler_class, :params => {
|
68
|
+
'halt' => 'before'
|
69
|
+
}).tap(&:run)
|
82
70
|
@handler = runner.handler
|
83
71
|
end
|
84
72
|
subject{ @handler }
|
@@ -97,8 +85,9 @@ class Sanford::SanfordRunner
|
|
97
85
|
class RunHandlerHaltInitTests < UnitTests
|
98
86
|
desc "running a handler that halts in init"
|
99
87
|
setup do
|
100
|
-
|
101
|
-
|
88
|
+
runner = @runner_class.new(@handler_class, :params => {
|
89
|
+
'halt' => 'init'
|
90
|
+
}).tap(&:run)
|
102
91
|
@handler = runner.handler
|
103
92
|
end
|
104
93
|
subject{ @handler }
|
@@ -117,8 +106,9 @@ class Sanford::SanfordRunner
|
|
117
106
|
class RunHandlerHaltRunTests < UnitTests
|
118
107
|
desc "running a handler that halts in run"
|
119
108
|
setup do
|
120
|
-
|
121
|
-
|
109
|
+
runner = @runner_class.new(@handler_class, :params => {
|
110
|
+
'halt' => 'run'
|
111
|
+
}).tap(&:run)
|
122
112
|
@handler = runner.handler
|
123
113
|
end
|
124
114
|
subject{ @handler }
|
@@ -137,8 +127,9 @@ class Sanford::SanfordRunner
|
|
137
127
|
class RunHandlerHaltAfterTests < UnitTests
|
138
128
|
desc "running a handler that halts in a after callback"
|
139
129
|
setup do
|
140
|
-
|
141
|
-
|
130
|
+
runner = @runner_class.new(@handler_class, :params => {
|
131
|
+
'halt' => 'after'
|
132
|
+
}).tap(&:run)
|
142
133
|
@handler = runner.handler
|
143
134
|
end
|
144
135
|
subject{ @handler }
|
@@ -162,23 +153,13 @@ class Sanford::SanfordRunner
|
|
162
153
|
attr_reader :init_call_order, :run_call_order
|
163
154
|
attr_reader :response_data
|
164
155
|
|
165
|
-
before
|
166
|
-
@first_before_call_order = next_call_order
|
167
|
-
halt_if('before')
|
168
|
-
end
|
156
|
+
before{ @first_before_call_order = next_call_order; halt_if('before') }
|
169
157
|
before{ @second_before_call_order = next_call_order }
|
170
158
|
|
171
|
-
after
|
172
|
-
@first_after_call_order = next_call_order
|
173
|
-
halt_if('after')
|
174
|
-
end
|
159
|
+
after{ @first_after_call_order = next_call_order; halt_if('after') }
|
175
160
|
after{ @second_after_call_order = next_call_order }
|
176
161
|
|
177
|
-
def init
|
178
|
-
@init_call_order = next_call_order
|
179
|
-
halt_if('init')
|
180
|
-
end
|
181
|
-
|
162
|
+
def init!; @init_call_order = next_call_order; halt_if('init'); end
|
182
163
|
def run!
|
183
164
|
@run_call_order = next_call_order
|
184
165
|
halt_if('run')
|
@@ -187,11 +168,7 @@ class Sanford::SanfordRunner
|
|
187
168
|
|
188
169
|
private
|
189
170
|
|
190
|
-
def next_call_order
|
191
|
-
@order ||= 0
|
192
|
-
@order += 1
|
193
|
-
end
|
194
|
-
|
171
|
+
def next_call_order; @order ||= 0; @order += 1; end
|
195
172
|
def halt_if(value)
|
196
173
|
halt Factory.integer if params['halt'] == value
|
197
174
|
end
|
@@ -8,25 +8,35 @@ class Sanford::ServerData
|
|
8
8
|
class UnitTests < Assert::Context
|
9
9
|
desc "Sanford::ServerData"
|
10
10
|
setup do
|
11
|
-
@name
|
12
|
-
@ip
|
13
|
-
@port
|
11
|
+
@name = Factory.string
|
12
|
+
@ip = Factory.string
|
13
|
+
@port = Factory.integer
|
14
14
|
@pid_file = Factory.file_path
|
15
|
-
|
16
|
-
@verbose_logging = Factory.boolean
|
15
|
+
|
17
16
|
@receives_keep_alive = Factory.boolean
|
18
|
-
|
19
|
-
@
|
17
|
+
|
18
|
+
@verbose_logging = Factory.boolean
|
19
|
+
@logger = Factory.string
|
20
|
+
@template_source = Factory.string
|
21
|
+
|
22
|
+
@init_procs = [ proc{} ]
|
23
|
+
@error_procs = [ proc{} ]
|
24
|
+
|
25
|
+
@router = Factory.string
|
26
|
+
@route = Sanford::Route.new(Factory.string, TestHandler.to_s).tap(&:validate!)
|
20
27
|
|
21
28
|
@server_data = Sanford::ServerData.new({
|
22
|
-
:name
|
23
|
-
:ip
|
24
|
-
:port
|
29
|
+
:name => @name,
|
30
|
+
:ip => @ip,
|
31
|
+
:port => @port,
|
25
32
|
:pid_file => @pid_file,
|
26
|
-
:logger => @logger,
|
27
|
-
:verbose_logging => @verbose_logging,
|
28
33
|
:receives_keep_alive => @receives_keep_alive,
|
34
|
+
:verbose_logging => @verbose_logging,
|
35
|
+
:logger => @logger,
|
36
|
+
:template_source => @template_source,
|
37
|
+
:init_procs => @init_procs,
|
29
38
|
:error_procs => @error_procs,
|
39
|
+
:router => @router,
|
30
40
|
:routes => [ @route ]
|
31
41
|
})
|
32
42
|
end
|
@@ -35,20 +45,27 @@ class Sanford::ServerData
|
|
35
45
|
should have_readers :name
|
36
46
|
should have_readers :ip, :port
|
37
47
|
should have_readers :pid_file
|
38
|
-
should have_readers :logger, :verbose_logging
|
39
48
|
should have_readers :receives_keep_alive
|
40
|
-
should have_readers :
|
41
|
-
should have_readers :
|
49
|
+
should have_readers :verbose_logging, :logger, :template_source
|
50
|
+
should have_readers :init_procs, :error_procs
|
51
|
+
should have_readers :router, :routes
|
42
52
|
|
43
53
|
should "know its attributes" do
|
44
|
-
assert_equal @name,
|
45
|
-
assert_equal @ip,
|
46
|
-
assert_equal @port,
|
54
|
+
assert_equal @name, subject.name
|
55
|
+
assert_equal @ip, subject.ip
|
56
|
+
assert_equal @port, subject.port
|
47
57
|
assert_equal @pid_file, subject.pid_file
|
48
|
-
|
49
|
-
assert_equal @verbose_logging, subject.verbose_logging
|
58
|
+
|
50
59
|
assert_equal @receives_keep_alive, subject.receives_keep_alive
|
60
|
+
|
61
|
+
assert_equal @verbose_logging, subject.verbose_logging
|
62
|
+
assert_equal @logger, subject.logger
|
63
|
+
assert_equal @template_source, subject.template_source
|
64
|
+
|
65
|
+
assert_equal @init_procs, subject.error_procs
|
51
66
|
assert_equal @error_procs, subject.error_procs
|
67
|
+
|
68
|
+
assert_equal @router, subject.router
|
52
69
|
end
|
53
70
|
|
54
71
|
should "build a routes lookup hash" do
|
@@ -73,10 +90,17 @@ class Sanford::ServerData
|
|
73
90
|
assert_nil server_data.ip
|
74
91
|
assert_nil server_data.port
|
75
92
|
assert_nil server_data.pid_file
|
76
|
-
|
77
|
-
assert_false server_data.verbose_logging
|
93
|
+
|
78
94
|
assert_false server_data.receives_keep_alive
|
95
|
+
|
96
|
+
assert_false server_data.verbose_logging
|
97
|
+
assert_nil server_data.logger
|
98
|
+
assert_nil server_data.template_source
|
99
|
+
|
100
|
+
assert_equal [], server_data.init_procs
|
79
101
|
assert_equal [], server_data.error_procs
|
102
|
+
|
103
|
+
assert_nil server_data.router
|
80
104
|
assert_equal({}, server_data.routes)
|
81
105
|
end
|
82
106
|
|
data/test/unit/server_tests.rb
CHANGED
@@ -23,8 +23,7 @@ module Sanford::Server
|
|
23
23
|
should have_imeths :receives_keep_alive
|
24
24
|
should have_imeths :verbose_logging, :logger
|
25
25
|
should have_imeths :init, :error
|
26
|
-
should have_imeths :router
|
27
|
-
should have_imeths :template_source, :build_template_source
|
26
|
+
should have_imeths :router, :template_source
|
28
27
|
|
29
28
|
should "know its configuration" do
|
30
29
|
config = subject.configuration
|
@@ -117,20 +116,6 @@ module Sanford::Server
|
|
117
116
|
assert_equal new_template_source, subject.template_source
|
118
117
|
end
|
119
118
|
|
120
|
-
should "allow setting its template source with a path and block" do
|
121
|
-
new_path = Factory.string
|
122
|
-
yielded = nil
|
123
|
-
subject.build_template_source(new_path){ |s| yielded = s }
|
124
|
-
assert_equal new_path, subject.configuration.template_source.path
|
125
|
-
assert_equal subject.configuration.template_source, yielded
|
126
|
-
end
|
127
|
-
|
128
|
-
should "allow setting its template source with only a path" do
|
129
|
-
new_path = Factory.string
|
130
|
-
subject.build_template_source(new_path)
|
131
|
-
assert_equal new_path, subject.configuration.template_source.path
|
132
|
-
end
|
133
|
-
|
134
119
|
end
|
135
120
|
|
136
121
|
class InitTests < UnitTests
|
@@ -448,13 +433,12 @@ module Sanford::Server
|
|
448
433
|
assert_equal subject.router.routes, subject.routes
|
449
434
|
end
|
450
435
|
|
451
|
-
should "include its
|
436
|
+
should "include its init/error procs and router/routes in its `to_hash`" do
|
452
437
|
config_hash = subject.to_hash
|
438
|
+
assert_equal subject.init_procs, config_hash[:init_procs]
|
453
439
|
assert_equal subject.error_procs, config_hash[:error_procs]
|
440
|
+
assert_equal subject.router, config_hash[:router]
|
454
441
|
assert_equal subject.routes, config_hash[:routes]
|
455
|
-
template_source = subject.template_source
|
456
|
-
assert_instance_of template_source.class, config_hash[:template_source]
|
457
|
-
assert_equal template_source.path, config_hash[:template_source].path
|
458
442
|
end
|
459
443
|
|
460
444
|
should "call its init procs when validated" do
|
@@ -144,9 +144,9 @@ module Sanford::ServiceHandler
|
|
144
144
|
should have_imeths :init, :init!, :run, :run!
|
145
145
|
|
146
146
|
should "know its request, params and logger" do
|
147
|
-
assert_equal @runner.request, subject.
|
148
|
-
assert_equal @runner.params,
|
149
|
-
assert_equal @runner.logger,
|
147
|
+
assert_equal @runner.request, subject.public_request
|
148
|
+
assert_equal @runner.params, subject.public_params
|
149
|
+
assert_equal @runner.logger, subject.public_logger
|
150
150
|
end
|
151
151
|
|
152
152
|
should "call `init!` and its before/after init callbacks using `init`" do
|
@@ -170,36 +170,21 @@ module Sanford::ServiceHandler
|
|
170
170
|
should "have a custom inspect" do
|
171
171
|
reference = '0x0%x' % (subject.object_id << 1)
|
172
172
|
expected = "#<#{subject.class}:#{reference} " \
|
173
|
-
"@request=#{
|
173
|
+
"@request=#{@runner.request.inspect}>"
|
174
174
|
assert_equal expected, subject.inspect
|
175
175
|
end
|
176
176
|
|
177
|
-
should "
|
178
|
-
code = Factory.integer
|
179
|
-
result = subject.halt(code)
|
180
|
-
assert_includes [ code ], @runner.halt_calls
|
181
|
-
end
|
182
|
-
|
183
|
-
should "use the runner template source to render the template by default" do
|
177
|
+
should "delegate its runner's `render` method" do
|
184
178
|
path = Factory.file_path
|
185
179
|
locals = { 'something' => Factory.string }
|
186
|
-
result = subject.render(path,
|
187
|
-
assert_equal [
|
188
|
-
end
|
189
|
-
|
190
|
-
should "default its locals to an empty hash using `render`" do
|
191
|
-
path = Factory.file_path
|
192
|
-
result = subject.render(path)
|
193
|
-
assert_equal [ path, TestServiceHandler.to_s, {} ], result
|
180
|
+
result = subject.render(path, locals)
|
181
|
+
assert_equal [path, locals], @runner.render_calls.last
|
194
182
|
end
|
195
183
|
|
196
|
-
should "
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
end
|
201
|
-
result = subject.render(path, 'source' => source_class.new)
|
202
|
-
assert_equal path, result
|
184
|
+
should "delegate its runner's `halt` method" do
|
185
|
+
code = Factory.integer
|
186
|
+
result = subject.halt(code)
|
187
|
+
assert_equal [code], @runner.halt_calls.last
|
203
188
|
end
|
204
189
|
|
205
190
|
should "raise a not implemented error when `run!` by default" do
|
@@ -220,7 +205,7 @@ module Sanford::ServiceHandler
|
|
220
205
|
# these methods are made public so they can be tested, they are being tested
|
221
206
|
# because they are used by classes that mixin this, essentially they are
|
222
207
|
# "public" to classes that use the mixin
|
223
|
-
public :render, :halt
|
208
|
+
public :render, :halt
|
224
209
|
|
225
210
|
before_init{ @first_before_init_call_order = next_call_order }
|
226
211
|
before_init{ @second_before_init_call_order = next_call_order }
|
@@ -242,6 +227,18 @@ module Sanford::ServiceHandler
|
|
242
227
|
@run_call_order = next_call_order
|
243
228
|
end
|
244
229
|
|
230
|
+
def public_request
|
231
|
+
request
|
232
|
+
end
|
233
|
+
|
234
|
+
def public_params
|
235
|
+
params
|
236
|
+
end
|
237
|
+
|
238
|
+
def public_logger
|
239
|
+
logger
|
240
|
+
end
|
241
|
+
|
245
242
|
private
|
246
243
|
|
247
244
|
def next_call_order
|
@@ -251,26 +248,17 @@ module Sanford::ServiceHandler
|
|
251
248
|
end
|
252
249
|
|
253
250
|
class FakeRunner
|
254
|
-
attr_accessor :request, :params, :logger
|
255
|
-
attr_reader :halt_calls
|
251
|
+
attr_accessor :request, :params, :logger
|
252
|
+
attr_reader :render_calls, :halt_calls
|
256
253
|
|
257
254
|
def initialize
|
258
255
|
@request = Factory.string
|
259
256
|
@params = Factory.string
|
260
257
|
@logger = Factory.string
|
261
|
-
@template_source = FakeTemplateSource.new
|
262
258
|
end
|
263
259
|
|
264
|
-
def
|
265
|
-
|
266
|
-
@halt_calls << args
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
class FakeTemplateSource
|
271
|
-
def render(path, service_handler, locals)
|
272
|
-
[path.to_s, service_handler.class.to_s, locals]
|
273
|
-
end
|
260
|
+
def render(*args); @render_calls ||= []; @render_calls << args; end
|
261
|
+
def halt(*args); @halt_calls ||= []; @halt_calls << args; end
|
274
262
|
end
|
275
263
|
|
276
264
|
end
|
@@ -2,6 +2,7 @@ require 'assert'
|
|
2
2
|
require 'sanford/template_engine'
|
3
3
|
|
4
4
|
require 'pathname'
|
5
|
+
require 'sanford/logger'
|
5
6
|
require 'test/support/factory'
|
6
7
|
|
7
8
|
class Sanford::TemplateEngine
|
@@ -17,7 +18,7 @@ class Sanford::TemplateEngine
|
|
17
18
|
end
|
18
19
|
subject{ @engine }
|
19
20
|
|
20
|
-
should have_readers :source_path, :opts
|
21
|
+
should have_readers :source_path, :logger, :opts
|
21
22
|
should have_imeths :render
|
22
23
|
|
23
24
|
should "default its source path" do
|
@@ -29,6 +30,16 @@ class Sanford::TemplateEngine
|
|
29
30
|
assert_equal Pathname.new(@source_path.to_s), engine.source_path
|
30
31
|
end
|
31
32
|
|
33
|
+
should "default its logger" do
|
34
|
+
assert_instance_of Sanford::NullLogger, subject.logger
|
35
|
+
end
|
36
|
+
|
37
|
+
should "allow custom loggers" do
|
38
|
+
logger = 'a-logger'
|
39
|
+
engine = Sanford::TemplateEngine.new('logger' => logger)
|
40
|
+
assert_equal logger, engine.logger
|
41
|
+
end
|
42
|
+
|
32
43
|
should "default the opts if none given" do
|
33
44
|
exp_opts = {}
|
34
45
|
assert_equal exp_opts, Sanford::TemplateEngine.new.opts
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'sanford/template_source'
|
3
3
|
|
4
|
+
require 'sanford/logger'
|
4
5
|
require 'sanford/template_engine'
|
5
6
|
|
6
7
|
class Sanford::TemplateSource
|
@@ -19,12 +20,13 @@ class Sanford::TemplateSource
|
|
19
20
|
class InitTests < Assert::Context
|
20
21
|
setup do
|
21
22
|
@source_path = ROOT_PATH.join('test/support').to_s
|
22
|
-
@
|
23
|
+
@logger = 'a-logger'
|
24
|
+
@source = Sanford::TemplateSource.new(@source_path, @logger)
|
23
25
|
end
|
24
26
|
subject{ @source }
|
25
27
|
|
26
28
|
should have_readers :path, :engines
|
27
|
-
should have_imeths :engine, :render
|
29
|
+
should have_imeths :engine, :engine_for?, :render
|
28
30
|
|
29
31
|
should "know its path" do
|
30
32
|
assert_equal @source_path.to_s, subject.path
|
@@ -44,20 +46,34 @@ class Sanford::TemplateSource
|
|
44
46
|
assert_kind_of @test_engine, subject.engines['test']
|
45
47
|
end
|
46
48
|
|
47
|
-
should "register with
|
49
|
+
should "register with default options" do
|
48
50
|
subject.engine 'test', @test_engine
|
49
|
-
exp_opts = {
|
51
|
+
exp_opts = {
|
52
|
+
'source_path' => subject.path,
|
53
|
+
'logger' => @logger
|
54
|
+
}
|
50
55
|
assert_equal exp_opts, subject.engines['test'].opts
|
51
56
|
|
57
|
+
source = Sanford::TemplateSource.new(@source_path)
|
58
|
+
source.engine 'test', @test_engine
|
59
|
+
assert_kind_of Sanford::NullLogger, source.engines['test'].opts['logger']
|
60
|
+
|
52
61
|
subject.engine 'test', @test_engine, 'an' => 'opt'
|
53
62
|
exp_opts = {
|
54
63
|
'source_path' => subject.path,
|
55
|
-
'
|
64
|
+
'logger' => @logger,
|
65
|
+
'an' => 'opt'
|
56
66
|
}
|
57
67
|
assert_equal exp_opts, subject.engines['test'].opts
|
58
68
|
|
59
|
-
subject.engine
|
60
|
-
|
69
|
+
subject.engine('test', @test_engine, {
|
70
|
+
'source_path' => 'something',
|
71
|
+
'logger' => 'another'
|
72
|
+
})
|
73
|
+
exp_opts = {
|
74
|
+
'source_path' => 'something',
|
75
|
+
'logger' => 'another'
|
76
|
+
}
|
61
77
|
assert_equal exp_opts, subject.engines['test'].opts
|
62
78
|
end
|
63
79
|
|
@@ -69,6 +85,13 @@ class Sanford::TemplateSource
|
|
69
85
|
assert_kind_of Sanford::NullTemplateEngine, subject.engines['rb']
|
70
86
|
end
|
71
87
|
|
88
|
+
should "know if it has an engine registered for a given template name" do
|
89
|
+
assert_false subject.engine_for?('test_template')
|
90
|
+
|
91
|
+
subject.engine 'test', @test_engine
|
92
|
+
assert_true subject.engine_for?('test_template')
|
93
|
+
end
|
94
|
+
|
72
95
|
end
|
73
96
|
|
74
97
|
class RenderTests < InitTests
|
@@ -7,12 +7,6 @@ class Sanford::TestRunner
|
|
7
7
|
desc "Sanford::TestRunner"
|
8
8
|
setup do
|
9
9
|
@handler_class = TestServiceHandler
|
10
|
-
@request = Sanford::Protocol::Request.new(Factory.string, {})
|
11
|
-
@params = { :something => Factory.string }
|
12
|
-
@logger = Factory.string
|
13
|
-
@template_source = Factory.string
|
14
|
-
@handler_flag = Factory.boolean
|
15
|
-
|
16
10
|
@runner_class = Sanford::TestRunner
|
17
11
|
end
|
18
12
|
subject{ @runner_class }
|
@@ -26,12 +20,13 @@ class Sanford::TestRunner
|
|
26
20
|
class InitTests < UnitTests
|
27
21
|
desc "when init"
|
28
22
|
setup do
|
23
|
+
@params = { Factory.string => Factory.integer }
|
29
24
|
@args = {
|
30
|
-
:request =>
|
31
|
-
:params
|
32
|
-
:logger
|
33
|
-
:
|
34
|
-
:
|
25
|
+
:request => 'a-request',
|
26
|
+
:params => @params,
|
27
|
+
:logger => 'a-logger',
|
28
|
+
:router => 'a-router',
|
29
|
+
:template_source => 'a-source'
|
35
30
|
}
|
36
31
|
@runner = @runner_class.new(@handler_class, @args)
|
37
32
|
end
|
@@ -40,31 +35,23 @@ class Sanford::TestRunner
|
|
40
35
|
should have_readers :response
|
41
36
|
should have_imeths :run
|
42
37
|
|
43
|
-
should "
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
assert_equal @template_source, subject.template_source
|
48
|
-
end
|
49
|
-
|
50
|
-
should "write extra args to its service handler" do
|
51
|
-
assert_equal @handler_flag, subject.handler.flag
|
38
|
+
should "raise an invalid error when not passed a service handler" do
|
39
|
+
assert_raises(Sanford::InvalidServiceHandlerError) do
|
40
|
+
@runner_class.new(Class.new)
|
41
|
+
end
|
52
42
|
end
|
53
43
|
|
54
|
-
should "
|
55
|
-
assert_equal
|
56
|
-
assert_equal @params,
|
57
|
-
assert_equal
|
58
|
-
assert_equal
|
59
|
-
assert_equal
|
44
|
+
should "super its standard attributes" do
|
45
|
+
assert_equal 'a-request', subject.request
|
46
|
+
assert_equal @params, subject.params
|
47
|
+
assert_equal 'a-logger', subject.logger
|
48
|
+
assert_equal 'a-router', subject.router
|
49
|
+
assert_equal 'a-source', subject.template_source
|
60
50
|
end
|
61
51
|
|
62
|
-
should "
|
63
|
-
|
64
|
-
|
65
|
-
assert_equal({}, test_runner.params)
|
66
|
-
assert_instance_of Sanford::NullLogger, test_runner.logger
|
67
|
-
assert_instance_of Sanford::NullTemplateSource, test_runner.template_source
|
52
|
+
should "write any non-standard args on the handler" do
|
53
|
+
runner = @runner_class.new(@handler_class, :custom_value => 42)
|
54
|
+
assert_equal 42, runner.handler.custom_value
|
68
55
|
end
|
69
56
|
|
70
57
|
should "not have called its service handlers before callbacks" do
|
@@ -79,12 +66,6 @@ class Sanford::TestRunner
|
|
79
66
|
assert_nil subject.response
|
80
67
|
end
|
81
68
|
|
82
|
-
should "raise an invalid error when not passed a service handler" do
|
83
|
-
assert_raises(Sanford::InvalidServiceHandlerError) do
|
84
|
-
@runner_class.new(Class.new)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
69
|
end
|
89
70
|
|
90
71
|
class RunTests < InitTests
|
@@ -169,7 +150,7 @@ class Sanford::TestRunner
|
|
169
150
|
|
170
151
|
attr_reader :before_called, :after_called
|
171
152
|
attr_reader :init_called, :run_called
|
172
|
-
attr_accessor :
|
153
|
+
attr_accessor :custom_value, :response
|
173
154
|
|
174
155
|
before{ @before_called = true }
|
175
156
|
after{ @after_called = true }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sanford
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 47
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 12
|
9
|
+
- 0
|
10
|
+
version: 0.12.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Collin Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2014-
|
19
|
+
date: 2014-12-05 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
@@ -29,9 +29,9 @@ dependencies:
|
|
29
29
|
- 0
|
30
30
|
- 5
|
31
31
|
version: "0.5"
|
32
|
-
version_requirements: *id001
|
33
32
|
type: :runtime
|
34
33
|
name: dat-tcp
|
34
|
+
version_requirements: *id001
|
35
35
|
prerelease: false
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
@@ -44,9 +44,9 @@ dependencies:
|
|
44
44
|
- 1
|
45
45
|
- 1
|
46
46
|
version: "1.1"
|
47
|
-
version_requirements: *id002
|
48
47
|
type: :runtime
|
49
48
|
name: ns-options
|
49
|
+
version_requirements: *id002
|
50
50
|
prerelease: false
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
@@ -54,14 +54,14 @@ dependencies:
|
|
54
54
|
requirements:
|
55
55
|
- - ~>
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
hash:
|
57
|
+
hash: 31
|
58
58
|
segments:
|
59
59
|
- 0
|
60
|
-
-
|
61
|
-
version: "0.
|
62
|
-
version_requirements: *id003
|
60
|
+
- 10
|
61
|
+
version: "0.10"
|
63
62
|
type: :runtime
|
64
63
|
name: sanford-protocol
|
64
|
+
version_requirements: *id003
|
65
65
|
prerelease: false
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
67
|
requirement: &id004 !ruby/object:Gem::Requirement
|
@@ -69,14 +69,14 @@ dependencies:
|
|
69
69
|
requirements:
|
70
70
|
- - ~>
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
hash:
|
72
|
+
hash: 27
|
73
73
|
segments:
|
74
74
|
- 2
|
75
|
-
-
|
76
|
-
version: "2.
|
77
|
-
version_requirements: *id004
|
75
|
+
- 12
|
76
|
+
version: "2.12"
|
78
77
|
type: :development
|
79
78
|
name: assert
|
79
|
+
version_requirements: *id004
|
80
80
|
prerelease: false
|
81
81
|
description: Sanford TCP protocol server for hosting services
|
82
82
|
email:
|
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
184
|
requirements: []
|
185
185
|
|
186
186
|
rubyforge_project:
|
187
|
-
rubygems_version: 1.8.
|
187
|
+
rubygems_version: 1.8.25
|
188
188
|
signing_key:
|
189
189
|
specification_version: 3
|
190
190
|
summary: Sanford TCP protocol server for hosting services
|