rory 0.7.0 → 0.8.0

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
  SHA1:
3
- metadata.gz: 87f7aad3ae233e7193f17c7766db1cc3c551793b
4
- data.tar.gz: 8c5ac24faba7ab853b087af9dbea31100d966fc8
3
+ metadata.gz: 74194a9762b2ac9e360fc706885bc17bfb1820d5
4
+ data.tar.gz: 7343f3b2aa9ae9c24620bc786fefb7931b763d78
5
5
  SHA512:
6
- metadata.gz: df8251d088994de0b6333c6ac67daa1c260aa69e7f8aee39f2b59a8234b68cfb096b301664d0c6440e0cf32173160cd5ba4ecd5ee7482d80a3613190148c21c1
7
- data.tar.gz: 3146ba610b2b6e80178f417bbde883acfdb9a560f57aa85157a2db819d8140137fa8431299bc0e421ae05cf498788896f49d4738a0578de1677c5fe3f09f5c8d
6
+ metadata.gz: 8ec94f1abf69f20d707edaf075014bf9fc3e8dae628d57d0d95ed1262d2a4fd1d5a15599590abf911b3a1f221d99797526db54cac266ae8c4f5d7768424b9c10
7
+ data.tar.gz: c8bcbdac1f51336f161a8a0e0f74460f647cfa57eaf00bfe8f2d9fe05097b195882534b7473963f948fd53e56999d1075a2327a902364f3e15ae53cf5c2c9a9a
@@ -2,9 +2,10 @@ require 'pathname'
2
2
  require 'rory/logger'
3
3
  require 'rory/request_id'
4
4
  require 'rory/route_mapper'
5
+ require 'rory/middleware_stack'
6
+ require 'rory/initializers'
5
7
  require 'rack/commonlogger'
6
- require_relative 'request_parameter_logger'
7
-
8
+ require 'rory/request_parameter_logger'
8
9
 
9
10
  module Rory
10
11
  # Main application superclass. Applications should subclass this class,
@@ -30,7 +31,12 @@ module Rory
30
31
  instance.send(*args, &block)
31
32
  end
32
33
 
33
- def respond_to?(method)
34
+ # @return [Rory::Initializers]
35
+ def initializers
36
+ @initializers ||= Initializers.new
37
+ end
38
+
39
+ def respond_to?(method, private=false)
34
40
  return true if instance.respond_to?(method)
35
41
  super
36
42
  end
@@ -42,8 +48,16 @@ module Rory
42
48
  def root=(root_path)
43
49
  $:.unshift @root = Pathname.new(root_path).realpath
44
50
  end
51
+
52
+ def initializer_default_middleware
53
+ Rory::Application.initializers.add "rory.request_middleware" do |app|
54
+ app.request_middleware
55
+ end
56
+ end
45
57
  end
46
58
 
59
+ initializer_default_middleware
60
+
47
61
  def auto_require_paths
48
62
  @auto_require_paths ||= %w(models controllers helpers)
49
63
  end
@@ -102,12 +116,11 @@ module Rory
102
116
  end
103
117
 
104
118
  def use_middleware(*args, &block)
105
- @stack = nil
106
- middleware << [args, block]
119
+ middleware.use *args, &block
107
120
  end
108
121
 
109
122
  def middleware
110
- @middleware ||= []
123
+ @middleware ||= MiddlewareStack.new
111
124
  end
112
125
 
113
126
  def dispatcher
@@ -136,20 +149,27 @@ module Rory
136
149
  @stack = nil
137
150
  end
138
151
 
139
- def use_default_middleware
140
- if request_logging_on?
141
- use_middleware Rory::RequestId, :uuid_prefix => self.class.name
142
- use_middleware Rack::PostBodyContentTypeParser
143
- use_middleware Rack::CommonLogger, logger
144
- use_middleware Rory::RequestParameterLogger, logger, :filters => parameters_to_filter
145
- end
152
+ def uuid_prefix
153
+ Support.tokenize(self.class.name.gsub("::Application", ""))
154
+ end
155
+
156
+ def request_middleware
157
+ return unless request_logging_on?
158
+ use_middleware Rory::RequestId, :uuid_prefix => uuid_prefix
159
+ use_middleware Rack::PostBodyContentTypeParser
160
+ use_middleware Rack::CommonLogger, logger
161
+ use_middleware Rory::RequestParameterLogger, logger, :filters => parameters_to_filter
162
+ end
163
+
164
+ def run_initializers
165
+ Rory::Application.initializers.run(self)
146
166
  end
