torm 0.2.1 → 0.3.0

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