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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 661e5611a22d99946776683e385c4943f54cbee9b70b7f98783aed8b49bf814d
4
- data.tar.gz: 348b20b819b88ee5cd44c9a034fab3fb8ddeca8582ab68b526e115a23d79d10e
3
+ metadata.gz: f1c93ee06d4f1dc8fbbd1d10d2e248edd4c3c77f10f1440a2f56c1bae183068a
4
+ data.tar.gz: e39bebc512d7df97ed2e818b629d0cdde0764da3a28f8607294d8c6b2d4e04b9
5
5
  SHA512:
6
- metadata.gz: 01e7fd736289b7c90daea666c7dca8676d2995057b72a69ce442910c9ed7b1f7aef4e0b490a1919d267530425d4615b7c763e780c90ef51988b780e0bf18c94e
7
- data.tar.gz: 1519eaff8223109adb778048607a2357cb6a87c99b38fbdad894a7099f4bb3cecae1c2ca5334382be0f4881a394bcb4d1bb49b70ee50cf02d772b93fde1c8845
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
@@ -12,7 +12,7 @@ module Torm
12
12
  class << self
13
13
  include Tools
14
14
 
15
- attr_accessor :instance, :default_rules_file
15
+ attr_writer :instance, :default_rules_file
16
16
 
17
17
  # @return [Torm::RulesEngine] Singleton RulesEngine
18
18
  def instance
@@ -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, @conditions.merge(conditions))
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
@@ -1,3 +1,3 @@
1
1
  module Torm
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -2,5 +2,4 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
 
3
3
  require 'torm'
4
4
 
5
- require 'minitest/spec'
6
5
  require 'minitest/autorun'
@@ -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).must_equal nil
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
@@ -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 = '~> 2.1'
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', '~> 4.0'
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.2.1
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: '4.0'
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: '4.0'
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.1.4
121
+ rubygems_version: 3.2.15
119
122
  signing_key:
120
123
  specification_version: 4
121
124
  summary: Ruby rules engine