rory 0.7.0 → 0.8.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.
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
  - - ">="