deas 0.43.0 → 0.43.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA512:
3
- data.tar.gz: 3520f4645edbc6b6b89e470cc2025f436e6031989c7c7ebf60f9b2c50ec4ec9e68b938fd0149603c8addd798ccd9fc895a0a68e58b89b12c51e2aad0e6f84f1d
4
- metadata.gz: ba28b9b16f9011f958849afdb5a774a1f559d5c258447b6f0e3ba551328ebbad70d36d84f462af46cce1fcd9f9fec2ebc5fc57d3da01d86aa9f7d778bc181a7f
3
+ metadata.gz: a7ed98879ce4a9d86af5566709fe01be46427628d0baebc35c26ac81e2f40dfa7f898c44fcd9300786ef6428386aea84cd196bd94fe5368b226b7575cc05250c
4
+ data.tar.gz: 4ddcc49f557e452abdae183b326c70b9e3fbef06a22aa74d3888d2daceec2864911caa45f9cb1869d1dd7b3b9f3272b9d9d16327bdcb7a845ca1db3f2eb1509d
5
5
  SHA1:
6
- data.tar.gz: 91a77987b3fb3b6d87a728643150a787b620c04a
7
- metadata.gz: 69eab40552eaaf3cb49bf1d9dd1bc3f4cadb8533
6
+ metadata.gz: efa732131bcecfd7712c8f4dfce268c51f78063f
7
+ data.tar.gz: ca2a30817b98efa05ee407d93c5626b3c236873a
@@ -17,11 +17,18 @@ module Deas
17
17
  end
18
18
 
19
19
  def run(server_data, request_data)
20
+ server_data.before_route_run_procs.each do |c|
21
+ c.call(server_data, request_data)
22
+ end
20
23
  request_type_name = server_data.router.request_type_name(request_data.request)
21
24
  begin
22
25
  @handler_proxies[request_type_name].run(server_data, request_data)
23
26
  rescue HandlerProxyNotFound
24
27
  [404, Rack::Utils::HeaderHash.new, []]
28
+ ensure
29
+ server_data.after_route_run_procs.each do |c|
30
+ c.call(server_data, request_data)
31
+ end
25
32
  end
26
33
  end
27
34
 
@@ -92,6 +92,22 @@ module Deas
92
92
  self.config.error_procs
93
93
  end
94
94
 
95
+ def before_route_run(&block)
96
+ self.config.before_route_run_procs << block
97
+ end
98
+
99
+ def before_route_run_procs
100
+ self.config.before_route_run_procs
101
+ end
102
+
103
+ def after_route_run(&block)
104
+ self.config.after_route_run_procs << block
105
+ end
106
+
107
+ def after_route_run_procs
108
+ self.config.after_route_run_procs
109
+ end
110
+
95
111
  def template_source(value = nil)
96
112
  self.config.template_source = value if !value.nil?
97
113
  self.config.template_source
@@ -121,20 +137,23 @@ module Deas
121
137
  attr_accessor :env, :root
122
138
  attr_accessor :method_override, :show_exceptions, :verbose_logging
123
139
  attr_accessor :middlewares, :init_procs, :error_procs
140
+ attr_accessor :before_route_run_procs, :after_route_run_procs
124
141
  attr_accessor :template_source, :logger, :router
125
142
 
126
143
  def initialize
127
- @env = DEFAULT_ENV
128
- @root = ENV['PWD']
129
- @method_override = true
130
- @show_exceptions = false
131
- @verbose_logging = true
132
- @middlewares = []
133
- @init_procs = []
134
- @error_procs = []
135
- @template_source = nil
136
- @logger = Deas::NullLogger.new
137
- @router = Deas::Router.new
144
+ @env = DEFAULT_ENV
145
+ @root = ENV['PWD']
146
+ @method_override = true
147
+ @show_exceptions = false
148
+ @verbose_logging = true
149
+ @middlewares = []
150
+ @init_procs = []
151
+ @error_procs = []
152
+ @before_route_run_procs = []
153
+ @after_route_run_procs = []
154
+ @template_source = nil
155
+ @logger = Deas::NullLogger.new
156
+ @router = Deas::Router.new
138
157
 
139
158
  @valid = nil
140
159
  end
@@ -7,22 +7,27 @@ module Deas
7
7
  # to provide these with a simplified interface with the minimal data needed
8
8
  # and to decouple the configuration from each thing that needs its data.
9
9
 
