torm 0.2.1 → 0.3.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/Changelog.md +7 -0
- data/lib/torm.rb +1 -1
- data/lib/torm/rules_engine.rb +2 -2
- data/lib/torm/version.rb +1 -1
- data/test/minitest_helper.rb +0 -1
- data/test/torm/rules_engine_test.rb +29 -29
- data/test/torm/tools_test.rb +4 -4
- data/torm.gemspec +2 -2
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1c93ee06d4f1dc8fbbd1d10d2e248edd4c3c77f10f1440a2f56c1bae183068a
|
4
|
+
data.tar.gz: e39bebc512d7df97ed2e818b629d0cdde0764da3a28f8607294d8c6b2d4e04b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 842b9f9a5818c1d2dddb7c39703e3d4c44a792b17ecb366348ec8a74a654fc27a638c865a0b75f372e96da662f6da86fc396c6a1fe11f165ee083d74a0f06686
|
7
|
+
data.tar.gz: e8fedbdef0cfe257c5c8e11c676c9fef2e721f991958e8ca8e06a0e0d7bc1e49d204b6402fba86034fbb8954fe1dc4fca2a88989ca10061a73a89008eb1bb33e
|
data/Changelog.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
## Version 0.3.0 (dev)
|
4
4
|
|
5
|
+
- Update minitest requirement from ~> 4.0 to ~> 5.12 (905e9f7)
|
6
|
+
- Refactor: replace accessor with writer (24f4594)
|
7
|
+
- Refactor: fixed minitest deprecation warnings (aa1c586)
|
8
|
+
- Refactor: splat keyword args (ff7c160)
|
9
|
+
- Change: Ruby 3.0 is supported (f28bcc1)
|
10
|
+
- Fixed circular loading warning from minitest (8f4535b)
|
11
|
+
|
5
12
|
## Version 0.2.1
|
6
13
|
|
7
14
|
This version was in "development" between 2014 and 2021.
|
data/lib/torm.rb
CHANGED
data/lib/torm/rules_engine.rb
CHANGED
@@ -60,7 +60,7 @@ module Torm
|
|
60
60
|
|
61
61
|
# @yield [Torm::RulesEngine::RulesVariationHelper]
|
62
62
|
def conditions(**conditions)
|
63
|
-
engine = self.class.new(@engine, @name,
|
63
|
+
engine = self.class.new(@engine, @name, **@conditions.merge(conditions))
|
64
64
|
yield engine
|
65
65
|
nil
|
66
66
|
end
|
@@ -128,7 +128,7 @@ module Torm
|
|
128
128
|
data = {
|
129
129
|
policies: dump['policies'].map(&:to_sym),
|
130
130
|
}
|
131
|
-
engine = new(data)
|
131
|
+
engine = new(**data)
|
132
132
|
dump['rules'].each do |name, rules|
|
133
133
|
rules.each do |rule|
|
134
134
|
value = rule['value']
|
data/lib/torm/version.rb
CHANGED
data/test/minitest_helper.rb
CHANGED
@@ -12,18 +12,18 @@ describe Torm::RulesEngine do
|
|
12
12
|
|
13
13
|
it 'should pick the default without any conditions' do
|
14
14
|
# This means it should *not* apply rules which only apply to conditions we don't have
|
15
|
-
engine.decide('show unsubscribe link').must_equal false
|
15
|
+
_(engine.decide('show unsubscribe link')).must_equal false
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should pick a specific rule over the default' do
|
19
|
-
engine.decide('show unsubscribe link', country: 'FR').must_equal true
|
19
|
+
_(engine.decide('show unsubscribe link', country: 'FR')).must_equal true
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should ignore conditions which do not match' do
|
23
|
-
engine.decide('show unsubscribe link', country: 'NL', happy: true, season: :summer).must_equal false
|
23
|
+
_(engine.decide('show unsubscribe link', country: 'NL', happy: true, season: :summer)).must_equal false
|
24
24
|
|
25
25
|
engine.add_rule 'show unsubscribe link', true, :default, season: :summer
|
26
|
-
engine.decide('show unsubscribe link', country: 'NL', happy: true, season: :summer).must_equal true
|
26
|
+
_(engine.decide('show unsubscribe link', country: 'NL', happy: true, season: :summer)).must_equal true
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -37,19 +37,19 @@ describe Torm::RulesEngine do
|
|
37
37
|
engine.add_rule 'FSK level', { maximum: 12 }, :law, country: 'TR'
|
38
38
|
|
39
39
|
# Default
|
40
|
-
engine.decide('FSK level').must_equal({ maximum: 18 })
|
40
|
+
_(engine.decide('FSK level')).must_equal({ maximum: 18 })
|
41
41
|
# Default
|
42
|
-
engine.decide('FSK level', country: 'NL').must_equal({ maximum: 18 })
|
42
|
+
_(engine.decide('FSK level', country: 'NL')).must_equal({ maximum: 18 })
|
43
43
|
# CoC for DE
|
44
|
-
engine.decide('FSK level', country: 'DE').must_equal({ maximum: 16 })
|
44
|
+
_(engine.decide('FSK level', country: 'DE')).must_equal({ maximum: 16 })
|
45
45
|
# ref=google
|
46
|
-
engine.decide('FSK level', country: 'NL', referrer: 'google').must_equal({ maximum: 16 })
|
46
|
+
_(engine.decide('FSK level', country: 'NL', referrer: 'google')).must_equal({ maximum: 16 })
|
47
47
|
|
48
48
|
# should start with 12+ for TR, and not modify it to 16+ for ref=google
|
49
|
-
engine.decide('FSK level', country: 'TR', referrer: 'google').must_equal({ maximum: 12 })
|
49
|
+
_(engine.decide('FSK level', country: 'TR', referrer: 'google')).must_equal({ maximum: 12 })
|
50
50
|
|
51
51
|
# should start with 16+ for FR, but tighten it to 12+ for ref=disney
|
52
|
-
engine.decide('FSK level', country: 'FR', referrer: 'disney').must_equal({ maximum: 12 })
|
52
|
+
_(engine.decide('FSK level', country: 'FR', referrer: 'disney')).must_equal({ maximum: 12 })
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should support minimum' do
|
@@ -60,15 +60,15 @@ describe Torm::RulesEngine do
|
|
60
60
|
|
61
61
|
|
62
62
|
# Query individual FSK thresholds
|
63
|
-
engine.decide('FSK level').must_equal({ minimum: 1 })
|
64
|
-
engine.decide('FSK level', sexy: true).must_equal({ minimum: 12 })
|
65
|
-
engine.decide('FSK level', softcore: true).must_equal({ minimum: 16 })
|
66
|
-
engine.decide('FSK level', hardcore: true).must_equal({ minimum: 18 })
|
63
|
+
_(engine.decide('FSK level')).must_equal({ minimum: 1 })
|
64
|
+
_(engine.decide('FSK level', sexy: true)).must_equal({ minimum: 12 })
|
65
|
+
_(engine.decide('FSK level', softcore: true)).must_equal({ minimum: 16 })
|
66
|
+
_(engine.decide('FSK level', hardcore: true)).must_equal({ minimum: 18 })
|
67
67
|
|
68
68
|
# Combine multiple FSK threshold
|
69
69
|
#engine.verbose = true
|
70
|
-
engine.decide('FSK level', hardcore: true, sexy: true).must_equal({ minimum: 18 })
|
71
|
-
engine.decide('FSK level', softcore: true, sexy: true).must_equal({ minimum: 16 })
|
70
|
+
_(engine.decide('FSK level', hardcore: true, sexy: true)).must_equal({ minimum: 18 })
|
71
|
+
_(engine.decide('FSK level', softcore: true, sexy: true)).must_equal({ minimum: 16 })
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'should combine minimum and maximum' do
|
@@ -83,12 +83,12 @@ describe Torm::RulesEngine do
|
|
83
83
|
engine.add_rule 'FSK level', { minimum: 16 }, :default, softcore: true
|
84
84
|
engine.add_rule 'FSK level', { minimum: 18 }, :default, hardcore: true
|
85
85
|
|
86
|
-
engine.decide('FSK level', country: 'NL').must_equal({ minimum: 1, maximum: 18 })
|
87
|
-
engine.decide('FSK level', country: 'FR').must_equal({ minimum: 1, maximum: 16 })
|
88
|
-
engine.decide('FSK level', country: 'FR', sexy: true).must_equal({ minimum: 12, maximum: 16 })
|
86
|
+
_(engine.decide('FSK level', country: 'NL')).must_equal({ minimum: 1, maximum: 18 })
|
87
|
+
_(engine.decide('FSK level', country: 'FR')).must_equal({ minimum: 1, maximum: 16 })
|
88
|
+
_(engine.decide('FSK level', country: 'FR', sexy: true)).must_equal({ minimum: 12, maximum: 16 })
|
89
89
|
|
90
90
|
# Return nil because of conflicting requirements: softcore is 16+, TR is 12-
|
91
|
-
engine.decide('FSK level', country: 'TR', softcore: true)
|
91
|
+
assert_nil engine.decide('FSK level', country: 'TR', softcore: true)
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'should allow range syntax' do
|
@@ -96,8 +96,8 @@ describe Torm::RulesEngine do
|
|
96
96
|
engine.add_rule 'FSK level', { maximum: 16 }, :coc, country: 'FR'
|
97
97
|
engine.add_rule 'FSK level', { minimum: 12 }, :default, sexy: true
|
98
98
|
|
99
|
-
engine.decide('FSK level', country: 'NL').must_equal({ minimum: 1, maximum: 18 })
|
100
|
-
engine.decide('FSK level', country: 'FR', sexy: true).must_equal({ minimum: 12, maximum: 16 })
|
99
|
+
_(engine.decide('FSK level', country: 'NL')).must_equal({ minimum: 1, maximum: 18 })
|
100
|
+
_(engine.decide('FSK level', country: 'FR', sexy: true)).must_equal({ minimum: 12, maximum: 16 })
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -158,9 +158,9 @@ describe Torm::RulesEngine do
|
|
158
158
|
]
|
159
159
|
}
|
160
160
|
}
|
161
|
-
engine.as_hash.must_equal rule_hash
|
161
|
+
_(engine.as_hash).must_equal rule_hash
|
162
162
|
|
163
|
-
engine.to_json.must_equal MultiJson.dump(engine.as_hash)
|
163
|
+
_(engine.to_json).must_equal MultiJson.dump(engine.as_hash)
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
@@ -170,14 +170,14 @@ describe Torm::RulesEngine do
|
|
170
170
|
engine.add_rule 'FSK level', { maximum: 16 }, :coc, country: 'FR'
|
171
171
|
engine.add_rule 'FSK level', { minimum: 12 }, :default, sexy: true
|
172
172
|
|
173
|
-
engine.decide('FSK level', country: 'NL').must_equal({ minimum: 1, maximum: 18 })
|
174
|
-
engine.decide('FSK level', country: 'FR', sexy: true).must_equal({ minimum: 12, maximum: 16 })
|
173
|
+
_(engine.decide('FSK level', country: 'NL')).must_equal({ minimum: 1, maximum: 18 })
|
174
|
+
_(engine.decide('FSK level', country: 'FR', sexy: true)).must_equal({ minimum: 12, maximum: 16 })
|
175
175
|
|
176
176
|
engine2 = Torm::RulesEngine.from_json(engine.to_json)
|
177
|
-
engine2.as_hash.must_equal engine.as_hash
|
177
|
+
_(engine2.as_hash).must_equal engine.as_hash
|
178
178
|
|
179
|
-
engine2.decide('FSK level', country: 'NL').must_equal({ minimum: 1, maximum: 18 })
|
180
|
-
engine2.decide('FSK level', country: 'FR', sexy: true).must_equal({ minimum: 12, maximum: 16 })
|
179
|
+
_(engine2.decide('FSK level', country: 'NL')).must_equal({ minimum: 1, maximum: 18 })
|
180
|
+
_(engine2.decide('FSK level', country: 'FR', sexy: true)).must_equal({ minimum: 12, maximum: 16 })
|
181
181
|
end
|
182
182
|
end
|
183
183
|
end
|
data/test/torm/tools_test.rb
CHANGED
@@ -16,13 +16,13 @@ describe Torm::Tools do
|
|
16
16
|
it 'should save data to a file' do
|
17
17
|
Torm.atomic_save(tmp_file, 'test')
|
18
18
|
assert File.exist?(tmp_file)
|
19
|
-
File.read(tmp_file).must_equal 'test'
|
19
|
+
_(File.read(tmp_file)).must_equal 'test'
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
describe '#symbolize_keys' do
|
24
24
|
it 'should convert string keys to symbols' do
|
25
|
-
Torm.symbolize_keys({ 'a' => 'b', :c => :d }).must_equal({ a: 'b', c: :d })
|
25
|
+
_(Torm.symbolize_keys({ 'a' => 'b', :c => :d })).must_equal({ a: 'b', c: :d })
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -32,10 +32,10 @@ describe Torm::Tools do
|
|
32
32
|
foo: 1,
|
33
33
|
baz: 3
|
34
34
|
}
|
35
|
-
Torm.slice(hash, :foo, :bar).must_equal({ foo: 1 })
|
35
|
+
_(Torm.slice(hash, :foo, :bar)).must_equal({ foo: 1 })
|
36
36
|
|
37
37
|
# Ensure we did not modify the original Hash
|
38
|
-
hash[:baz].must_equal 3
|
38
|
+
_(hash[:baz]).must_equal 3
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
data/torm.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
# Ruby 2.1 introduces required named keywords
|
22
|
-
spec.required_ruby_version = '
|
22
|
+
spec.required_ruby_version = '>= 2.1', '< 4.0'
|
23
23
|
|
24
24
|
# MultiJson follow Semantic Versioning, so any 1.x should work.
|
25
25
|
spec.add_dependency 'multi_json', '~> 1.0'
|
@@ -27,5 +27,5 @@ Gem::Specification.new do |spec|
|
|
27
27
|
# Defaults from generating the gemspec
|
28
28
|
spec.add_development_dependency 'bundler', '>= 1.7', '< 3.0'
|
29
29
|
spec.add_development_dependency 'rake', '~> 12.3'
|
30
|
-
spec.add_development_dependency 'minitest', '~>
|
30
|
+
spec.add_development_dependency 'minitest', '~> 5.12'
|
31
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: torm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wes Oldenbeuving
|
@@ -64,14 +64,14 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
67
|
+
version: '5.12'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '5.12'
|
75
75
|
description: Rules engine. Named after the Forgotten Realms god of Law.
|
76
76
|
email:
|
77
77
|
- narnach@gmail.com
|
@@ -106,16 +106,19 @@ require_paths:
|
|
106
106
|
- lib
|
107
107
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - "
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '2.1'
|
112
|
+
- - "<"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '4.0'
|
112
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
116
|
requirements:
|
114
117
|
- - ">="
|
115
118
|
- !ruby/object:Gem::Version
|
116
119
|
version: '0'
|
117
120
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
121
|
+
rubygems_version: 3.2.15
|
119
122
|
signing_key:
|
120
123
|
specification_version: 4
|
121
124
|
summary: Ruby rules engine
|