meddleware 0.1.0 → 0.2.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
  SHA256:
3
- metadata.gz: 453a4fea42903735f1b7e502f5fb5ba323ecfd1240db7d476453dabd0e773f8d
4
- data.tar.gz: c459598e2a9145a7ad8a4128cefc5de8ed3a018db28e1cf95a24a26b15b42883
3
+ metadata.gz: 3bfe09bf6e8d403864543e0c74fea482608b78f31c83b32a6cca71ad1d8a3973
4
+ data.tar.gz: 93c888f10763f70779e9a834249e475f6eab18db3f2eacf9bd1442cb87f155d4
5
5
  SHA512:
6
- metadata.gz: 94db19316854023dece52b027bd87f0c423936c3ccf4fba424b85eaa798672aa936820ecb0b5e427c5832c29fe7deb6dce876563c70c3869b15b1b137d26b511
7
- data.tar.gz: 57188689d33ca8a987e4cdcde3792da430b86946c6c0ec99ace62b6e7be05c9658eacbc83f6e3cc26c20d3c8e06a47ef53fa4937919d7d4c1e49a556469cc0c3
6
+ metadata.gz: abaee8a6faafe5ed08d04d9a5166efedbf3e9cc51de2fc3bd1608ba57496e38676860b18bc44ab4a8dfc4030709fc287c84cfaa5001be7a391be7f5f09f4b736
7
+ data.tar.gz: 5222b652ae8a45723d4b20798d4c852d7b8a0e24a1449531c0c8fc96a3c3fa3a265e4bbe8bec3e81f1958a77112fd189f8a75b9bce2f66f3c4c8e5ae8770dac3
@@ -0,0 +1,143 @@
1
+ # backwards compatible functionality for Ruby 2.5
2
+
3
+ class Meddleware
4
+ module V2_5
5
+ def use(*klass_and_args, &block)
6
+ entry = create_entry(klass_and_args, block)
7
+ remove(entry[0])
8
+ stack << entry
9
+ self
10
+ end
11
+ alias append use
12
+
13
+ def prepend(*klass_and_args, &block)
14
+ entry = create_entry(klass_and_args, block)
15
+ remove(entry[0])
16
+ stack.insert(0, entry)
17
+ self
18
+ end
19
+
20
+ def after(after_klass, *klass_and_args, &block)
21
+ entry = create_entry(klass_and_args, block)
22
+ remove(entry[0])
23
+
24
+ i = if after_klass.is_a? Array
25
+ after_klass.map {|x| index(x) }.compact.max
26
+ else
27
+ index(after_klass)
28
+ end
29
+ i ||= count - 1 # last element
30
+
31
+ stack.insert(i + 1, entry)
32
+ self
33
+ end
34
+
35
+ def before(before_klass, *klass_and_args, &block)
36
+ entry = create_entry(klass_and_args, block)
37
+ remove(entry[0])
38
+
39
+ i = if before_klass.is_a? Array
40
+ before_klass.map {|x| index(x) }.compact.min
41
+ else
42
+ index(before_klass)
43
+ end
44
+ i ||= 0 # first element
45
+
46
+ stack.insert(i, entry)
47
+ self
48
+ end
49
+
50
+ def replace(old_klass, *klass_and_args, &block)
51
+ entry = create_entry(klass_and_args, block)
52
+ remove(entry[0])
53
+
54
+ i = index(old_klass)
55
+
56
+ unless i
57
+ raise RuntimeError, "middleware not present: #{old_klass}"
58
+ end
59
+
60
+ stack[i] = entry
61
+ self
62
+ end
63
+
64
+ def call(*args)
65
+ chain = build_chain
66
+ default_args = args
67
+
68
+ traverse = proc do |*args|
69
+ if args.empty?
70
+ args = default_args
71
+ else
72
+ default_args = args
73
+ end
74
+
75
+ if chain.empty?
76
+ yield(*args) if block_given?
77
+ else
78
+ middleware = chain.shift
79
+
80
+ if middleware.is_a?(Proc) && !middleware.lambda?
81
+ middleware.call(*args)
82
+
83
+ # implicit yield
84
+ traverse.call(*args)
85
+ else
86
+ middleware.call(*args, &traverse)
87
+ end
88
+ end
89
+ end
90
+ traverse.call(*args)
91
+ end
92
+
93
+
94
+ private
95
+
96
+ def create_entry(klass_and_args, block)
97
+ klass, *args = klass_and_args
98
+
99
+ if [ klass, block ].compact.count == 0
100
+ raise ArgumentError, 'either a middleware or block must be provided'
101
+ end
102
+
103
+ if klass
104
+ # validate
105
+ if klass.is_a? Class
106
+ unless klass.method_defined?(:call)
107
+ raise ArgumentError, "middleware must implement `.call`: #{klass}"
108
+ end
109
+ else
110
+ unless klass.respond_to?(:call)
111
+ raise ArgumentError, "middleware must respond to `.call`: #{klass}"
112
+ end
113
+
114
+ unless block.nil?
115
+ raise ArgumentError, 'can not supply middleware instance and block'
116
+ end
117
+ end
118
+
119
+ [ klass, args, block ].compact
120
+ else
121
+ [ block ]
122
+ end
123
+ end
124
+
125
+ def build_chain
126
+ # build the middleware stack
127
+ stack.map do |klass, args, block|
128
+ if klass.is_a? Class
129
+ klass.new(*args, &block)
130
+ else
131
+ if args.nil? || args.empty?
132
+ klass
133
+ else
134
+ # curry args
135
+ ->(*more_args, &block) do
136
+ klass.call(*args, *more_args, &block)
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -1,3 +1,3 @@
1
1
  class Meddleware