10
- attr_reader :error_procs, :template_source, :logger, :router
10
+ attr_reader :error_procs, :before_route_run_procs, :after_route_run_procs
11
+ attr_reader :template_source, :logger, :router
11
12
 
12
13
  def initialize(args)
13
14
  args ||= {}
14
- @error_procs = args[:error_procs] || []
15
- @template_source = args[:template_source]
16
- @logger = args[:logger]
17
- @router = args[:router]
15
+ @error_procs = args[:error_procs] || []
16
+ @before_route_run_procs = args[:before_route_run_procs] || []
17
+ @after_route_run_procs = args[:after_route_run_procs] || []
18
+ @template_source = args[:template_source]
19
+ @logger = args[:logger]
20
+ @router = args[:router]
18
21
  end
19
22
 
20
23
  def ==(other_server_data)
21
24
  if other_server_data.kind_of?(ServerData)
22
- self.error_procs == other_server_data.error_procs &&
23
- self.template_source == other_server_data.template_source &&
24
- self.logger == other_server_data.logger &&
25
- self.router == other_server_data.router
25
+ self.before_route_run_procs == other_server_data.before_route_run_procs &&
26
+ self.after_route_run_procs == other_server_data.after_route_run_procs &&
27
+ self.error_procs == other_server_data.error_procs &&
28
+ self.template_source == other_server_data.template_source &&
29
+ self.logger == other_server_data.logger &&
30
+ self.router == other_server_data.router
26
31
  else
27
32
  super
28
33
  end
@@ -27,10 +27,12 @@ module Deas
27
27
  # server's initialization logic more like Sanford does.
28
28
  server_config.validate!
29
29
  server_data = ServerData.new({
30
- :error_procs => server_config.error_procs,
31
- :logger => server_config.logger,
32
- :router => server_config.router,
33
- :template_source => server_config.template_source
30
+ :error_procs => server_config.error_procs,
31
+ :before_route_run_procs => server_config.before_route_run_procs,
32
+ :after_route_run_procs => server_config.after_route_run_procs,
33
+ :logger => server_config.logger,
34
+ :router => server_config.router,
35
+ :template_source => server_config.template_source
34
36
  })
35
37
 
36
38
  Sinatra.new do
@@ -1,3 +1,3 @@
1
1
  module Deas
2
- VERSION = "0.43.0"
2
+ VERSION = "0.43.1"
3
3
  end
@@ -12,7 +12,7 @@ class Deas::ErrorHandler
12
12
  @server_data = Factory.server_data(:error_procs => @error_proc_spies)
13
13
  @request = Factory.string
14
14
  @response = Factory.string
15
- @handler_class = Deas::ErrorHandler
15
+ @handler_class = Factory.string
16
16
  @handler = Factory.string
17
17
  @params = Factory.string
18
18
  @splat = Factory.string
@@ -28,8 +28,10 @@ class Deas::ErrorHandler
28
28
  :splat => @splat,
29
29
  :route_path => @route_path
30
30
  }
31
+
32
+ @error_handler_class = Deas::ErrorHandler
31
33
  end
32
- subject{ @handler_class }
34
+ subject{ @error_handler_class }
33
35
 
34
36
  should have_imeths :run
35
37
 
@@ -39,7 +41,7 @@ class Deas::ErrorHandler
39
41
  desc "when init"
40
42
  setup do
41
43
  @exception = Factory.exception
42
- @error_handler = @handler_class.new(@exception, @context_hash)
44
+ @error_handler = @error_handler_class.new(@exception, @context_hash)
43
45
  end
44
46
  subject{ @error_handler }
45
47
 
@@ -40,7 +40,28 @@ class Deas::Route
40
40
  class RunTests < UnitTests
41
41
  desc "when run"
42
42
  setup do
43
- @server_data = Factory.server_data
43
+ @before_route_run_procs_called_with = nil
44
+ @before_route_run_procs_called = 0
45
+ @before_route_run_procs = Factory.integer(3).times.map do
46
+ proc do |*args|
47
+ @before_route_run_procs_called_with = args
48
+ @before_route_run_procs_called += 1
49
+ end
50
+ end
51
+
52
+ @after_route_run_procs_called_with = nil
53
+ @after_route_run_procs_called = 0
54
+ @after_route_run_procs = Factory.integer(3).times.map do
55
+ proc do |*args|
56
+ @after_route_run_procs_called_with = args
57
+ @after_route_run_procs_called += 1
58
+ end
59
+ end
60
+
61
+ @server_data = Factory.server_data({
62
+ :before_route_run_procs => @before_route_run_procs,
63
+ :after_route_run_procs => @after_route_run_procs
64
+ })
44
65
  @request_data = Factory.request_data