147
167
 
148
168
  def stack
149
169
  @stack ||= Rack::Builder.new.tap { |builder|
150
- use_default_middleware
151
- middleware.each do |args, block|
152
- builder.use *args, &block
170
+ run_initializers
171
+ middleware.each do |m|
172
+ builder.use m.klass, *m.args, &m.block
153
173
  end
154
174
  builder.run dispatcher
155
175
  }
@@ -0,0 +1,81 @@
1
+ module Rory
2
+ class Initializers
3
+ class Initializer
4
+ attr_reader :name, :block
5
+
6
+ def initialize(name, block)
7
+ @name = name
8
+ @block = block
9
+ end
10
+
11
+ def ==(initializer)
12
+ name == initializer.name
13
+ end
14
+
15
+ def inspect
16
+ "<Initializer '#{name}'>"
17
+ end
18
+
19
+ def call(app)
20
+ block.call(app)
21
+ end
22
+ end
23
+
24
+ include Enumerable
25
+ extend Forwardable
26
+ attr_accessor :initializers
27
+ def_delegators :initializers, :each, :clear, :size, :last, :first, :[]
28
+
29
+ def initialize
30
+ @initializers = []
31
+ yield(self) if block_given?
32
+ end
33
+
34
+ def unshift(name, &block)
35
+ initializers.unshift(build_initializer(name, block))
36
+ end
37
+
38
+ def insert(index, name, &block)
39
+ index = assert_index(index, :before)
40
+ initializers.insert(index, build_initializer(name, block))
41
+ end
42
+
43
+ alias_method :insert_before, :insert
44
+
45
+ def insert_after(index, name, &block)
46
+ index = assert_index(index, :after)
47
+ insert(index + 1, name, &block)
48
+ end
49
+
50
+ def delete(target)
51
+ initializers.delete_if { |m| m.name == target }
52
+ end
53
+
54
+ def add(name, &block)
55
+ initializers.push(build_initializer(name, block))
56
+ end
57
+
58
+ def run(app)
59
+ initializers.map{|i| i.call(app)}
60
+ end
61
+
62
+ private
63
+
64
+ def assert_index(index, where)
65
+ i = index.is_a?(Integer) ? index : initializers.index { |m| m.name == index }
66
+ raise "No such initializer to insert #{where}: #{index.inspect}" unless i
67
+ i
68
+ end
69
+
70
+ def build_initializer(name, block)
71
+ Initializer.new(name, block).tap{ |i| assert_unique_name(i) }
72
+ end
73
+
74
+ def assert_unique_name(i)
75
+ unless (conflict = @initializers.select{|ii| ii == i}).empty?
76
+ raise "Initializer name: '#{i.name}' is already used. #{conflict.first.block}"
77
+ end
78
+ end
79
+ end
80
+ end
81
+
@@ -0,0 +1,85 @@
1
+ module Rory
2
+ class MiddlewareStack
3
+ class Middleware
4
+ attr_reader :args, :block, :klass
5
+
6
+ def initialize(klass, args, block)
7
+ @klass = klass
8
+ @args = args
9
+ @block = block
10
+ end
11
+
12
+ def name;
13
+ klass.name;
14
+ end
15
+
16
+ def ==(middleware)
17
+ case middleware
18
+ when Middleware
19
+ klass == middleware.klass
20
+ when Class
21
+ klass == middleware
22
+ end
23
+ end
24
+
25
+ def inspect
26
+ if klass.is_a?(Class)
27
+ klass.to_s
28
+ else
29
+ klass.class.to_s
30
+ end
31
+ end
32
+
33
+ def build(app)
34
+ klass.new(app, *args, &block)
35
+ end
36
+ end
37
+
38
+ include Enumerable
39
+ extend Forwardable
40
+ attr_accessor :middlewares
41
+ def_delegators :middlewares, :each, :clear, :size, :last, :first, :[]
42
+
43
+ def initialize(on_change: -> {})
44
+
45
+ @middlewares = []
46
+ yield(self) if block_given?
47
+ end
48
+
49
+ def unshift(klass, *args, &block)
50
+ middlewares.unshift(build_middleware(klass, args, block))
51
+ end
52
+
53
+ def insert(index, klass, *args, &block)
54
+ index = assert_index(index, :before)
55
+ middlewares.insert(index, build_middleware(klass, args, block))
56
+ end
57
+
58
+ alias_method :insert_before, :insert
59
+
60
+ def insert_after(index, *args, &block)
61
+ index = assert_index(index, :after)
62
+ insert(index + 1, *args, &block)
63
+ end
64
+
65
+ def delete(target)
66
+ middlewares.delete_if { |m| m.klass == target }
67
+ end
68
+
69
+ def use(klass, *args, &block)
70
+ middlewares.push(build_middleware(klass, args.compact, block))
71
+ end
72
+
73
+ private
74
+
75
+ def assert_index(index, where)
76
+ i = index.is_a?(Integer) ? index : middlewares.index { |m| m.klass == index }
77
+ raise "No such middleware to insert #{where}: #{index.inspect}" unless i
78
+ i
79
+ end
80
+
81
+ def build_middleware(klass, args, block)
82
+ Middleware.new(klass, args, block)
83
+ end
84
+ end
85
+ end
@@ -34,7 +34,7 @@ module Rory
34
34
  end
