dry-logic 0.4.1 → 0.4.2

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
  SHA1:
3
- metadata.gz: 8706db20bc46c7c3b7f20fe03bfbc0068e9be304
4
- data.tar.gz: 6b07fca8b0cdccdbf87e7cd2d0287f04383ab155
3
+ metadata.gz: 554db40a47bc9eaa08659c38fd706fd15317f703
4
+ data.tar.gz: cdf04c815e657c282eef1c0d28d8923ba6b4dc12
5
5
  SHA512:
6
- metadata.gz: 4b563117d6c9ecc31d37e3be476064f020b640b6208087a658cb329b0186ace8de62d7a5795a0c8578890ff131c2859fd0cc934a2c9080f6f1024daa1db6c988
7
- data.tar.gz: 78f7d1b67309c6df1a4b027b32f5200c74daa676d8fa76ab7086f5a84ff91cb8e970623805eca85ff150e6f9ac0a01a43244e26e57aadd0fe3546927bdafef9d
6
+ metadata.gz: fa2ff6136f6407d523dcb8f5dee97c7f01da3aa71ebde81ce05ac92ab1408db9909d9e997cf81b46ad2bb8120000cdbe84c456b3866f22d37259674883445721
7
+ data.tar.gz: 3b6148d888eb2fb6ab6c8e87f3dedbee81feb13a310c7256abc06de9e8643555bf671b9d215045fc00db5c8a09e1b35f6ac1e57e57a6f91d09ca509eee14aa7a
data/.travis.yml CHANGED
@@ -5,27 +5,22 @@ cache: bundler
5
5
  bundler_args: --without console tools
6
6
  script:
7
7
  - bundle exec rake spec
8
- before_install:
9
- - gem update --system
10
- - rvm @global do gem uninstall bundler -a -x
11
- - rvm @global do gem install bundler -v 1.13.7
12
8
  after_success:
13
- # Send coverage report from the job #1 == current MRI release
14
- - '[ "${TRAVIS_JOB_NUMBER#*.}" = "1" ] && [ "$TRAVIS_BRANCH" = "master" ] && bundle exec codeclimate-test-reporter'
9
+ - '[ -d coverage ] && bundle exec codeclimate-test-reporter'
15
10
  rvm:
16
- - 2.3
17
- - 2.2
18
- - 2.1
19
- - jruby-9.1.5.0
11
+ - 2.1.10
12
+ - 2.2.7
13
+ - 2.3.4
14
+ - 2.4.1
15
+ - jruby-9.1.10.0
20
16
  - ruby-head
21
- - rbx-3
22
17
  env:
23
18
  global:
24
19
  - JRUBY_OPTS='--dev -J-Xmx1024M'
20
+ - COVERAGE=true
25
21
  matrix:
26
22
  allow_failures:
27
23
  - rvm: ruby-head
28
- - rvm: rbx-3
29
24
  notifications:
30
25
  email: false
31
26
  webhooks:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ # v0.4.2 2017-09-15
