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