45
66
  end
46
67
 
@@ -50,9 +71,33 @@ class Deas::Route
50
71
  ){ @req_type_name }
51
72
 
52
73
  @route.run(@server_data, @request_data)
74
+
75
+ assert_equal @before_route_run_procs.size, @before_route_run_procs_called
76
+ exp = [@server_data, @request_data]
77
+ assert_equal exp, @before_route_run_procs_called_with
78
+
53
79
  assert_true @proxy.run_called
54
- assert_equal @server_data, @proxy.server_data
80
+ assert_equal @server_data, @proxy.server_data
55
81
  assert_equal @request_data, @proxy.request_data
82
+
83
+ assert_equal @after_route_run_procs.size, @after_route_run_procs_called
84
+ exp = [@server_data, @request_data]
85
+ assert_equal exp, @after_route_run_procs_called_with
86
+ end
87
+
88
+ should "run after route run procs even if the proxy errored" do
89
+ Assert.stub(@server_data.router, :request_type_name).with(
90
+ @request_data.request
91
+ ){ @req_type_name }
92
+ exception = Factory.exception
93
+ Assert.stub(@proxy, :run){ raise exception }
94
+
95
+ raised = assert_raises{ @route.run(@server_data, @request_data) }
96
+ assert_equal exception, raised
97
+
98
+ assert_equal @after_route_run_procs.size, @after_route_run_procs_called
99
+ exp = [@server_data, @request_data]
100
+ assert_equal exp, @after_route_run_procs_called_with
56
101
  end
57
102
 
58
103
  should "halt 404 if it can't find a proxy for the given request type name" do
@@ -6,33 +6,42 @@ class Deas::ServerData
6
6
  class UnitTests < Assert::Context
7
7
  desc "Deas::ServerData"
8
8
  setup do
9
- @error_procs = Factory.integer(3).times.map{ proc{} }
10
- @logger = Factory.string
11
- @router = Factory.string
12
- @template_source = Factory.string
9
+ @error_procs = Factory.integer(3).times.map{ proc{ Factory.string } }
10
+ @before_route_run_procs = Factory.integer(3).times.map{ proc{ Factory.string } }
11
+ @after_route_run_procs = Factory.integer(3).times.map{ proc{ Factory.string } }
12
+ @logger = Factory.string
13
+ @router = Factory.string
14
+ @template_source = Factory.string
13
15
 
14
16
  @server_data = Deas::ServerData.new({
15
- :error_procs => @error_procs,
16
- :logger => @logger,
17
- :router => @router,
18
- :template_source => @template_source
17
+ :error_procs => @error_procs,
18
+ :before_route_run_procs => @before_route_run_procs,
19
+ :after_route_run_procs => @after_route_run_procs,
20
+ :logger => @logger,
21
+ :router => @router,
22
+ :template_source => @template_source
19
23
  })
20
24
  end
21
25
  subject{ @server_data }
22
26
 
23
- should have_readers :error_procs, :logger, :router, :template_source
27
+ should have_readers :error_procs, :before_route_run_procs, :after_route_run_procs
28
+ should have_readers :logger, :router, :template_source
24
29
 
25
30
  should "know its attributes" do
26
- assert_equal @error_procs, subject.error_procs
27
- assert_equal @logger, subject.logger
28
- assert_equal @router, subject.router
29
- assert_equal @template_source, subject.template_source
31
+ assert_equal @error_procs, subject.error_procs
32
+ assert_equal @before_route_run_procs, subject.before_route_run_procs
33
+ assert_equal @after_route_run_procs, subject.after_route_run_procs
34
+ assert_equal @logger, subject.logger
35
+ assert_equal @router, subject.router
36
+ assert_equal @template_source, subject.template_source
30
37
  end
31
38
 
32
39
  should "default its attributes when they aren't provided" do
33
40
  server_data = Deas::ServerData.new({})
34
41
 
35
42
  assert_equal [], server_data.error_procs
43
+ assert_equal [], server_data.before_route_run_procs
44
+ assert_equal [], server_data.after_route_run_procs
36
45
  assert_nil server_data.logger
37
46
  assert_nil server_data.router
38
47
  assert_nil server_data.template_source
@@ -40,10 +49,12 @@ class Deas::ServerData
40
49
 