2
- VERSION = '0.1.0'
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/meddleware.rb CHANGED
@@ -5,44 +5,64 @@ class Meddleware
5
5
  instance_eval(&block) if block_given?
6
6
  end
7
7
 
8
- def use(*klass_and_args, &block)
9
- entry = create_entry(klass_and_args, block)
8
+ def use(*args, **kwargs, &block)
9
+ entry = create_entry(args, kwargs, block)
10
+ remove(entry[0])
10
11
  stack << entry
11
12
  self
12
13
  end
13
14
  alias append use
14
15
 
15
- def prepend(*klass_and_args, &block)
16
- entry = create_entry(klass_and_args, block)
16
+ def prepend(*args, **kwargs, &block)
17
+ entry = create_entry(args, kwargs, block)
18
+ remove(entry[0])
17
19
  stack.insert(0, entry)
18
20
  self
19
21
  end
20
22
 
21
- def after(after_klass, *klass_and_args, &block)
22
- entry = create_entry(klass_and_args, block)
23
- i = index(after_klass) || count - 1
23
+ def after(after_klass, *args, **kwargs, &block)
24
+ entry = create_entry(args, kwargs, block)
25
+ remove(entry[0])
26
+
27
+ i = if after_klass.is_a? Array
28
+ after_klass.map {|x| index(x) }.compact.max
29
+ else
30
+ index(after_klass)
31
+ end
32
+ i ||= count - 1 # last element
33
+
24
34
  stack.insert(i + 1, entry)
25
35
  self
26
36
  end
27
37
 
28
- def before(before_klass, *klass_and_args, &block)
29
- entry = create_entry(klass_and_args, block)
30
- i = index(before_klass) || 0
38
+ def before(before_klass, *args, **kwargs, &block)
39
+ entry = create_entry(args, kwargs, block)
40
+ remove(entry[0])
41
+
42
+ i = if before_klass.is_a? Array
43
+ before_klass.map {|x| index(x) }.compact.min
44
+ else
45
+ index(before_klass)
46
+ end
47
+ i ||= 0 # first element
48
+
31
49
  stack.insert(i, entry)
32
50
  self
33
51
  end
34
52
 
35
- def include?(klass)
36
- !!index(klass)
53
+ def include?(*klass)
54
+ klass.all? {|x| index(x) }
37
55
  end
38
56
 
39
- def remove(klass)
40
- stack.reject! { |entry| entry[0] == klass }
57
+ def remove(*klass)
58
+ stack.reject! { |entry| klass.include?(entry[0]) }
41
59
  self
42
60
  end
43
61
 
44
- def replace(old_klass, *klass_and_args, &block)
45
- entry = create_entry(klass_and_args, block)
62
+ def replace(old_klass, *args, **kwargs, &block)
63
+ entry = create_entry(args, kwargs, block)
64
+ remove(entry[0])
65
+
46
66
  i = index(old_klass)
47
67
 
48
68
  unless i
@@ -66,37 +86,41 @@ class Meddleware
66
86
  stack.empty?
