meddleware 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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