2
+
3
+ ### Added
4
+
5
+ * New `:case?` predicate matches a value against the given object with `#===` (flash-gordon)
6
+ * New `:is?` predicate checks objects identity (using `#equal?`) (flash-gordon)
7
+
8
+ ### Fixed
9
+
10
+ * A bug with using custom predicates within a standalone module in `dry-validation` (flash-gordon)
11
+
12
+ [Compare v0.4.1...v0.4.2(https://github.com/dry-rb/dry-logic/compare/v0.4.1...v0.4.2)
13
+
1
14
  # v0.4.1 2017-01-23
2
15
 
3
16
  ### Changed
@@ -8,7 +21,7 @@
8
21
 
9
22
  * Warnings on MRI 2.4.0 are gone (jtippett)
10
23
 
11
- [Compare v0.4.0...v0.4.1](https://github.com/dryrb/dry-logic/compare/v0.4.0...v0.4.1)
24
+ [Compare v0.4.0...v0.4.1](https://github.com/dry-rb/dry-logic/compare/v0.4.0...v0.4.1)
12
25
 
13
26
  # v0.4.0 2016-09-21
14
27
 
@@ -36,7 +49,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
36
49
  * [BREAKING] `Rule#name` is now `Rule#id` (solnic)
37
50
  * `Rule#parameters` is public now (solnic)
38
51
 
39
- [Compare v0.3.0...v0.4.0](https://github.com/dryrb/dry-logic/compare/v0.3.0...v0.4.0)
52
+ [Compare v0.3.0...v0.4.0](https://github.com/dry-rb/dry-logic/compare/v0.3.0...v0.4.0)
40
53
 
41
54
  # v0.3.0 2016-07-01
42
55
 
@@ -51,7 +64,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
51
64
  * Predicates raise errors when they are called with invalid arity (fran-worley + solnic)
52
65
  * Rules no longer evaluate input twice when building result objects (solnic)
53
66
 
54
- [Compare v0.2.3...v0.3.0](https://github.com/dryrb/dry-logic/compare/v0.2.3...v0.3.0)
67
+ [Compare v0.2.3...v0.3.0](https://github.com/dry-rb/dry-logic/compare/v0.2.3...v0.3.0)
55
68
 
56
69
  # v0.2.3 2016-05-11
57
70
 
@@ -64,7 +77,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
64
77
  * Renamed `inclusion?` to `included_in?` and deprecated `inclusion?` (fran-worley)
65
78
  * Renamed `exclusion?` to `excluded_from?` and deprecated `exclusion?` (fran-worley)
66
79
 
67
- [Compare v0.2.2...v0.2.3](https://github.com/dryrb/dry-logic/compare/v0.2.2...v0.2.3)
80
+ [Compare v0.2.2...v0.2.3](https://github.com/dry-rb/dry-logic/compare/v0.2.2...v0.2.3)
68
81
 
69
82
  # v0.2.2 2016-03-30
70
83
 
@@ -72,7 +85,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
72
85
 
73
86
  * `number?`, `odd?`, `even?` predicates (fran-worley)
74
87
 
75
- [Compare v0.2.1...v0.2.2](https://github.com/dryrb/dry-logic/compare/v0.2.1...v0.2.2)
88
+ [Compare v0.2.1...v0.2.2](https://github.com/dry-rb/dry-logic/compare/v0.2.1...v0.2.2)
76
89
 
77
90
  # v0.2.1 2016-03-20
78
91
 
@@ -86,7 +99,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
86
99
 
87
100
  * Entire AST has been redefined (solnic)
88
101
 
89
- [Compare v0.1.4...v0.2.0](https://github.com/dryrb/dry-logic/compare/v0.1.4...v0.2.0)
102
+ [Compare v0.1.4...v0.2.0](https://github.com/dry-rb/dry-logic/compare/v0.1.4...v0.2.0)
90
103
 
91
104
  # v0.1.4 2016-01-27
92
105
 
@@ -95,7 +108,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
95
108
  * Support for hash-names in `Check` and `Result` which can properly resolve input
96
109
  from nested results (solnic)
97
110
 
98
- [Compare v0.1.3...v0.1.4](https://github.com/dryrb/dry-logic/compare/v0.1.3...v0.1.4)
111
+ [Compare v0.1.3...v0.1.4](https://github.com/dry-rb/dry-logic/compare/v0.1.3...v0.1.4)
99
112
 
100
113
  # v0.1.3 2016-01-27
101
114
 
@@ -107,7 +120,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
107
120
 
108
121
  * `Check` and `Result` carry original input(s) (solnic)
109
122
 
110
- [Compare v0.1.2...v0.1.3](https://github.com/dryrb/dry-logic/compare/v0.1.2...v0.1.3)
123
+ [Compare v0.1.2...v0.1.3](https://github.com/dry-rb/dry-logic/compare/v0.1.2...v0.1.3)
111
124
 
112
125
  # v0.1.2 2016-01-19
113
126
 
@@ -115,7 +128,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
115
128
 
116
129
  * `xor` returns wrapped results when used against another result-rule (solnic)
117
130
 
118
- [Compare v0.1.1...v0.1.2](https://github.com/dryrb/dry-logic/compare/v0.1.1...v0.1.2)
131
+ [Compare v0.1.1...v0.1.2](https://github.com/dry-rb/dry-logic/compare/v0.1.1...v0.1.2)
119
132
 
120
133
  # v0.1.1 2016-01-18
121
134
 
@@ -125,7 +138,7 @@ This is a partial rewrite focused on internal clean up and major performance imp
125
138
  * `Rule::Result` which can be applied to a result object (solnic)
126
139
  * `true?` and `false?` predicates (solnic)
127
140
 
128
- [Compare v0.1.0...v0.1.1](https://github.com/dryrb/dry-logic/compare/v0.1.0...v0.1.1)
141
+ [Compare v0.1.0...v0.1.1](https://github.com/dry-rb/dry-logic/compare/v0.1.0...v0.1.1)
129
142
 
130
143
  # v0.1.0 2016-01-11
131
144
 
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,29 @@
1
+ # Issue Guidelines
2
+
3
+ ## Reporting bugs
4
+
5
+ If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
6
+
7
+ ## Reporting feature requests
8
+
9
+ Report a feature request **only after discussing it first on [discuss.dry-rb.org](https://discuss.dry-rb.org)** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
10
+
11
+ ## Reporting questions, support requests, ideas, concerns etc.
12
+
13
+ **PLEASE DON'T** - use [discuss.dry-rb.org](http://discuss.dry-rb.org) instead.
14
+
15
+ # Pull Request Guidelines
16
+
17
+ A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
18
+
19
+ Other requirements:
20
+
21
+ 1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
22
+ 2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
23
+ 3) Add API documentation if it's a new feature
24
+ 4) Update API documentation if it changes an existing feature
25
+ 5) Bonus points for sending a PR to [github.com/dry-rb/dry-rb.org](github.com/dry-rb/dry-rb.org) which updates user documentation and guides
26
+
27
+ # Asking for help
28
+
29
+ If these guidelines aren't helpful, and you're stuck, please post a message on [discuss.dry-rb.org](https://discuss.dry-rb.org).
data/README.md CHANGED
@@ -20,36 +20,13 @@ Predicate logic and rule composition used by:
20
20
  * [dry-validation](https://github.com/dry-rb/dry-validation) for composing validation rules
21
21
  * your project...?
22
22
 
23
- ## Synopsis
23
+ ## Links
24
24
 
25
- ``` ruby
26
- require 'dry/logic'
27
- require 'dry/logic/predicates'
25
+ * [Documentation](http://dry-rb.org/gems/dry-logic)
28
26
 
29
- include Dry::Logic
27
+ ## Contributing
30
28
 
31
- user_present = Rule::Key.new(Predicates[:filled?], name: :user)
32
-
33
- has_min_age = Rule::Key.new(Predicates[:int?], name: [:user, :age])
34
- & Rule::Key.new(Predicates[:gt?].curry(18), name: [:user, :age])
35
-
36
- user_rule = user_present & has_min_age
37
-
38
- user_rule.(user: { age: 19 })
39
- # #<Dry::Logic::Result::Named success?=true input={:user=>{:age=>19}} rule=#<Dry::Logic::Rule::Key predicate=#<Dry::Logic::Predicate id=:gt? args=[18, 19]> options={:evaluator=>#<Dry::Logic::Evaluator::Key path=[:user, :age]>, :name=>[:user, :age]}>>
40
-
41
- user_rule.(user: { age: 18 })
42
- # #<Dry::Logic::Result::Named success?=false input={:user=>{:age=>18}} rule=#<Dry::Logic::Rule::Key predicate=#<Dry::Logic::Predicate id=:gt? args=[18, 18]> options={:evaluator=>#<Dry::Logic::Evaluator::Key path=[:user, :age]>, :name=>[:user, :age]}>>
43
-
44
- user_rule.(user: { age: 'seventeen' }).inspect
45
- #<Dry::Logic::Result::Named success?=false input={:user=>{:age=>"seventeen"}} rule=#<Dry::Logic::Rule::Key predicate=#<Dry::Logic::Predicate id=:int? args=["seventeen"]> options={:evaluator=>#<Dry::Logic::Evaluator::Key path=[:user, :age]>, :name=>[:user, :age]}>>
46
-
47
- user_rule.(user: { }).inspect
48
- #<Dry::Logic::Result::Named success?=false input={:user=>{}} rule=#<Dry::Logic::Rule::Key predicate=#<Dry::Logic::Predicate id=:filled? args=[{}]> options={:evaluator=>#<Dry::Logic::Evaluator::Key path=[:user]>, :name=>:user}>>
49
-
50
- puts user_rule.({}).inspect
51
- #<Dry::Logic::Result::Named success?=false input={} rule=#<Dry::Logic::Rule::Key predicate=#<Dry::Logic::Predicate id=:filled? args=[nil]> options={:evaluator=>#<Dry::Logic::Evaluator::Key path=[:user]>, :name=>:user}>>
52
- ```
29
+ Bug reports and pull requests are welcome on GitHub at https://github.com/dry-rb/dry-logic.
53
30
 
54
31
  ## License
55
32
 
data/dry-logic.gemspec CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require File.expand_path('../lib/dry/logic/version', __FILE__)
3
2
 
4
3
  Gem::Specification.new do |spec|
@@ -7,7 +6,7 @@ Gem::Specification.new do |spec|
7
6
  spec.authors = ['Piotr Solnica']
8
7
  spec.email = ['piotr.solnica@gmail.com']
9
8
  spec.summary = 'Predicate logic with rule composition'
10
- spec.homepage = 'https://github.com/dryrb/dry-logic'
9
+ spec.homepage = 'https://github.com/dry-rb/dry-logic'
11
10
  spec.license = 'MIT'
12
11
 
13
12
  spec.files = `git ls-files -z`.split("\x0")
data/examples/basic.rb CHANGED
@@ -3,17 +3,12 @@ require 'dry/logic/predicates'
3
3
 
4
4
  include Dry::Logic
5
5
 
6
- user_present = Rule::Key.new(Predicates[:filled?], name: :user)
7
- has_min_age = Rule::Key.new(Predicates[:int?], name: [:user, :age]) & Rule::Key.new(Predicates[:gt?].curry(18), name: [:user, :age])
6
+ user_present = Rule::Predicate.new(Predicates[:key?]).curry(:user)
8
7
 
9
- user_rule = user_present & has_min_age
10
-
11
- puts user_rule.(user: { age: 19 }).inspect
8
+ has_min_age = Operations::Key.new(Rule::Predicate.new(Predicates[:gt?]).curry(18), name: [:user, :age])
12
9
 
13
- puts user_rule.(user: { age: 18 }).inspect
14
-
15
- puts user_rule.(user: { age: 'seventeen' }).inspect
10
+ user_rule = user_present & has_min_age
16
11
 
17
- puts user_rule.(user: { }).inspect
12
+ puts user_rule.(user: { age: 19 }).success?
18
13
 
19
- puts user_rule.({}).inspect
14
+ puts user_rule.(user: { age: 18 }).success?
@@ -166,6 +166,10 @@ module Dry
166
166
  left.eql?(right)
167
167
  end
168
168
 
169
+ def is?(left, right)
170
+ left.equal?(right)
171
+ end
172
+
169
173
  def not_eql?(left, right)
170
174
  !left.eql?(right)
171
175
  end
@@ -178,8 +182,18 @@ module Dry
178
182
  value.equal?(false)
179
183
  end
180
184
 
181
- def format?(regex, input)
182
- !regex.match(input).nil?
185
+ if RUBY_VERSION < '2.4'
186
+ def format?(regex, input)
187
+ !regex.match(input).nil?
188
+ end
189
+ else
190
+ def format?(regex, input)
191
+ regex.match?(input)
192
+ end
193
+ end
194
+
195
+ def case?(pattern, input)
196
+ pattern === input
183
197
  end
184
198
 
185
199
  def predicate(name, &block)
@@ -62,7 +62,7 @@ module Dry
62
62
  end
63
63
 
64
64
  def bind(object)
65
- if predicate.instance_of?(UnboundMethod)
65
+ if UnboundMethod === predicate
66
66
  self.class.new(predicate.bind(object), options)
67
67
  else
68
68
  self.class.new(
@@ -73,7 +73,7 @@ module Dry
73
73
  end
74
74
 
75
75
  def eval_args(object)
76
- with(args: args.map { |arg| arg.instance_of?(UnboundMethod) ? arg.bind(object).() : arg })
76
+ with(args: args.map { |arg| UnboundMethod === arg ? arg.bind(object).() : arg })
77
77
  end
78
78
 
79
79
  def with(new_opts)
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Logic
3
- VERSION = '0.4.1'.freeze
3
+ VERSION = '0.4.2'.freeze
4
4
  end
5
5
  end
@@ -30,6 +30,10 @@ RSpec.shared_examples 'predicates' do
30
30
  let(:eql?) { Dry::Logic::Predicates[:eql?] }
31
31
 
32
32
  let(:size?) { Dry::Logic::Predicates[:size?] }
33
+
34
+ let(:case?) { Dry::Logic::Predicates[:case?] }
35
+
36
+ let(:equal?) { Dry::Logic::Predicates[:equal?] }
33
37
  end
34
38
 
35
39
  RSpec.shared_examples 'a passing predicate' do
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,13 @@
1
- if RUBY_ENGINE == 'ruby' && ENV['CI'] == 'true'
2
- require 'simplecov'
3
- SimpleCov.start do
4
- add_filter 'spec/'
1
+ if RUBY_ENGINE == 'ruby' && ENV['COVERAGE'] == 'true'
2
+ require 'yaml'
3
+ rubies = YAML.load(File.read(File.join(__dir__, '..', '.travis.yml')))['rvm']
4
+ latest_mri = rubies.select { |v| v =~ /\A\d+\.\d+.\d+\z/ }.max
5
+
6
+ if RUBY_VERSION == latest_mri
7
+ require 'simplecov'
8
+ SimpleCov.start do
9
+ add_filter '/spec/'
10
+ end
5
11
  end
6
12
  end
7
13
 
@@ -23,4 +29,6 @@ include Dry::Core::Constants
23
29
 
24
30
  RSpec.configure do |config|
25
31
  config.disable_monkey_patching!
32
+
33
+ config.warnings = true
26
34
  end
@@ -0,0 +1,33 @@
1
+ require 'dry/logic/predicates'
2
+
3
+ RSpec.describe Dry::Logic::Predicates do
4
+ describe '#case?' do
5
+ let(:predicate_name) { :case? }
6
+
7
+ context 'when the value matches the pattern' do
8
+ let(:arguments_list) do
9
+ [
10
+ [11, 11],
11
+ [:odd?.to_proc, 11],
12
+ [/\Af/, 'foo'],
13
+ [Integer, 11]
14
+ ]
15
+ end
16
+
17
+ it_behaves_like 'a passing predicate'
18
+ end
19
+
20
+ context "when the value doesn't match the pattern" do
21
+ let(:arguments_list) do
22
+ [
23
+ [13, 14],
24
+ [:odd?.to_proc, 12],
25
+ [/\Af/, 'bar'],
26
+ [String, 11]
27
+ ]
28
+ end
29
+
30
+ it_behaves_like 'a failing predicate'
31
+ end
32
+ end
33
+ end
@@ -11,7 +11,7 @@ RSpec.describe Dry::Logic::Predicates, '#eql?' do
11
11
  it_behaves_like 'a passing predicate'
12
12
  end
13
13
 
14
- context 'with value is not empty' do
14
+ context 'with value is not equal to the arg' do
15
15
  let(:arguments_list) do
16
16
  [['Bar', 'Foo']]
17
17
  end
@@ -1,56 +1,24 @@
1
1
  require 'dry/logic/predicates'
2
2
 
3
- RSpec.describe Dry::Logic::Predicates do
4
- describe '#includes?' do
5
- let(:predicate_name) { :includes? }
3
+ RSpec.describe Dry::Logic::Predicates, '#is?' do
4
+ let(:predicate_name) { :is? }
5
+ let(:one) { Object.new }
6
+ let(:two) { Object.new }
6
7
 
7
- context 'when input includes value' do
8
- let(:arguments_list) do
9
- [
10
- ['Jill', ['Jill', 'John']],
11
- ['John', ['Jill', 'John']],
12
- [1, 1..2],
13
- [2, 1..2],
14
- ['Hello', 'Hello World'],
15
- ['World', 'Hello World'],
16
- [:bar, { bar: 0 }],
17
- [nil, [nil, false]],
18
- [false, [nil, false]]
19
- ]
20
- end
21
-
22
- it_behaves_like 'a passing predicate'
8
+ context 'when value is equal to the arg' do
9
+ let(:arguments_list) do
10
+ [[one, one], [:one, :one]]
23
11
  end
24
12
 
25
- context 'with input of invalid type' do
26
- let(:arguments_list) do
27
- [
28
- [2, 1],
29
- [1, nil],
30
- ["foo", 1],
31
- [1, "foo"],
32
- [1..2, "foo"],
33
- ["foo", 1..2],
34
- [:key, "foo"]
35
- ]
36
- end
13
+ it_behaves_like 'a passing predicate'
14
+ end
37
15
 
38
- it_behaves_like 'a failing predicate'
16
+ context 'with value is not equal to the arg' do
17
+ let(:arguments_list) do
18
+ # Strings are not equal. Yet
19
+ [[one, two], ['one', 'one']]
39
20
  end
40
21
 
41
- context 'with input excludes value' do
42
- let(:arguments_list) do
43
- [
44
- ['Jack', ['Jill', 'John']],
45
- [0, 1..2],
46
- [3, 1..2],
47
- ['foo', 'Hello World'],
48
- [:foo, { bar: 0 }],
49
- [true, [nil, false]]
50
- ]
51
- end
52
-
53
- it_behaves_like 'a failing predicate'
54
- end
22
+ it_behaves_like 'a failing predicate'
55
23
  end
56
24
  end
@@ -4,6 +4,32 @@ RSpec.describe Dry::Logic::Rule do
4
4
  let(:predicate) { -> { true } }
5
5
  let(:options) { {} }
6
6
 
7
+ let(:schema) do
8
+ Class.new(BasicObject) do
9
+ define_method(:class, Kernel.instance_method(:class))
10
+
11
+ def method_missing(m, *)
12
+ if m.to_s.end_with?('?')
13
+ self.class.new
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ def to_proc
20
+ -> value { value }
21
+ end
22
+
23
+ def arity
24
+ 1
25
+ end
26
+
27
+ def parameters
28
+ [[:req, :value]]
29
+ end
30
+ end.new
31
+ end
32
+
7
33
  it_behaves_like Dry::Logic::Rule
8
34
 
9
35
  describe '.new' do
@@ -80,15 +106,36 @@ RSpec.describe Dry::Logic::Rule do
80
106
  expect(bound.options[:parameters]).to eql(rule.parameters)
81
107
  end
82
108
  end
109
+
110
+ context 'with a schema instance' do
111
+ let(:object) { schema }
112
+ let(:predicate) { schema }
113
+
114
+ it 'returns a new with its predicate executed in the context of the provided object' do
115
+ expect(bound.(true)).to be_success
116
+ expect(bound.(false)).to be_failure
117
+ end
118
+ end
83
119
  end
84
120
 
85
121
  describe '#eval_args' do
86
- let(:options) { { args: [1, klass.instance_method(:num), :foo] } }
87
- let(:klass) { Class.new { def num; 7; end } }
88
- let(:object) { klass.new }
122
+ context 'with an unbound method' do
123
+ let(:options) { { args: [1, klass.instance_method(:num), :foo] } }
124
+ let(:klass) { Class.new { def num; 7; end } }
125
+ let(:object) { klass.new }
89
126
 
90
- it 'evaluates args in the context of the provided object' do
91
- expect(rule.eval_args(object).args).to eql([1, 7, :foo])
127
+ it 'evaluates args in the context of the provided object' do
128
+ expect(rule.eval_args(object).args).to eql([1, 7, :foo])
129
+ end
130
+ end
131
+
132
+ context 'with a schema instance' do
133
+ let(:options) { { args: [1, schema, :foo] } }
134
+ let(:object) { Object.new }
135
+
136
+ it 'returns a new with its predicate executed in the context of the provided object' do
137
+ expect(rule.eval_args(object).args).to eql([1, schema, :foo])
138
+ end
92
139
  end
93
140
  end
94
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-logic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-23 00:00:00.000000000 Z
11
+ date: 2017-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-core
@@ -114,6 +114,7 @@ files:
114
114
  - ".rubocop_todo.yml"
115
115
  - ".travis.yml"
116
116
  - CHANGELOG.md
117
+ - CONTRIBUTING.md
117
118
  - Gemfile
118
119
  - LICENSE
119
120
  - README.md
@@ -164,6 +165,7 @@ files:
164
165
  - spec/unit/predicates/array_spec.rb
165
166
  - spec/unit/predicates/attr_spec.rb
166
167
  - spec/unit/predicates/bool_spec.rb
168
+ - spec/unit/predicates/case_spec.rb
167
169
  - spec/unit/predicates/date_spec.rb
168
170
  - spec/unit/predicates/date_time_spec.rb
169
171
  - spec/unit/predicates/decimal_spec.rb
@@ -199,7 +201,7 @@ files:
199
201
  - spec/unit/rule/predicate_spec.rb
200
202
  - spec/unit/rule_compiler_spec.rb
201
203
  - spec/unit/rule_spec.rb
202
- homepage: https://github.com/dryrb/dry-logic
204
+ homepage: https://github.com/dry-rb/dry-logic
203
205
  licenses:
204
206
  - MIT
205
207
  metadata: {}
@@ -219,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
221
  version: '0'
220
222
  requirements: []
221
223
  rubyforge_project:
222
- rubygems_version: 2.6.9
224
+ rubygems_version: 2.6.11
223
225
  signing_key:
224
226
  specification_version: 4
225
227
  summary: Predicate logic with rule composition
@@ -243,6 +245,7 @@ test_files:
243
245
  - spec/unit/predicates/array_spec.rb
244
246
  - spec/unit/predicates/attr_spec.rb
245
247
  - spec/unit/predicates/bool_spec.rb
248
+ - spec/unit/predicates/case_spec.rb
246
249
  - spec/unit/predicates/date_spec.rb
247
250
  - spec/unit/predicates/date_time_spec.rb
248
251
  - spec/unit/predicates/decimal_spec.rb