41
50
  should "know if it is equal to another server data" do
42
51
  server_data = Deas::ServerData.new({
43
- :error_procs => @error_procs,
44
- :logger => @logger,
45
- :router => @router,
46
- :template_source => @template_source
52
+ :error_procs => @error_procs,
53
+ :before_route_run_procs => @before_route_run_procs,
54
+ :after_route_run_procs => @after_route_run_procs,
55
+ :logger => @logger,
56
+ :router => @router,
57
+ :template_source => @template_source
47
58
  })
48
59
  assert_equal server_data, subject
49
60
 
@@ -69,6 +69,18 @@ module Deas::Server
69
69
  assert_equal 1, config.error_procs.size
70
70
  assert_equal exp, config.error_procs.first
71
71
 
72
+ exp = proc{ }
73
+ assert_equal 0, config.before_route_run_procs.size
74
+ subject.before_route_run(&exp)
75
+ assert_equal 1, config.before_route_run_procs.size
76
+ assert_equal exp, config.before_route_run_procs.first
77
+
78
+ exp = proc{ }
79
+ assert_equal 0, config.after_route_run_procs.size
80
+ subject.after_route_run(&exp)
81
+ assert_equal 1, config.after_route_run_procs.size
82
+ assert_equal exp, config.after_route_run_procs.first
83
+
72
84
  exp = Deas::TemplateSource.new(Factory.path)
73
85
  subject.template_source exp
74
86
  assert_equal exp, config.template_source
@@ -127,6 +139,7 @@ module Deas::Server
127
139
  should have_accessors :env, :root
128
140
  should have_accessors :method_override, :show_exceptions, :verbose_logging
129
141
  should have_accessors :middlewares, :init_procs, :error_procs
142
+ should have_accessors :before_route_run_procs, :after_route_run_procs
130
143
  should have_accessors :template_source, :logger, :router
131
144
 
132
145
  should have_imeths :urls, :routes
@@ -150,6 +163,8 @@ module Deas::Server
150
163
  assert_equal [], subject.middlewares
151
164
  assert_equal [], subject.init_procs
152
165
  assert_equal [], subject.error_procs
166
+ assert_equal [], subject.before_route_run_procs
167
+ assert_equal [], subject.after_route_run_procs
153
168
 
154
169
  assert_instance_of Deas::NullTemplateSource, subject.template_source
155
170
  assert_equal subject.root, subject.template_source.path
@@ -36,8 +36,15 @@ module Deas::SinatraApp
36
36
  @router.get('/something', 'EmptyViewHandler')
37
37
  @router.validate!
38
38
 
39
- @config = Deas::Server::Config.new
40
- @config.router = @router
39
+ # set config attributes to make sure they are passed to the `ServerData`
40
+ @config = Deas::Server::Config.new.tap do |c|
41
+ c.error_procs = Factory.integer(3).times.map{ proc{ Factory.string } },
42
+ c.before_route_run_procs = Factory.integer(3).times.map{ proc{ Factory.string } },
43
+ c.after_route_run_procs = Factory.integer(3).times.map{ proc{ Factory.string } },
44
+ c.template_source = Factory.string,
45
+ c.logger = Factory.string,
46
+ c.router = @router
47
+ end
41
48
 
42
49
  @sinatra_app = Deas::SinatraApp.new(@config)
43
50
  end
@@ -58,10 +65,12 @@ module Deas::SinatraApp
58
65
  assert_equal @config.root, s.root
59
66
 
60
67
  exp = Deas::ServerData.new({
61
- :error_procs => @config.error_procs,
62
- :logger => @config.logger,
63
- :router => @config.router,
64
- :template_source => @config.template_source
68
+ :error_procs => @config.error_procs,
69
+ :before_route_run_procs => @config.before_route_run_procs,
70
+ :after_route_run_procs => @config.after_route_run_procs,
71
+ :logger => @config.logger,
72
+ :router => @config.router,
73
+ :template_source => @config.template_source
65
74
  })
66
75
  assert_equal exp, s.deas_server_data
67
76
 
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.43.0
4
+ version: 0.43.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2016-09-14 00:00:00 Z
13
+ date: 2016-11-08 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: assert
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  requirements: []
171
171
 
172
172
  rubyforge_project:
173
- rubygems_version: 2.6.4
173
+ rubygems_version: 2.6.7
174
174
  signing_key:
175
175
  specification_version: 4
176
176
  summary: Handler-based web framework powered by Sinatra