meddleware 0.2.0 → 0.4.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 +4 -4
- data/CHANGELOG.md +36 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +42 -0
- data/LICENSE.txt +21 -0
- data/README.md +145 -0
- data/lib/meddleware/stack.rb +187 -0
- data/lib/meddleware/version.rb +2 -2
- data/lib/meddleware.rb +15 -178
- data/meddleware.gemspec +19 -0
- metadata +22 -54
- data/lib/meddleware/v2_5.rb +0 -143
- data/spec/build_meddleware_spec.rb +0 -479
- data/spec/call_meddleware_chain_spec.rb +0 -74
- data/spec/call_meddleware_spec.rb +0 -266
- data/spec/readme/full_example_spec.rb +0 -60
- data/spec/readme/usage_spec.rb +0 -47
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.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Pepper
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -16,89 +16,62 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '11'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: codecov
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
26
|
+
version: '11'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: rspec
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
58
30
|
requirements:
|
59
31
|
- - ">="
|
60
32
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
33
|
+
version: '3.13'
|
62
34
|
type: :development
|
63
35
|
prerelease: false
|
64
36
|
version_requirements: !ruby/object:Gem::Requirement
|
65
37
|
requirements:
|
66
38
|
- - ">="
|
67
39
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
40
|
+
version: '3.13'
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: simplecov
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
45
|
- - ">="
|
74
46
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
47
|
+
version: '0.22'
|
76
48
|
type: :development
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
52
|
- - ">="
|
81
53
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
54
|
+
version: '0.22'
|
83
55
|
description: A middleware framework to make meddling easy.
|
84
|
-
email:
|
56
|
+
email:
|
85
57
|
executables: []
|
86
58
|
extensions: []
|
87
59
|
extra_rdoc_files: []
|
88
60
|
files:
|
61
|
+
- CHANGELOG.md
|
62
|
+
- Gemfile
|
63
|
+
- Gemfile.lock
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
89
66
|
- lib/meddleware.rb
|
90
|
-
- lib/meddleware/
|
67
|
+
- lib/meddleware/stack.rb
|
91
68
|
- lib/meddleware/version.rb
|
92
|
-
-
|
93
|
-
- spec/call_meddleware_chain_spec.rb
|
94
|
-
- spec/call_meddleware_spec.rb
|
95
|
-
- spec/readme/full_example_spec.rb
|
96
|
-
- spec/readme/usage_spec.rb
|
69
|
+
- meddleware.gemspec
|
97
70
|
homepage: https://github.com/dpep/meddleware_rb
|
98
71
|
licenses:
|
99
72
|
- MIT
|
100
73
|
metadata: {}
|
101
|
-
post_install_message:
|
74
|
+
post_install_message:
|
102
75
|
rdoc_options: []
|
103
76
|
require_paths:
|
104
77
|
- lib
|
@@ -106,20 +79,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
79
|
requirements:
|
107
80
|
- - ">="
|
108
81
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
82
|
+
version: '3'
|
110
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
84
|
requirements:
|
112
85
|
- - ">="
|
113
86
|
- !ruby/object:Gem::Version
|
114
87
|
version: '0'
|
115
88
|
requirements: []
|
116
|
-
rubygems_version: 3.0.
|
117
|
-
signing_key:
|
89
|
+
rubygems_version: 3.0.3.1
|
90
|
+
signing_key:
|
118
91
|
specification_version: 4
|
119
92
|
summary: Meddleware
|
120
|
-
test_files:
|
121
|
-
- spec/call_meddleware_spec.rb
|
122
|
-
- spec/readme/usage_spec.rb
|
123
|
-
- spec/readme/full_example_spec.rb
|
124
|
-
- spec/call_meddleware_chain_spec.rb
|
125
|
-
- spec/build_meddleware_spec.rb
|
93
|
+
test_files: []
|
data/lib/meddleware/v2_5.rb
DELETED
@@ -1,143 +0,0 @@
|
|
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
|