35
35
 
36
36
  def uuid_prefix
37
- @uuid_prefix ? "#{Support.tokenize(@uuid_prefix)}-" : ""
37
+ @uuid_prefix ? "#{@uuid_prefix}-" : ""
38
38
  end
39
39
  end
40
40
  end
data/lib/rory/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rory
2
- VERSION = '0.7.0'
2
+ VERSION = '0.8.0'
3
3
  end
data/lib/tasks/rory.rake CHANGED
@@ -6,6 +6,17 @@ namespace :rory do
6
6
  command = ARGV.shift
7
7
  IRB.start
8
8
  end
9
+
10
+ desc "List out middleware stack in load order"
11
+ task :middleware => :environment do
12
+ Rory.application.run_initializers
13
+ puts Rory.application.middleware.map(&:klass).map(&:to_s).join("\n")
14
+ end
15
+
16
+ desc "List out initializers in load order"
17
+ task :initializers => :environment do
18
+ puts Rory::Application.initializers.map(&:name).join("\n")
19
+ end
9
20
  end
10
21
 
11
22
  namespace :log do
@@ -23,4 +34,4 @@ task :tasks do
23
34
  { 'name' => t.name, 'location' => t.locations }
24
35
  }
25
36
  puts tasks
26
- end
37
+ end
data/rory.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.name = "rory"
9
9
  s.version = Rory::VERSION
10
10
  s.platform = Gem::Platform::RUBY
11
- s.authors = ["Ravi Gadad", "Michael Irey", "David Begin"]
11
+ s.authors = ["Ravi Gadad", "Michael Irey", "David Begin", "Dustin Zeisler"]
12
12
  s.email = ["ravi@screamingmuse.com"]
13
13
  s.homepage = "http://github.com/screamingmuse/rory"
14
14
  s.summary = "Another Ruby web framework. Just what the world needs."
@@ -19,7 +19,7 @@ Rails design decisions.
19
19
 
20
20
  See http://github.com/screamingmuse/rory for more info.
21
21
  EOF
22
- s.required_ruby_version = ">= 1.8.7"
22
+ s.required_ruby_version = ">= 2.1.5"
23
23
  s.required_rubygems_version = ">= 1.3.6"
24
24
 
25
25
  s.extra_rdoc_files = ["LICENSE.txt", "README.md"]
