meddleware 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: af421278a6c18f72f28e6ad86e214bcbaab0e77cc9e77a58db94493045be3bf7
4
+ data.tar.gz: 912d29bc7b291ad682cdf7aadcfd05631aec896cc578957048f233478f5cbb2f
5
+ SHA512:
6
+ metadata.gz: 0b792cee28734eeea2b632d17e45ec139b92eaeb8dc8e5d9421dd27ebf54f62dbbf63453b526d50c483406f502dfff696785ea37a31ecbc988a295333b5c728f
7
+ data.tar.gz: b854aa5aa9dee535ea746ac333dcbfd222a0a11dbc36d6262e96fe2930ef8827a5c93c08afb41d38564b79079d43d03b2225d8e0b87cbe7ce63c1ac5b1705965
data/lib/meddleware.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'meddleware/version'
2
+
3
+ class Meddleware
4
+ include Enumerable
5
+
6
+ def initialize
7
+ instance_eval(&block) if block_given?
8
+ end
9
+
10
+ def each(&block)
11
+ stack.each(&block)
12
+ end
13
+
14
+ def index(klass)
15
+ stack.index {|entry| entry.klass == klass }
16
+ end
17
+
18
+ def remove(klass)
19
+ stack.reject! { |entry| entry.klass == klass }
20
+ end
21
+
22
+ def use(klass, *args)
23
+ remove(klass)
24
+ stack << Entry.new(klass, args)
25
+ end
26
+ alias append use
27
+
28
+ def prepend(klass, *args)
29
+ remove(klass)
30
+ stack.insert(0, Entry.new(klass, args))
31
+ end
32
+
33
+ def after(after_klass, klass, *args)
34
+ remove(klass)
35
+ i = index(after_klass) || count - 1
36
+ stack.insert(i + 1, Entry.new(klass, args))
37
+ end
38
+
39
+ def before(before_klass, klass, *args)
40
+ remove(klass)
41
+ i = index(before_klass) || 0
42
+ stack.insert(i, Entry.new(klass, args))
43
+ end
44
+
45
+ def empty?
46
+ stack.empty?
47
+ end
48
+
49
+ def clear
50
+ stack.clear
51
+ end
52
+
53
+ def call(*args, &block)
54
+ chain = map(&:build)
55
+ traverse = proc do |*updated_args|
56
+ args = updated_args unless updated_args.empty?
57
+ if chain.empty?
58
+ yield *args
59
+ else
60
+ chain.shift.call(*args, &traverse)
61
+ end
62
+ end
63
+ traverse.call(*args)
64
+ end
65
+
66
+ private
67
+
68
+ def stack
69
+ @stack ||= []
70
+ end
71
+
72
+ Entry = Struct.new(:klass, :args) do
73
+ def build
74
+ klass.new(*args)
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,3 @@
1
+ class Meddleware
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,3 @@
1
+ describe Meddleware do
2
+
3
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: meddleware
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Pepper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: byebug
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
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'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: work...within limits
84
+ email:
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/meddleware.rb
90
+ - lib/meddleware/version.rb
91
+ - spec/meddleware_spec.rb
92
+ homepage: https://github.com/dpep/meddleware_rb
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubygems_version: 3.0.8
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Meddleware
115
+ test_files:
116
+ - spec/meddleware_spec.rb