67
87
  end
68
88
 
69
- def call(*args)
89
+ def call(*args, **kwargs)
70
90
  chain = build_chain
71
91
  default_args = args
92
+ default_kwargs = kwargs
72
93
 
73
- traverse = proc do |*args|
74
- if args.empty?
94
+ traverse = proc do |*args, **kwargs|
95
+ if args.empty? && kwargs.empty?
75
96
  args = default_args
97
+ kwargs = default_kwargs
76
98
  else
77
99
  default_args = args
100
+ default_kwargs = kwargs
78
101
  end
79
102
 
80
103
  if chain.empty?
81
- yield(*args) if block_given?
104
+ yield(*args, **kwargs) if block_given?
82
105
  else
83
106
  middleware = chain.shift
84
107
 
85
108
  if middleware.is_a?(Proc) && !middleware.lambda?
86
- middleware.call(*args)
109
+ middleware.call(*args, **kwargs)
87
110
 
88
111
  # implicit yield
89
- traverse.call(*args)
112
+ traverse.call(*args, **kwargs)
90
113
  else
91
- middleware.call(*args, &traverse)
114
+ middleware.call(*args, **kwargs, &traverse)
92
115
  end
93
116
  end
94
117
  end
95
- traverse.call(*args)
118
+
119
+ traverse.call(*args, **kwargs)
96
120
  end
97
121
 
98
122
 
99
- private
123
+ protected
100
124
 
101
125
  def stack
102
126
  @stack ||= []
@@ -106,16 +130,13 @@ class Meddleware
106
130
  stack.index {|entry| entry[0] == klass }
107
131
  end
108
132
 
109
- def create_entry(klass_and_args, block)
110
- klass, *args = klass_and_args
133
+ def create_entry(args, kwargs, block)
134
+ klass, *args = args
111
135
 
112
- if [ klass, block ].compact.count == 0
136
+ if [ klass, block ].compact.empty?
113
137
  raise ArgumentError, 'either a middleware or block must be provided'
114
138
  end
115
139
 
116
- # dedup
117
- remove(klass || block)
118
-
119
140
  if klass
120
141
  # validate
121
142
  if klass.is_a? Class
@@ -132,7 +153,7 @@ class Meddleware
132
153
  end
133
154
  end
134
155
 
135
- [ klass, args, block ]
156
+ [ klass, args, kwargs, block ].compact
136
157
  else
137
158
  [ block ]
138
159
  end
@@ -140,19 +161,32 @@ class Meddleware
140
161
 
141
162
  def build_chain
142
163
  # build the middleware stack
143
- stack.map do |klass, args, block|
164
+ stack.map do |klass, args, kwargs, block|
144
165
  if klass.is_a? Class
145
- klass.new(*args, &block)
166
+ klass.new(*args, **kwargs, &block)
146
167
  else
147
- if args.nil? || args.empty?
168
+ if args.nil? && kwargs.nil?
169
+ # middleware is a block
170
+ klass
171
+ elsif args.empty? && kwargs.empty?
172
+ # nothing to curry, just pass through middleware instance
148
173
  klass
149
174
  else
150
175
  # curry args
151
- ->(*more_args, &block) do
152
- klass.call(*args, *more_args, &block)
176
+ ->(*more_args, **more_kwargs, &block) do
177
+ klass.call(
178
+ *(args + more_args),
179
+ **kwargs.merge(more_kwargs),
180
+ &block
181
+ )
153
182
  end
154
183
  end
155
184
  end
156
185
  end
157
186
  end
187
+
188
+ if RUBY_VERSION < '3'
189
+ require 'meddleware/v2_5'
190
+ prepend Meddleware::V2_5
191
+ end
158
192
  end
@@ -200,6 +200,33 @@ describe Meddleware do
200
200
  subject.after nil, C
201
201
  expect(stack).to eq [ A, C ]
202
202
  end
203
+
204
+ context 'when target is an array' do
205
+ before do
206
+ subject.use A
207
+ subject.use B
208
+ end
209
+
210
+ it 'inserts after the last target' do
211
+ subject.after [ A, B ], C
212
+ expect(stack).to eq [ A, B, C ]
213
+ end
214
+
215
+ it 'ignores missing targets' do
216
+ subject.after [ A, Meddler ], C
217
+ expect(stack).to eq [ A, C, B ]
218
+ end
219
+
220
+ it 'handles nil targets' do
221
+ subject.after [ nil, A ], C
222
+ expect(stack).to eq [ A, C, B ]
223
+ end
224
+
225
+ it 'handles an empty array' do
226
+ subject.after [], C
227
+ expect(stack).to eq [ A, B, C ]
228
+ end
229
+ end
203
230
  end