@@ -1,4 +1,6 @@
1
- describe Rory::Application do
1
+ require_relative '../../fixture_app/lib/dummy_middleware'
2
+
3
+ RSpec.describe Rory::Application do
2
4
  let(:subject) {
3
5
  Object.const_set(test_rory_app_name, Class.new(Rory::Application).tap { |app|
4
6
  app.root = root
@@ -12,6 +14,11 @@ describe Rory::Application do
12
14
  }
13
15
  let(:root){"spec/fixture_app"}
14
16
 
17
+ before do
18
+ Rory::Application.initializers.clear
19
+ Rory::Application.initializer_default_middleware
20
+ end
21
+
15
22
  describe ".root=" do
16
23
  let(:root) { "current_app" }
17
24
  before { `ln -s spec/fixture_app current_app` }
@@ -165,7 +172,7 @@ describe Rory::Application do
165
172
  and_return(:the_dispatcher)
166
173
  allow(Rack::Builder).to receive(:new).and_return(builder)
167
174
  subject.use_middleware :horse
168
- expect(subject.instance).to receive(:use_default_middleware)
175
+ expect(subject.instance).to receive(:request_middleware).with(no_args)
169
176
  expect(builder).to receive(:use).with(:horse)
170
177
  expect(builder).to receive(:run).with(:the_dispatcher)
171
178
  expect(subject.stack).to eq(builder)
@@ -183,17 +190,17 @@ describe Rory::Application do
183
190
  allow(subject.instance).to receive(:request_logging_on?).and_return(true)
184
191
  allow(subject.instance).to receive(:parameters_to_filter).and_return([:horses])
185
192
  allow(subject.instance).to receive(:logger).and_return(:the_logger)
186
- expect(subject.instance).to receive(:use_middleware).with(Rory::RequestId, :uuid_prefix => test_rory_app_name)
193
+ expect(subject.instance).to receive(:use_middleware).with(Rory::RequestId, :uuid_prefix => Rory::Support.tokenize(test_rory_app_name))
187
194
  expect(subject.instance).to receive(:use_middleware).with(Rack::PostBodyContentTypeParser)
188
195
  expect(subject.instance).to receive(:use_middleware).with(Rack::CommonLogger, :the_logger)
189
196
  expect(subject.instance).to receive(:use_middleware).with(Rory::RequestParameterLogger, :the_logger, :filters => [:horses])
190
- subject.use_default_middleware
197
+ subject.request_middleware
191
198
  end
192
199
 
193
200
  it "does not add middleware when request logging is off" do
194
201
  allow(subject.instance).to receive(:request_logging_on?).and_return(false)
195
202
  expect(subject.instance).to receive(:use_middleware).never
196
- subject.use_default_middleware
203
+ subject.request_middleware
197
204
  end
198
205
  end
199
206
 
@@ -254,7 +261,7 @@ describe Rory::Application do
254
261
 
255
262
  describe '.use_middleware' do
256
263
  it 'adds the given middleware to the stack, retaining args and block' do
257
- require_relative '../../fixture_app/lib/dummy_middleware'
264
+
258
265
  subject.use_middleware DummyMiddleware, :puppy do |dm|
259
266
  dm.prefix = 'a salubrious'
260
267
  end
@@ -291,4 +298,56 @@ describe Rory::Application do
291
298
  end
292
299
  end
293
300
  end
301
+
302
+ describe ".initializers" do
303
+ describe ".insert_after" do
304
+ it "inserts initializer before another" do
305
+ probe = []
306
+ Rory::Application.initializers.add("insert_after.A") { probe << "insert_after.A" }
307
+ Rory::Application.initializers.add("insert_after.B") { probe << "insert_after.B" }
308
+ Rory::Application.initializers.insert_after("insert_after.A", "insert_after.C") { probe << "insert_after.C" }
309
+
310
+ expect { subject.run_initializers }.to change { probe }.from([]).
311
+ to(%w(insert_after.A insert_after.C insert_after.B))
312
+ end
313
+ end
314
+
315
+ describe ".add" do
316
+ it "runs the code inside any initializer block" do
317
+ probe = :initializers_not_run
318
+ Rory::Application.initializers.add "add.test" do
319
+ probe = :was_run
320
+ end
321
+ expect { subject.run_initializers }.to change { probe }.from(:initializers_not_run).to(:was_run)
322
+ end
323
+
324
+ it "passes the app instance to the block" do
325
+ probe = :block_not_called
326
+ Rory::Application.initializers.add "add.test_passes_app" do |app|
327
+ probe = :block_called
328
+ expect(app.class.superclass).to eq Rory::Application
329
+ end
330
+ expect { subject.run_initializers }.to change { probe }.from(:block_not_called).to(:block_called)
331
+ end
332
+ end
333
+ end
334
+
335
+ describe "#middleware" do
336
+ before { subject.middleware.clear }
337
+
338
+ describe "#insert_before" do
339
+ it "places the middleware order right after the given class" do
340
+ subject.instance.instance_variable_set(:@request_logging, :true)
341
+ Rory::Application.initializers.add "insert_before.dummy_middleware" do |app|
342
+ app.middleware.insert_before Rory::RequestId, DummyMiddleware, :puppy
343
+ end
344
+ subject.run_initializers
345
+ expect(subject.middleware.map(&:klass)).to eq [DummyMiddleware,
346
+ Rory::RequestId,
347
+ Rack::PostBodyContentTypeParser,
348
+ Rack::CommonLogger,
349
+ Rory::RequestParameterLogger]
350
+ end
351
+ end
352
+ end
294
353
  end
@@ -0,0 +1,77 @@
1
+ RSpec.describe Rory::Initializers do
2
+
3
+ describe "#unshift" do
4
+ it "adds an item to the front" do
5
+ subject.unshift("test.1unshift") {}
6
+ subject.unshift("test.2unshift") {}
7
+ expect(subject.initializers.map(&:name)).to eq %w(test.2unshift test.1unshift)
8
+ end
9
+ end
10
+
11
+ describe "#insert" do
12
+ it "adds an item before another" do
13
+ subject.add("test.1insert") {}
14
+ subject.insert("test.1insert", "test.2insert") {}
15
+ expect(subject.initializers.map(&:name)).to eq %w(test.2insert test.1insert)
16
+ end
17
+ end
18
+
19
+ describe "#insert_before" do
20
+ it "adds an item before another" do
21
+ subject.add("test.1insert_before") {}
22
+ subject.insert_before("test.1insert_before", "test.2insert_before") {}
23
+ expect(subject.initializers.map(&:name)).to eq %w(test.2insert_before test.1insert_before)
24
+ end
25
+ end
26
+
27
+ describe "#insert_after" do
28
+ it "adds an item at certain point after a given initializer" do
29
+ subject.add("test.1insert_after") {}
30
+ subject.add("test.2insert_after") {}
31
+ subject.insert_after("test.1insert_after", "test.3insert_after") {}
32
+ expect(subject.initializers.map(&:name)).to eq %w(test.1insert_after test.3insert_after test.2insert_after)
33
+ end
34
+ end
35
+
36
+ describe "#delete" do
37
+ it "removes a given initializer from loading" do
38
+ subject.add("test.delete") {}
39
+ subject.delete("test.delete")
40
+ expect(subject.initializers.map(&:name)).to eq []
41
+ end
42
+ end
43
+
44
+ describe "#add" do
45
+ it "push an item on the list to be loaded" do
46
+ subject.add("test.1add") {}
47
+ subject.add("test.2add") {}
48
+ expect(subject.initializers.map(&:name)).to eq %w(test.1add test.2add)
49
+ end
50
+
51
+ context "when two initializers have the same name" do
52
+ it "raises an error" do
53
+ subject.add("same_name_test") {}
54
+ expect{subject.add("same_name_test") {}}.to raise_error(/Initializer name: 'same_name_test' is already used./)
55
+ end
56
+ end
57
+ end
58
+
59
+ describe "#run" do
60
+ it "runs the initializers when given an app" do
61
+ probe = :block_not_run
62
+ subject.add("test.1add") { |app| probe = app }
63
+ subject.run(:this_is_the_app)
64
+ expect(probe).to eq :this_is_the_app
65
+ end
66
+ end
67
+
68
+ context "delegated array methods" do
69
+ [:each, :clear, :size, :last, :first].each do |meth|
70
+ it "##{meth}" do
71
+ expect(subject.initializers).to receive(meth)
72
+ subject.public_send(meth)
73
+ end
74
+ end
75
+ end
76
+ end
77
+
@@ -0,0 +1,86 @@
1
+ RSpec.describe Rory::MiddlewareStack do
2
+
3
+ let(:middleware_order) { subject.middlewares.map(&:klass).map(&:name) }
4
+
5
+ describe "#unshift" do
6
+ it "adds an item to the front" do
7
+ subject.unshift(double(name: "unshift1")) {}
8
+ subject.unshift(double(name: "unshift2"), 1, 2)
9
+
10
+ expect(middleware_order).to eq %w(unshift2 unshift1)
11
+ end
12
+ end
13
+
14
+ describe "#insert" do
15
+ it "adds an item to the end" do
16
+ insert1 = (double(name: "insert1"))
17
+ subject.use(insert1) {}
18
+ subject.insert(insert1, double(name: "insert2"), 1, 2)
19
+
20
+ expect(middleware_order).to eq %w(insert2 insert1)
21
+ end
22
+ end
23
+
24
+ describe "#insert_before" do
25
+ it "adds an item to the end" do
26
+ insert1 = (double(name: "insert_before1"))
27
+ subject.use(insert1) {}
28
+ subject.insert(insert1, double(name: "insert_before2"), 1, 2)
29
+
30
+ expect(middleware_order).to eq %w(insert_before2 insert_before1)
31
+ end
32
+ end
33
+
34
+ describe "#insert_after" do
35
+ it "adds an item at certain point after a given middleware" do
36
+ insert_after1 = double(name: "test.1insert_after")
37
+ subject.use(insert_after1) {}
38
+ subject.use(double(name: "test.2insert_after")) {}
39
+ subject.insert_after(insert_after1, double(name: "test.3insert_after")) {}
40
+ expect(middleware_order).to eq %w(test.1insert_after test.3insert_after test.2insert_after)
41
+ end
42
+ end
43
+
44
+ describe "#delete" do
45
+ it "removes a given middleware from loading" do
46
+ test_delete = double(name: "delete")
47
+ subject.use(test_delete)
48
+ subject.delete(test_delete)
49
+ expect(middleware_order).to eq []
50
+ end
51
+ end
52
+
53
+ describe "#use" do
54
+ it "push an item on the list to be loaded" do
55
+ subject.use(double(name: "use1")) {}
56
+ subject.use(double(name: "use2"), 1, 2)
57
+
58
+ expect(middleware_order).to eq %w(use1 use2)
59
+ end
60
+
61
+ it "arguments will be saved" do
62
+ subject.use(double(name: "use1")) {}
63
+ subject.use(double(name: "use2"), 1, 2)
64
+
65
+ expect(subject.middlewares.map(&:args)).to eq [[], [1, 2]]
66
+ end
67
+
68
+ it "blocks will be saved" do
69
+ probe = :block_not_called
70
+ subject.use(double(name: "use1")) {probe = :block_called}
71
+ subject.use(double(name: "use2"), 1, 2)
72
+ subject.middlewares.map(&:block).compact.map(&:call)
73
+ expect(probe).to eq :block_called
74
+ end
75
+ end
76
+
77
+ context "delegated array methods" do
78
+ [:each, :clear, :size, :last, :first].each do |meth|
79
+ it "##{meth}" do
80
+ expect(subject.middlewares).to receive(meth)
81
+ subject.public_send(meth)
82
+ end
83
+ end
84
+ end
85
+ end
86
+
@@ -23,7 +23,7 @@ RSpec.describe Rory::RequestId do
23
23
  end
24
24
 
25
25
  context "the uuid can be given a prefixed to know where it was created" do
26
- let(:uuid_prefix) { "AppName" }
26
+ let(:uuid_prefix) { "app_name" }
27
27
  it { expect(Thread.current.get_inheritable_attribute(:rory_request_id)).to eq "app_name-1234" }
28
28
  end
29
29
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ravi Gadad
8
8
  - Michael Irey
9
9
  - David Begin
10
+ - Dustin Zeisler
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2016-01-29 00:00:00.000000000 Z
14
+ date: 2016-02-27 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: rack
@@ -229,7 +230,9 @@ files:
229
230
  - lib/rory/application.rb
230
231
  - lib/rory/controller.rb
231
232
  - lib/rory/dispatcher.rb
233
+ - lib/rory/initializers.rb
232
234
  - lib/rory/logger.rb
235
+ - lib/rory/middleware_stack.rb
233
236
  - lib/rory/parameter_filter.rb
234
237
  - lib/rory/path_generation.rb
235
238
  - lib/rory/renderer.rb
@@ -268,7 +271,9 @@ files:
268
271
  - spec/lib/rory/application_spec.rb
269
272
  - spec/lib/rory/controller_spec.rb
270
273
  - spec/lib/rory/dispatcher_spec.rb
274
+ - spec/lib/rory/initializers_spec.rb
271
275
  - spec/lib/rory/logger_spec.rb
276
+ - spec/lib/rory/middleware_stack_spec.rb
272
277
  - spec/lib/rory/parameter_filter_spec.rb
273
278
  - spec/lib/rory/renderer/context_spec.rb
274
279
  - spec/lib/rory/renderer_spec.rb
@@ -293,7 +298,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
293
298
  requirements:
294
299
  - - ">="
295
300
  - !ruby/object:Gem::Version
296
- version: 1.8.7
301
+ version: 2.1.5
297
302
  required_rubygems_version: !ruby/object:Gem::Requirement
298
303
  requirements:
299
304
  - - ">="