ibsciss-middleware 0.4.1 → 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 +10 -0
- data/README.md +6 -6
- data/lib/middleware/builder.rb +8 -13
- 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
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.4.3
|
2
|
+
- Fix Ruby 3 error when keyword argument is passed
|
3
|
+
-
|
4
|
+
## 0.4.2
|
5
|
+
- Update documentation
|
6
|
+
- Fix bug https://github.com/Ibsciss/ruby-middleware/issues/8
|
7
|
+
|
8
|
+
## 0.4.1
|
9
|
+
- Simplify the inspect method
|
10
|
+
|
1
11
|
## 0.4.0
|
2
12
|
- Add a name displayed in the logger & inspect methods
|
3
13
|
- Add a logger middleware
|
data/README.md
CHANGED
@@ -28,7 +28,7 @@ $ gem install ibsciss-middleware
|
|
28
28
|
Or, in your Gemfile:
|
29
29
|
|
30
30
|
```
|
31
|
-
gem 'ibsciss-middleware', '~> 0.
|
31
|
+
gem 'ibsciss-middleware', '~> 0.4.2'
|
32
32
|
```
|
33
33
|
|
34
34
|
Then, you can add it to your project:
|
@@ -169,8 +169,8 @@ lambdas:
|
|
169
169
|
|
170
170
|
```ruby
|
171
171
|
Middleware::Builder.new { |b|
|
172
|
-
b.use
|
173
|
-
b.use
|
172
|
+
b.use -> (env) { env + 3 }
|
173
|
+
b.use -> (env) { env * 2 }
|
174
174
|
}.call(1) #return 8
|
175
175
|
```
|
176
176
|
|
@@ -188,7 +188,7 @@ for building a stack of middlewares:
|
|
188
188
|
```ruby
|
189
189
|
stack = Middleware::Builder.new do |d|
|
190
190
|
d.use Trace
|
191
|
-
d.use
|
191
|
+
d.use ->(env) { puts "LAMBDA!" }
|
192
192
|
end
|
193
193
|
```
|
194
194
|
|
@@ -241,7 +241,7 @@ stack.insert_after(0, SomeOtherMiddleware)
|
|
241
241
|
#### Insert after each
|
242
242
|
|
243
243
|
```ruby
|
244
|
-
logger =
|
244
|
+
logger = -> (env) { p env }
|
245
245
|
|
246
246
|
# Insert the middleware (can be also a middleware object) after each existing middleware
|
247
247
|
stack.insert_after_each logger
|
@@ -250,7 +250,7 @@ stack.insert_after_each logger
|
|
250
250
|
#### Insert before each
|
251
251
|
|
252
252
|
```ruby
|
253
|
-
logger =
|
253
|
+
logger = -> (env) { p env }
|
254
254
|
|
255
255
|
# Insert the middleware (can be also a middleware object) before each existing middleware
|
256
256
|
stack.insert_before_each logger
|
data/lib/middleware/builder.rb
CHANGED
@@ -73,19 +73,18 @@ 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
|
85
85
|
end
|
86
86
|
|
87
|
-
# Inserts a middleware at the given index or directly before the
|
88
|
-
# given middleware object.
|
87
|
+
# Inserts a middleware at the given index or directly before the given middleware object.
|
89
88
|
def insert(index, middleware, *args, &block)
|
90
89
|
index = self.index(index) unless index.is_a?(Integer)
|
91
90
|
fail "no such middleware to insert before: #{index.inspect}" unless index
|
@@ -115,16 +114,12 @@ module Middleware
|
|
115
114
|
end
|
116
115
|
end
|
117
116
|
|
118
|
-
# Replaces the given middleware object or index with the new
|
119
|
-
# middleware.
|
117
|
+
# Replaces the given middleware object or index with the new middleware.
|
120
118
|
def replace(index, middleware, *args, &block)
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
insert_before(index, middleware, *args, &block)
|
126
|
-
delete(index)
|
127
|
-
end
|
119
|
+
index = self.index index unless index.is_a? Integer
|
120
|
+
|
121
|
+
delete(index)
|
122
|
+
insert(index, middleware, *args, &block)
|
128
123
|
end
|
129
124
|
|
130
125
|
# Deletes the given middleware object or index
|
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).
|