204
231
 
205
232
  describe '#before' do
@@ -231,6 +258,33 @@ describe Meddleware do
231
258
  subject.before nil, C
232
259
  expect(stack).to eq [ C, A ]
233
260
  end
261
+
262
+ context 'when target is an array' do
263
+ before do
264
+ subject.use A
265
+ subject.use B
266
+ end
267
+
268
+ it 'inserts before the first target' do
269
+ subject.before [ A, B ], C
270
+ expect(stack).to eq [ C, A, B ]
271
+ end
272
+
273
+ it 'ignores missing targets' do
274
+ subject.before [ B, Meddler ], C
275
+ expect(stack).to eq [ A, C, B ]
276
+ end
277
+
278
+ it 'handles nil targets' do
279
+ subject.before [ nil, B ], C
280
+ expect(stack).to eq [ A, C, B ]
281
+ end
282
+
283
+ it 'handles an empty array' do
284
+ subject.before [], C
285
+ expect(stack).to eq [ C, A, B ]
286
+ end
287
+ end
234
288
  end
235
289
 
236
290
  describe '#empty?' do
@@ -277,11 +331,35 @@ describe Meddleware do
277
331
  end
278
332
 
279
333
  describe '#include?' do
280
- it 'works' do
281
- expect(subject.include?(A)).to be false
282
-
334
+ before do
283
335
  subject.use A
284
- expect(subject.include?(A)).to be true
336
+ end
337
+
338
+ it 'finds existing middleware' do
339
+ is_expected.to include A
340
+ end
341
+
342
+ it 'handles missing middleware' do
343
+ is_expected.not_to include B
344
+ end
345
+
346
+ it 'handles nil' do
347
+ is_expected.not_to include nil
348
+ end
349
+
350
+ context 'with multiple targets' do
351
+ it 'requires all targets to exist' do
352
+ expect(subject.include?(A, B)).to be false
353
+ end
354
+
355
+ it 'works when all targets exist' do
356
+ subject.use B
357
+ expect(subject.include?(A, B)).to be true
358
+ end
359
+
360
+ it 'handles nil' do
361
+ expect(subject.include?(A, nil)).to be false
362
+ end
285
363
  end
286
364
  end
287
365
 
@@ -311,6 +389,23 @@ describe Meddleware do
311
389
  subject.remove(nil)
312
390
  expect(stack).to eq [ A, B, C ]
313
391
  end
392
+
393
+ context 'with multiple targets' do
394
+ it 'removes multiple middleware' do
395
+ subject.remove(A, B)
396
+ expect(stack).to eq [ C ]
397
+ end
398
+
399
+ it 'handles redundancy' do
400
+ subject.remove(A, A)
401
+ expect(stack).to eq [ B, C ]
402
+ end
403
+
404
+ it 'handles nil' do
405
+ subject.remove(A, nil)
406
+ expect(stack).to eq [ B, C ]
407
+ end
408
+ end
314
409
  end
315
410
 
316
411
  describe '#replace' do
@@ -378,7 +473,7 @@ describe Meddleware do
378
473
  it 'is a private method' do
379
474
  expect {
380
475
  subject.index
381
- }.to raise_error(NoMethodError, /private/)
476
+ }.to raise_error(NoMethodError)
382
477
  end
383
478
  end
384
479
  end
@@ -2,6 +2,7 @@ describe 'Meddleware#call' do
2
2
  subject { Meddleware.new }
3
3
 
4
4
  let(:middleware) { Meddler.new }
5
+ ruby3 = RUBY_VERSION >= '3'
5
6
 
6
7
  it 'works with no block, no stack' do
7
8
  expect(subject.call).to be nil
@@ -18,8 +19,9 @@ describe 'Meddleware#call' do
18
19
  end
19
20
 
20
21
  it 'passes args through to block' do
21
- subject.call(:abc, x: :yz) do |*args|
22
- expect(args).to eq [ :abc, { x: :yz } ]
22
+ subject.call(:abc, x: :yz) do |*args, **kwargs|
23
+ expect(args).to eq [ :abc ]
24
+ expect(kwargs).to eq x: :yz
23
25
  end
