rails-patterns 0.9.0 → 0.10.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/README.md +9 -9
- data/VERSION +1 -1
- data/lib/patterns/rule.rb +20 -18
- data/lib/patterns/ruleset.rb +51 -49
- data/lib/patterns/strong_ruleset.rb +13 -11
- data/rails-patterns.gemspec +3 -3
- data/spec/patterns/rule_spec.rb +5 -5
- data/spec/patterns/ruleset_spec.rb +18 -18
- data/spec/patterns/strong_ruleset_spec.rb +7 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz: '
|
3
|
+
metadata.gz: acffaa9187d107e66c029e063f1d9cd5fbb2a3f16af7c2f747f166bc3bafab64
|
4
|
+
data.tar.gz: '014944374d20b4e6113c2946e25c963aaebd5841dad52cf960f85896c29930e5'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: def79504af62d2295806ab1a6e35261ad413d9205cfe36c41d4ae110068cfb5afe267aee4b194dbe2199616ca2ca976d6ffc63d5ca2166875b73d80c1e3fc9df
|
7
|
+
data.tar.gz: 84033ea6eb230ddf0436bda70889f4f62d46bb734d490635f564232b00bd199cdca595729e0eddae5055679e6575debcc19ed0385236e47b01b253510c86df8c
|
data/README.md
CHANGED
@@ -24,11 +24,11 @@ gem "rails-patterns"
|
|
24
24
|
Then `bundle install`
|
25
25
|
|
26
26
|
## Query
|
27
|
-
|
27
|
+
|
28
28
|
### When to use it
|
29
29
|
|
30
|
-
One should consider using query objects pattern when in need to perform complex querying on active record relation.
|
31
|
-
Usually one should avoid using scopes for such purpose.
|
30
|
+
One should consider using query objects pattern when in need to perform complex querying on active record relation.
|
31
|
+
Usually one should avoid using scopes for such purpose.
|
32
32
|
As a rule of thumb, if scope interacts with more than one column and/or joins in other tables, it should be moved to query object.
|
33
33
|
Also whenever a chain of scopes is to be used, one should consider using query object too.
|
34
34
|
Some more information on using query objects can be found in [this article](https://medium.com/@blazejkosmowski/essential-rubyonrails-patterns-part-2-query-objects-4b253f4f4539).
|
@@ -98,9 +98,9 @@ Service objects are also useful for handling processes involving multiple steps.
|
|
98
98
|
* It is recommended for `#call` method to be the only public method of service object (besides state readers)
|
99
99
|
* It is recommended to name service object classes after commands (e.g. `ActivateUser` instead of `UserActivation`)
|
100
100
|
|
101
|
-
### Other
|
101
|
+
### Other
|
102
102
|
|
103
|
-
A bit higher level of abstraction is provided by [business_process gem](https://github.com/Selleo/business_process).
|
103
|
+
A bit higher level of abstraction is provided by [business_process gem](https://github.com/Selleo/business_process).
|
104
104
|
|
105
105
|
### Examples
|
106
106
|
|
@@ -396,13 +396,13 @@ However, from the actual usage perspective, it usually easier to conceptually de
|
|
396
396
|
#### Declaration
|
397
397
|
|
398
398
|
```ruby
|
399
|
-
class OrderIsSentRule < Rule
|
399
|
+
class OrderIsSentRule < Patterns::Rule
|
400
400
|
def satisfied?
|
401
401
|
subject.sent?
|
402
402
|
end
|
403
403
|
end
|
404
404
|
|
405
|
-
class OrderIsPaidRule < Rule
|
405
|
+
class OrderIsPaidRule < Patterns::Rule
|
406
406
|
def satisfied?
|
407
407
|
subject.paid?
|
408
408
|
end
|
@@ -412,7 +412,7 @@ class OrderIsPaidRule < Rule
|
|
412
412
|
end
|
413
413
|
end
|
414
414
|
|
415
|
-
OrderCompletedNotificationRuleset = Class.new(Ruleset)
|
415
|
+
OrderCompletedNotificationRuleset = Class.new(Patterns::Ruleset)
|
416
416
|
OrderCompletedNotificationRuleset.
|
417
417
|
add_rule(:order_is_sent_rule).
|
418
418
|
add_rule(:order_is_paid_rule)
|
@@ -437,4 +437,4 @@ ResendOrderNotification.call(order) if OrderCompletedNotificationRuleset.new(ord
|
|
437
437
|
|
438
438
|
Software development teams with an entrepreneurial sense of ownership at their core delivering great digital products and building culture people want to belong to. We are a community of engaged co-workers passionate about crafting impactful web solutions which transform the way our clients do business.
|
439
439
|
|
440
|
-
All names and logos for [Selleo](https://selleo.com/about) are trademark of Selleo
|
440
|
+
All names and logos for [Selleo](https://selleo.com/about) are trademark of Selleo Labs Sp. z o.o. (formerly Selleo Sp. z o.o. Sp.k.)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.10.0
|
data/lib/patterns/rule.rb
CHANGED
@@ -1,25 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Patterns
|
2
|
+
class Rule
|
3
|
+
def initialize(subject)
|
4
|
+
@subject = subject
|
5
|
+
end
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
def satisfied?
|
8
|
+
raise NotImplementedError
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
def not_applicable?
|
12
|
+
false
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
def applicable?
|
16
|
+
!not_applicable?
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def forceable?
|
20
|
+
true
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
+
private
|
23
24
|
|
24
|
-
|
25
|
+
attr_reader :subject
|
26
|
+
end
|
25
27
|
end
|
data/lib/patterns/ruleset.rb
CHANGED
@@ -1,69 +1,71 @@
|
|
1
|
-
|
2
|
-
class
|
1
|
+
module Patterns
|
2
|
+
class Ruleset
|
3
|
+
class EmptyRuleset < StandardError; end
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
class << self
|
6
|
+
attr_accessor :rule_names
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
def self.rules
|
10
|
+
(rule_names || []).map do |rule_name|
|
11
|
+
rule_name.to_s.classify.constantize
|
12
|
+
end
|
11
13
|
end
|
12
|
-
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
def self.add_rule(rule_name)
|
16
|
+
self.rule_names ||= []
|
17
|
+
self.rule_names << rule_name.to_sym
|
18
|
+
self
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
def initialize(subject = nil)
|
22
|
+
raise EmptyRuleset if self.class.rules.empty?
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
@rules = self.class.rules.map { |rule| rule.new(subject) }
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
def satisfied?(force: false)
|
28
|
+
rules.all? do |rule|
|
29
|
+
rule.satisfied? ||
|
30
|
+
rule.not_applicable? ||
|
31
|
+
(force && rule.forceable?)
|
32
|
+
end
|
31
33
|
end
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
def not_satisfied?
|
36
|
+
!satisfied?
|
37
|
+
end
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
def applicable?
|
40
|
+
!not_applicable?
|
41
|
+
end
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
def not_applicable?
|
44
|
+
rules.all?(&:not_applicable?)
|
45
|
+
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
def forceable?
|
48
|
+
rules.all? do |rule|
|
49
|
+
rule.forceable? ||
|
50
|
+
rule.not_applicable? ||
|
51
|
+
rule.satisfied?
|
52
|
+
end
|
51
53
|
end
|
52
|
-
end
|
53
54
|
|
54
|
-
|
55
|
-
|
55
|
+
def each(&block)
|
56
|
+
return enum_for(:each) unless block_given?
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
rules.each do |rule_or_ruleset|
|
59
|
+
if rule_or_ruleset.is_a?(Ruleset)
|
60
|
+
rule_or_ruleset.each(&block)
|
61
|
+
else
|
62
|
+
yield rule_or_ruleset
|
63
|
+
end
|
62
64
|
end
|
63
65
|
end
|
64
|
-
end
|
65
66
|
|
66
|
-
|
67
|
+
private
|
67
68
|
|
68
|
-
|
69
|
+
attr_reader :rules
|
70
|
+
end
|
69
71
|
end
|
@@ -1,19 +1,21 @@
|
|
1
1
|
# StrongRuleset is not satisfied and not forceable if any of rules is not applicable
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Patterns
|
4
|
+
class StrongRuleset < Ruleset
|
5
|
+
def satisfied?(force: false)
|
6
|
+
rules.all? do |rule|
|
7
|
+
(rule.applicable? && rule.satisfied?) || (force && rule.forceable?)
|
8
|
+
end
|
7
9
|
end
|
8
|
-
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
def not_applicable?
|
12
|
+
rules.any?(&:not_applicable?)
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
def forceable?
|
16
|
+
rules.all? do |rule|
|
17
|
+
(rule.applicable? && rule.forceable?) || rule.satisfied?
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
data/rails-patterns.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: rails-patterns 0.
|
5
|
+
# stub: rails-patterns 0.10.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "rails-patterns".freeze
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.10.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Stevo".freeze]
|
14
|
-
s.date = "2021-
|
14
|
+
s.date = "2021-12-10"
|
15
15
|
s.description = "A collection of lightweight, standardized, rails-oriented patterns.".freeze
|
16
16
|
s.email = "b.kosmowski@selleo.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
data/spec/patterns/rule_spec.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
RSpec.describe Rule do
|
1
|
+
RSpec.describe Patterns::Rule do
|
2
2
|
after(:each) do
|
3
3
|
Object.send(:remove_const, :CustomRule) if defined?(CustomRule)
|
4
4
|
end
|
5
5
|
|
6
6
|
it 'requires subject as the first argument' do
|
7
|
-
CustomRule = Class.new(Rule)
|
7
|
+
CustomRule = Class.new(Patterns::Rule)
|
8
8
|
|
9
9
|
expect { CustomRule.new }.to raise_error ArgumentError
|
10
10
|
expect { CustomRule.new(Object.new) }.not_to raise_error
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'requires #satisfied? method to be defined' do
|
14
|
-
InvalidCustomRule = Class.new(Rule)
|
15
|
-
CustomRule = Class.new(Rule) do
|
14
|
+
InvalidCustomRule = Class.new(Patterns::Rule)
|
15
|
+
CustomRule = Class.new(Patterns::Rule) do
|
16
16
|
def satisfied?
|
17
17
|
true
|
18
18
|
end
|
@@ -27,7 +27,7 @@ RSpec.describe Rule do
|
|
27
27
|
it 'returns true' do
|
28
28
|
article = OpenStruct.new('published?' => true, 'deleted?' => false)
|
29
29
|
|
30
|
-
ArticleIsPublishedRule = Class.new(Rule) do
|
30
|
+
ArticleIsPublishedRule = Class.new(Patterns::Rule) do
|
31
31
|
def satisfied?
|
32
32
|
subject.published?
|
33
33
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
RSpec.describe Ruleset do
|
1
|
+
RSpec.describe Patterns::Ruleset do
|
2
2
|
context 'when empty ruleset is initialized' do
|
3
3
|
it 'raises an error' do
|
4
|
-
empty_ruleset_klass = Class.new(Ruleset)
|
5
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
4
|
+
empty_ruleset_klass = Class.new(Patterns::Ruleset)
|
5
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
6
6
|
subject = double
|
7
7
|
|
8
8
|
with_mocked_rules do |rules|
|
@@ -12,7 +12,7 @@ RSpec.describe Ruleset do
|
|
12
12
|
expect { custom_ruleset_klass.new(subject) }.not_to raise_error
|
13
13
|
end
|
14
14
|
|
15
|
-
expect { empty_ruleset_klass.new(subject) }.to raise_error Ruleset::EmptyRuleset
|
15
|
+
expect { empty_ruleset_klass.new(subject) }.to raise_error Patterns::Ruleset::EmptyRuleset
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -24,7 +24,7 @@ RSpec.describe Ruleset do
|
|
24
24
|
rules << mock_rule(:rule_1, is_forceable: true)
|
25
25
|
rules << mock_rule(:rule_2, is_forceable: true)
|
26
26
|
|
27
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
27
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
28
28
|
custom_ruleset_klass.add_rule(:rule_1)
|
29
29
|
custom_ruleset_klass.add_rule(:rule_2)
|
30
30
|
|
@@ -40,7 +40,7 @@ RSpec.describe Ruleset do
|
|
40
40
|
rules << mock_rule(:rule_1, is_forceable: false, is_satisfied: false, is_applicable: true)
|
41
41
|
rules << mock_rule(:rule_2, is_forceable: true)
|
42
42
|
|
43
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
43
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
44
44
|
custom_ruleset_klass.add_rule(:rule_1)
|
45
45
|
custom_ruleset_klass.add_rule(:rule_2)
|
46
46
|
|
@@ -60,7 +60,7 @@ RSpec.describe Ruleset do
|
|
60
60
|
)
|
61
61
|
rules << mock_rule(:rule_2, is_forceable: true)
|
62
62
|
|
63
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
63
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
64
64
|
custom_ruleset_klass.add_rule(:rule_1)
|
65
65
|
custom_ruleset_klass.add_rule(:rule_2)
|
66
66
|
|
@@ -81,7 +81,7 @@ RSpec.describe Ruleset do
|
|
81
81
|
)
|
82
82
|
rules << mock_rule(:rule_2, is_forceable: true)
|
83
83
|
|
84
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
84
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
85
85
|
custom_ruleset_klass.add_rule(:rule_1)
|
86
86
|
custom_ruleset_klass.add_rule(:rule_2)
|
87
87
|
|
@@ -100,7 +100,7 @@ RSpec.describe Ruleset do
|
|
100
100
|
rules << mock_rule(:rule_1, is_applicable: false)
|
101
101
|
rules << mock_rule(:rule_2, is_applicable: false)
|
102
102
|
|
103
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
103
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
104
104
|
custom_ruleset_klass.add_rule(:rule_1)
|
105
105
|
custom_ruleset_klass.add_rule(:rule_2)
|
106
106
|
|
@@ -116,7 +116,7 @@ RSpec.describe Ruleset do
|
|
116
116
|
rules << mock_rule(:rule_1, is_applicable: false)
|
117
117
|
rules << mock_rule(:rule_2, is_applicable: true)
|
118
118
|
|
119
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
119
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
120
120
|
custom_ruleset_klass.add_rule(:rule_1)
|
121
121
|
custom_ruleset_klass.add_rule(:rule_2)
|
122
122
|
|
@@ -134,7 +134,7 @@ RSpec.describe Ruleset do
|
|
134
134
|
rules << mock_rule(:rule_1)
|
135
135
|
rules << mock_rule(:rule_2)
|
136
136
|
|
137
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
137
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
138
138
|
custom_ruleset_klass.add_rule(:rule_1)
|
139
139
|
custom_ruleset_klass.add_rule(:rule_2)
|
140
140
|
|
@@ -150,7 +150,7 @@ RSpec.describe Ruleset do
|
|
150
150
|
rules << mock_rule(:rule_1)
|
151
151
|
rules << mock_rule(:rule_2, is_satisfied: false)
|
152
152
|
|
153
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
153
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
154
154
|
custom_ruleset_klass.add_rule(:rule_1)
|
155
155
|
custom_ruleset_klass.add_rule(:rule_2)
|
156
156
|
|
@@ -165,7 +165,7 @@ RSpec.describe Ruleset do
|
|
165
165
|
rules << mock_rule(:rule_1)
|
166
166
|
rules << mock_rule(:rule_2, is_satisfied: false, is_applicable: false)
|
167
167
|
|
168
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
168
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
169
169
|
custom_ruleset_klass.add_rule(:rule_1)
|
170
170
|
custom_ruleset_klass.add_rule(:rule_2)
|
171
171
|
|
@@ -182,7 +182,7 @@ RSpec.describe Ruleset do
|
|
182
182
|
rules << mock_rule(:rule_1)
|
183
183
|
rules << mock_rule(:rule_2, is_satisfied: false, is_forceable: true)
|
184
184
|
|
185
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
185
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
186
186
|
custom_ruleset_klass.add_rule(:rule_1)
|
187
187
|
custom_ruleset_klass.add_rule(:rule_2)
|
188
188
|
|
@@ -198,7 +198,7 @@ RSpec.describe Ruleset do
|
|
198
198
|
rules << mock_rule(:rule_1)
|
199
199
|
rules << mock_rule(:rule_2, is_satisfied: false, is_forceable: false)
|
200
200
|
|
201
|
-
custom_ruleset_klass = Class.new(Ruleset)
|
201
|
+
custom_ruleset_klass = Class.new(Patterns::Ruleset)
|
202
202
|
custom_ruleset_klass.add_rule(:rule_1)
|
203
203
|
custom_ruleset_klass.add_rule(:rule_2)
|
204
204
|
|
@@ -216,10 +216,10 @@ RSpec.describe Ruleset do
|
|
216
216
|
rules << (_, rule_1 = mock_rule(:rule_1))
|
217
217
|
rules << (_, rule_2 = mock_rule(:rule_2))
|
218
218
|
rules << (_, rule_3 = mock_rule(:rule_3))
|
219
|
-
custom_ruleset_klass_1 = Class.new(Ruleset)
|
219
|
+
custom_ruleset_klass_1 = Class.new(Patterns::Ruleset)
|
220
220
|
custom_ruleset_klass_1.add_rule(:rule_1)
|
221
221
|
custom_ruleset_klass_1.add_rule(:rule_2)
|
222
|
-
Ruleset2 = Class.new(Ruleset)
|
222
|
+
Ruleset2 = Class.new(Patterns::Ruleset)
|
223
223
|
Ruleset2.add_rule(:rule_3)
|
224
224
|
custom_ruleset_klass_1.add_rule(:ruleset_2)
|
225
225
|
|
@@ -235,7 +235,7 @@ RSpec.describe Ruleset do
|
|
235
235
|
private
|
236
236
|
|
237
237
|
def mock_rule(rule_name, is_applicable: true, is_satisfied: true, is_forceable: true)
|
238
|
-
klass = Object.const_set(rule_name.to_s.classify, Class.new(Rule))
|
238
|
+
klass = Object.const_set(rule_name.to_s.classify, Class.new(Patterns::Rule))
|
239
239
|
rule = double(
|
240
240
|
not_applicable?: !is_applicable,
|
241
241
|
satisfied?: is_satisfied,
|
@@ -1,7 +1,7 @@
|
|
1
|
-
RSpec.describe StrongRuleset do
|
1
|
+
RSpec.describe Patterns::StrongRuleset do
|
2
2
|
it 'inherites from Ruleset' do
|
3
|
-
custom_strong_ruleset_klass = Class.new(StrongRuleset)
|
4
|
-
expect(custom_strong_ruleset_klass.ancestors).to include Ruleset
|
3
|
+
custom_strong_ruleset_klass = Class.new(Patterns::StrongRuleset)
|
4
|
+
expect(custom_strong_ruleset_klass.ancestors).to include Patterns::Ruleset
|
5
5
|
end
|
6
6
|
|
7
7
|
context 'when any of rules is not applicable' do
|
@@ -11,7 +11,7 @@ RSpec.describe StrongRuleset do
|
|
11
11
|
rules << mock_rule(:rule_1, is_applicable: false)
|
12
12
|
rules << mock_rule(:rule_2)
|
13
13
|
|
14
|
-
custom_ruleset_klass = Class.new(StrongRuleset)
|
14
|
+
custom_ruleset_klass = Class.new(Patterns::StrongRuleset)
|
15
15
|
custom_ruleset_klass.add_rule(:rule_1)
|
16
16
|
custom_ruleset_klass.add_rule(:rule_2)
|
17
17
|
|
@@ -26,7 +26,7 @@ RSpec.describe StrongRuleset do
|
|
26
26
|
rules << mock_rule(:rule_1, is_applicable: false, is_satisfied: false)
|
27
27
|
rules << mock_rule(:rule_2)
|
28
28
|
|
29
|
-
custom_ruleset_klass = Class.new(StrongRuleset)
|
29
|
+
custom_ruleset_klass = Class.new(Patterns::StrongRuleset)
|
30
30
|
custom_ruleset_klass.add_rule(:rule_1)
|
31
31
|
custom_ruleset_klass.add_rule(:rule_2)
|
32
32
|
|
@@ -41,7 +41,7 @@ RSpec.describe StrongRuleset do
|
|
41
41
|
rules << mock_rule(:rule_1, is_applicable: false)
|
42
42
|
rules << mock_rule(:rule_2)
|
43
43
|
|
44
|
-
custom_ruleset_klass = Class.new(StrongRuleset)
|
44
|
+
custom_ruleset_klass = Class.new(Patterns::StrongRuleset)
|
45
45
|
custom_ruleset_klass.add_rule(:rule_1)
|
46
46
|
custom_ruleset_klass.add_rule(:rule_2)
|
47
47
|
|
@@ -53,7 +53,7 @@ RSpec.describe StrongRuleset do
|
|
53
53
|
private
|
54
54
|
|
55
55
|
def mock_rule(rule_name, is_applicable: true, is_satisfied: true, is_forceable: true)
|
56
|
-
klass = Object.const_set(rule_name.to_s.classify, Class.new(Rule))
|
56
|
+
klass = Object.const_set(rule_name.to_s.classify, Class.new(Patterns::Rule))
|
57
57
|
rule = double(
|
58
58
|
not_applicable?: !is_applicable,
|
59
59
|
applicable?: is_applicable,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-patterns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stevo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|