deas 0.43.0 → 0.43.1

Sign up to get free protection for your applications and to get access to all the features.
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