24
26
  end
25
27
 
@@ -56,10 +58,10 @@ describe 'Meddleware#call' do
56
58
  subject.call {}
57
59
  end
58
60
 
59
- it 'calls middleware with args and block' do
60
- expect(middleware).to receive(:call) do |a, b, &block|
61
+ it 'calls middleware with args, kwargs, and block' do
62
+ expect(middleware).to receive(:call) do |a, b:, &block|
61
63
  expect(a).to be :a
62
- expect(b).to eq({ b: :c })
64
+ expect(b).to eq(:c)
63
65
  expect(block).to be_a Proc
64
66
  end
65
67
 
@@ -80,8 +82,9 @@ describe 'Meddleware#call' do
80
82
  end
81
83
 
82
84
  it 'implicitly passes along original arguments' do
83
- subject.call(:abc) do |arg|
84
- expect(arg).to be :abc
85
+ subject.call(:abc, x: :yz) do |*args, **kwargs|
86
+ expect(args).to eq [ :abc ]
87
+ expect(kwargs).to eq x: :yz
85
88
  end
86
89
  end
87
90
  end
@@ -89,21 +92,23 @@ describe 'Meddleware#call' do
89
92
  context 'when middleware calls block with explicit arguments' do
90
93
  it 'can add arguments' do
91
94
  expect(middleware).to receive(:call) do |&block|
92
- block.call(:abc)
95
+ block.call(:abc, x: :yz)
93
96
  end
94
97
 
95
- subject.call do |arg|
96
- expect(arg).to be :abc
98
+ subject.call do |*args, **kwargs|
99
+ expect(args).to eq [ :abc ]
100
+ expect(kwargs).to eq x: :yz
97
101
  end
98
102
  end
99
103
 
100
104
  it 'can override the arguments passed on' do
101
105
  expect(middleware).to receive(:call) do |&block|
102
- block.call(:abc)
106
+ block.call(:abc, x: :z)
103
107
  end
104
108
 
105
- subject.call(123) do |arg|
106
- expect(arg).to be :abc
109
+ subject.call(123, x: :y) do |*args, **kwargs|
110
+ expect(args).to eq [ :abc ]
111
+ expect(kwargs).to eq x: :z
107
112
  end
108
113
  end
109
114
 
@@ -112,9 +117,9 @@ describe 'Meddleware#call' do
112
117
  block.call(nil)
113
118
  end
114
119
 
115
- subject.call(:abc, :xyz) do |a, x|
116
- expect(a).to be nil
117
- expect(x).to be nil
120
+ subject.call(:abc, x: :yz) do |arg, **kwargs|
121
+ expect(arg).to be nil
122
+ expect(kwargs).to be_empty
118
123
  end
119
124
  end
120
125
  end
@@ -158,23 +163,25 @@ describe 'Meddleware#call' do
158
163
 
159
164
  context 'with a middleware instance and arguments' do
160
165
  before do
161
- subject.use middleware, :abc
166
+ subject.use middleware, :abc, x: :yz
162
167
  end
163
168
 
164
169
  it 'curries the arguments' do
165
- expect(middleware).to receive(:call) do |*args, &block|
166
- expect(args).to eq([ :abc ])
170
+ expect(middleware).to receive(:call) do |*args, **kwargs, &block|
171
+ expect(args).to eq [ :abc ]
172
+ expect(kwargs).to eq x: :yz
167
173
  end
168
174
 
169
175
  subject.call
170
176
  end
171
177
 
172
- it 'curries and appends extra arguments' do
173
- expect(middleware).to receive(:call) do |*args, &block|
174
- expect(args).to eq([ :abc, :xyz ])
178
+ it 'curries and appends extra arguments', if: ruby3 do
179
+ expect(middleware).to receive(:call) do |*args, **kwargs, &block|
180
+ expect(args).to eq [ :abc, :def ]
181
+ expect(kwargs).to eq x: :yz, y: :z
175
182
  end
176
183
 
177
- subject.call(:xyz)
184
+ subject.call(:def, y: :z)
178
185
  end
179
186
 
180
187
  it 'curries and appends, without yielding implicitly' do
@@ -1,4 +1,6 @@
1
1
  module MyList
2
+ # generate an array from 1 to n
3
+
2
4
  extend self
3
5
 
4
6
  def middleware(&block)
