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.
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.2.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: 2021-09-14 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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/v2_5.rb
67
+ - lib/meddleware/stack.rb
91
68
  - lib/meddleware/version.rb
92
- - spec/build_meddleware_spec.rb
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: '2.5'
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.8
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: []
@@ -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