ibsciss-middleware 0.4.2 → 0.4.3
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 +5 -5
- data/CHANGELOG.md +3 -0
- data/lib/middleware/builder.rb +2 -2
- data/lib/middleware/runner.rb +3 -2
- data/middleware.gemspec +2 -2
- data/spec/middleware/builder_spec.rb +25 -1
- data/spec/middleware/runner_spec.rb +22 -1
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c89cc2b115c1a80b0832be442efcae80215ae469f4c1afadd05e471d3eabc4ca
|
4
|
+
data.tar.gz: 3234dc5748481f4e47ce2720818a32e4ef7226e1b052b8caa6c4e8427a0a2da5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df9e7568674925a87a0ce50d335d99d6bc351a6536a21d8f044651b74e3c6670190b995a7ad0a5b5b85576eddbb11665186ed445c1cf77769b7d574694959047
|
7
|
+
data.tar.gz: a5f4d6137d5a20ede4def20a64c1016560d9dc6964ab0a875343d9e0eb3b948f5c3c4ce839cec9284b26e0fc8f7b658a489a60ac312e4928279398703be5bd8b
|
data/CHANGELOG.md
CHANGED
data/lib/middleware/builder.rb
CHANGED
@@ -73,12 +73,12 @@ module Middleware
|
|
73
73
|
# of the middleware.
|
74
74
|
#
|
75
75
|
# @param [Class] middleware The middleware class
|
76
|
-
def use(middleware, *args, &block)
|
76
|
+
def use(middleware, *args, **kwargs, &block)
|
77
77
|
if middleware.is_a?(Builder)
|
78
78
|
# Merge in the other builder's stack into our own
|
79
79
|
stack.concat(middleware.stack)
|
80
80
|
else
|
81
|
-
stack << [middleware, args, block]
|
81
|
+
stack << [middleware, args, kwargs, block]
|
82
82
|
end
|
83
83
|
|
84
84
|
self
|
data/lib/middleware/runner.rb
CHANGED
@@ -42,17 +42,18 @@ module Middleware
|
|
42
42
|
# is always the empty middleware, which does nothing but return.
|
43
43
|
stack.reverse.inject(EMPTY_MIDDLEWARE) do |next_middleware, current_middleware|
|
44
44
|
# Unpack the actual item
|
45
|
-
klass, args, block = current_middleware
|
45
|
+
klass, args, kwargs, block = current_middleware
|
46
46
|
|
47
47
|
# Default the arguments to an empty array. Otherwise in Ruby 1.8
|
48
48
|
# a `nil` args will actually pass `nil` into the class. Not what
|
49
49
|
# we want!
|
50
50
|
args ||= []
|
51
|
+
kwargs ||= {}
|
51
52
|
|
52
53
|
if klass.is_a?(Class)
|
53
54
|
# If the klass actually is a class, then instantiate it with
|
54
55
|
# the app and any other arguments given.
|
55
|
-
klass.new(next_middleware, *args, &block)
|
56
|
+
klass.new(next_middleware, *args, **kwargs, &block)
|
56
57
|
elsif klass.respond_to?(:call)
|
57
58
|
# Make it a lambda which calls the item then forwards up
|
58
59
|
# the chain.
|
data/middleware.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.homepage = 'https://github.com/ibsciss/ruby-middleware'
|
9
9
|
gem.license = 'MIT'
|
10
10
|
|
11
|
-
gem.add_development_dependency 'rake', '
|
11
|
+
gem.add_development_dependency 'rake', '>= 12.3.3'
|
12
12
|
gem.add_development_dependency 'rspec-core', '~> 3.2'
|
13
13
|
gem.add_development_dependency 'rspec-expectations', '~> 3.2'
|
14
14
|
gem.add_development_dependency 'rspec-mocks', '~> 3.2'
|
@@ -19,5 +19,5 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
20
|
gem.name = 'ibsciss-middleware'
|
21
21
|
gem.require_paths = ['lib']
|
22
|
-
gem.version = '0.4.
|
22
|
+
gem.version = '0.4.3'
|
23
23
|
end
|
@@ -4,6 +4,20 @@ describe Middleware::Builder do
|
|
4
4
|
let(:data) { { data: [] } }
|
5
5
|
let(:instance) { described_class.new }
|
6
6
|
|
7
|
+
class Foo
|
8
|
+
def initialize app, pos, key:
|
9
|
+
@app = app
|
10
|
+
@pos = pos
|
11
|
+
@key = key
|
12
|
+
end
|
13
|
+
|
14
|
+
def call env
|
15
|
+
env[:pos] = @pos
|
16
|
+
env[:key] = @key
|
17
|
+
@app.call(env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
7
21
|
# This returns a proc that can be used with the builder
|
8
22
|
# that simply appends data to an array in the env.
|
9
23
|
def appender_proc(data)
|
@@ -53,6 +67,16 @@ describe Middleware::Builder do
|
|
53
67
|
expect(data[:data]).to eq true
|
54
68
|
end
|
55
69
|
|
70
|
+
it 'handles positional and keyword arguments' do
|
71
|
+
data = {}
|
72
|
+
|
73
|
+
instance.use Foo, 1, key: 2
|
74
|
+
instance.call(data)
|
75
|
+
|
76
|
+
expect(data[:pos]).to eq 1
|
77
|
+
expect(data[:key]).to eq 2
|
78
|
+
end
|
79
|
+
|
56
80
|
it 'is able to add multiple items' do
|
57
81
|
data = {}
|
58
82
|
proc1 = ->(env) { env.tap { |obj| obj[:one] = :value_1 } }
|
@@ -239,4 +263,4 @@ describe Middleware::Builder do
|
|
239
263
|
end
|
240
264
|
end
|
241
265
|
|
242
|
-
end
|
266
|
+
end
|
@@ -85,6 +85,27 @@ describe Middleware::Runner do
|
|
85
85
|
expect(env[:result]).to eq 42
|
86
86
|
end
|
87
87
|
|
88
|
+
it 'passes in keyword arguments if given' do
|
89
|
+
a = Class.new do
|
90
|
+
def initialize(_app, foo = nil, bar: nil)
|
91
|
+
@foo = foo
|
92
|
+
@bar = bar
|
93
|
+
end
|
94
|
+
|
95
|
+
def call(env)
|
96
|
+
env[:foo] = @foo
|
97
|
+
env[:bar] = @bar
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
env = {}
|
102
|
+
instance = described_class.new([[a, [42], { bar: 1764 }, nil]])
|
103
|
+
instance.call(env)
|
104
|
+
|
105
|
+
expect(env[:foo]).to eq 42
|
106
|
+
expect(env[:bar]).to eq 1764
|
107
|
+
end
|
108
|
+
|
88
109
|
it 'passes in a block if given' do
|
89
110
|
a = Class.new do
|
90
111
|
def initialize(_app, &block)
|
@@ -98,7 +119,7 @@ describe Middleware::Runner do
|
|
98
119
|
|
99
120
|
block = proc { 42 }
|
100
121
|
env = {}
|
101
|
-
instance = described_class.new([[a,
|
122
|
+
instance = described_class.new([[a, [], {}, block]])
|
102
123
|
instance.call(env)
|
103
124
|
|
104
125
|
expect(env[:result]).to eq 42
|
metadata
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibsciss-middleware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitchell Hashimoto
|
8
8
|
- Arnaud Lemaire
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 12.3.3
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 12.3.3
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rspec-core
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +109,7 @@ homepage: https://github.com/ibsciss/ruby-middleware
|
|
109
109
|
licenses:
|
110
110
|
- MIT
|
111
111
|
metadata: {}
|
112
|
-
post_install_message:
|
112
|
+
post_install_message:
|
113
113
|
rdoc_options: []
|
114
114
|
require_paths:
|
115
115
|
- lib
|
@@ -124,9 +124,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
|
-
|
128
|
-
|
129
|
-
signing_key:
|
127
|
+
rubygems_version: 3.5.5
|
128
|
+
signing_key:
|
130
129
|
specification_version: 4
|
131
130
|
summary: Generalized implementation of the rack middleware abstraction for Ruby (chain
|
132
131
|
of responsibility design pattern).
|