@@ -8,18 +10,24 @@ module MyList
8
10
  end
9
11
 
10
12
  def generate(n)
11
- middleware.call(n) {|n| (1..n).to_a }
13
+ # invoke middleware chain
14
+ middleware.call(n) do |n|
15
+ # do the actual work of generating your results
16
+ (1..n).to_a
17
+ end
12
18
  end
13
19
  end
14
20
 
15
21
  class OneExtra
16
22
  def call(n)
23
+ # adds one to the argument being passed in
17
24
  yield(n + 1)
18
25
  end
19
26
  end
20
27
 
21
28
  class Doubler
22
29
  def call(*)
30
+ # modifies the results by doubles each value
23
31
  yield.map {|x| x * 2 }
24
32
  end
25
33
  end
@@ -37,13 +45,16 @@ describe MyList do
37
45
  end
38
46
  end
39
47
 
48
+ after { MyList.middleware.clear }
49
+
40
50
  it 'calls middleware chain and generates a list' do
41
- res = nil
51
+ res = MyList.generate(2)
52
+ expect(res).to eq [ 2, 4, 6 ]
53
+ end
42
54
 
55
+ it 'logs to stdout' do
43
56
  expect {
44
- res = MyList.generate(2)
57
+ MyList.generate(2)
45
58
  }.to output("n starts as 2\nn ends as 3\n").to_stdout
46
-
47
- expect(res).to eq [ 2, 4, 6 ]
48
59
  end
49
60
  end
@@ -0,0 +1,47 @@
1
+ require 'meddleware'
2
+
3
+ # lib/mywidget.rb
4
+ class MyWidget
5
+ def self.middleware(&block)
6
+ (@middleware ||= Meddleware.new).tap do
7
+ @middleware.instance_eval(&block) if block_given?
8
+ end
9
+ end
10
+
11
+ def do_the_thing
12
+ # invoke middleware chain
13
+ MyWidget.middleware.call do
14
+ # do your thing
15
+ end
16
+ end
17
+ end
18
+
19
+ MyMiddleware = proc {}
20
+
21
+ # config/initializers/mywidget.rb
22
+ MyWidget.middleware do
23
+ # add a logger
24
+ use { puts "before the thing" }
25
+
26
+ # add another middleware
27
+ use MyMiddleware
28
+ end
29
+
30
+
31
+ # use it from whereever
32
+ # MyWidget.new.do_the_thing
33
+
34
+
35
+ describe MyWidget do
36
+ it 'adds middleware to the framework' do
37
+ expect(MyWidget.middleware).to include(MyMiddleware)
38
+ end
39
+
40
+ it 'calls each middleware' do
41
+ expect(MyMiddleware).to receive(:call)
42
+
43
+ expect {
44
+ MyWidget.new.do_the_thing
45
+ }.to output("before the thing\n").to_stdout
46
+ end
47
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meddleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-05 00:00:00.000000000 Z
11
+ date: 2021-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -87,11 +87,13 @@ extensions: []
87
87
  extra_rdoc_files: []
88
88
  files:
89
89
  - lib/meddleware.rb
90
+ - lib/meddleware/v2_5.rb
90
91
  - lib/meddleware/version.rb
91
92
  - spec/build_meddleware_spec.rb
92
93
  - spec/call_meddleware_chain_spec.rb
93
94
  - spec/call_meddleware_spec.rb
94
- - spec/examples_spec.rb
95
+ - spec/readme/full_example_spec.rb
96
+ - spec/readme/usage_spec.rb
95
97
  homepage: https://github.com/dpep/meddleware_rb
96
98
  licenses:
97
99
  - MIT
@@ -104,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
106
  requirements:
105
107
  - - ">="
106
108
  - !ruby/object:Gem::Version
107
- version: '0'
109
+ version: '2.5'
108
110
  required_rubygems_version: !ruby/object:Gem::Requirement
109
111
  requirements:
110
112
  - - ">="
@@ -117,6 +119,7 @@ specification_version: 4
117
119
  summary: Meddleware
118
120
  test_files:
119
121
  - spec/call_meddleware_spec.rb
122
+ - spec/readme/usage_spec.rb
123
+ - spec/readme/full_example_spec.rb
120
124
  - spec/call_meddleware_chain_spec.rb
121
125
  - spec/build_meddleware_spec.rb
122
- - spec/examples_spec.rb