attribute_matcher 0.0.4 → 0.3

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
  SHA1:
3
- metadata.gz: bc23f4e6106aa331f25240fde33cac763b8c3df8
4
- data.tar.gz: 51de53282e826a0020ba13c68425a4982eb3ddd3
3
+ metadata.gz: 0d30c684acab47d8d9d0f1f203aa324586c2e104
4
+ data.tar.gz: 5e9a7533456b4911c3b00c19c4a750fec309a8e9
5
5
  SHA512:
6
- metadata.gz: 51c252381c04d4c76d4c41edc2e049382d6ca4eb8cdb628a912020a90e1d48aa54e5d8e0a7a5bb064d81e4dbf1e7403511a249bc3cfdbd13b1c2acd9a5ddc40f
7
- data.tar.gz: d148cda1e11614e1ed015cb940ecaaa41966b82e7308bd12f5d0103978972a382807f402f698de7cbf23162c0be0adca7425a93b86381663b558b1dfe763809a
6
+ metadata.gz: 54b935465a6409f7afd3853f2bdfddef7f8e32a345dfb32153739fdd2227b7de491c130d0a36c53eb7e7e391bcd30cfbd80eaf0919ba01ffeb90e5815b8cce42
7
+ data.tar.gz: 8fca475ef188732f034879f467c9a38a1bd86ebe5135e302557a3939f84a2ad4d60350d93b8561847db4d8981723909ea452f65c4139434ba633a9251504c356
@@ -0,0 +1 @@
1
+ notification :terminal_notifier
@@ -21,3 +21,9 @@ Style/SingleSpaceBeforeFirstArg:
21
21
 
22
22
  Style/Documentation:
23
23
  Enabled: false
24
+
25
+ Style/Semicolon:
26
+ Enabled: false
27
+
28
+ Style/SpaceAroundOperators:
29
+ Enabled: false
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- attribute_matcher (0.0.3)
4
+ attribute_matcher (0.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -9,26 +9,69 @@ GEM
9
9
  ast (2.1.0)
10
10
  astrolabe (1.3.1)
11
11
  parser (~> 2.2)
12
+ axiom-types (0.1.1)
13
+ descendants_tracker (~> 0.0.4)
14
+ ice_nine (~> 0.11.0)
15
+ thread_safe (~> 0.3, >= 0.3.1)
16
+ coderay (1.1.0)
17
+ coercible (1.0.0)
18
+ descendants_tracker (~> 0.0.1)
12
19
  coveralls (0.8.2)
13
20
  json (~> 1.8)
14
21
  rest-client (>= 1.6.8, < 2)
15
22
  simplecov (~> 0.10.0)
16
23
  term-ansicolor (~> 1.3)
17
24
  thor (~> 0.19.1)
25
+ descendants_tracker (0.0.4)
26
+ thread_safe (~> 0.3, >= 0.3.1)
18
27
  diff-lcs (1.2.5)
19
28
  docile (1.1.5)
20
29
  domain_name (0.5.24)
21
30
  unf (>= 0.0.5, < 1.0.0)
31
+ equalizer (0.0.11)
32
+ ffi (1.9.10)
33
+ formatador (0.2.5)
34
+ guard (2.13.0)
35
+ formatador (>= 0.2.4)
36
+ listen (>= 2.7, <= 4.0)
37
+ lumberjack (~> 1.0)
38
+ nenv (~> 0.1)
39
+ notiffany (~> 0.0)
40
+ pry (>= 0.9.12)
41
+ shellany (~> 0.0)
42
+ thor (>= 0.18.1)
43
+ guard-compat (1.2.1)
44
+ guard-rspec (4.6.4)
45
+ guard (~> 2.1)
46
+ guard-compat (~> 1.1)
47
+ rspec (>= 2.99.0, < 4.0)
22
48
  http-cookie (1.0.2)
23
49
  domain_name (~> 0.5)
50
+ ice_nine (0.11.1)
24
51
  json (1.8.3)
52
+ listen (3.0.3)
53
+ rb-fsevent (>= 0.9.3)
54
+ rb-inotify (>= 0.9)
55
+ lumberjack (1.0.9)
56
+ method_source (0.8.2)
25
57
  mime-types (2.6.2)
58
+ nenv (0.2.0)
26
59
  netrc (0.10.3)
60
+ notiffany (0.0.8)
61
+ nenv (~> 0.1)
62
+ shellany (~> 0.0)
27
63
  parser (2.2.2.6)
28
64
  ast (>= 1.1, < 3.0)
29
65
  powerpack (0.1.1)
66
+ pry (0.10.2)
67
+ coderay (~> 1.1.0)
68
+ method_source (~> 0.8.1)
69
+ slop (~> 3.4)
30
70
  rainbow (2.0.0)
31
71
  rake (10.4.2)
72
+ rb-fsevent (0.9.6)
73
+ rb-inotify (0.9.5)
74
+ ffi (>= 0.5.0)
32
75
  rest-client (1.8.0)
33
76
  http-cookie (>= 1.0.2, < 2.0)
34
77
  mime-types (>= 1.16, < 3.0)
@@ -56,18 +99,27 @@ GEM
56
99
  rainbow (>= 1.99.1, < 3.0)
57
100
  ruby-progressbar (~> 1.4)
58
101
  ruby-progressbar (1.7.5)
102
+ shellany (0.0.1)
59
103
  simplecov (0.10.0)
60
104
  docile (~> 1.1.0)
61
105
  json (~> 1.8)
62
106
  simplecov-html (~> 0.10.0)
63
107
  simplecov-html (0.10.0)
108
+ slop (3.6.0)
64
109
  term-ansicolor (1.3.2)
65
110
  tins (~> 1.0)
111
+ terminal-notifier-guard (1.6.4)
66
112
  thor (0.19.1)
113
+ thread_safe (0.3.5)
67
114
  tins (1.6.0)
68
115
  unf (0.1.4)
69
116
  unf_ext
70
117
  unf_ext (0.0.7.1)
118
+ virtus (1.0.5)
119
+ axiom-types (~> 0.1)
120
+ coercible (~> 1.0)
121
+ descendants_tracker (~> 0.0, >= 0.0.3)
122
+ equalizer (~> 0.0, >= 0.0.9)
71
123
 
72
124
  PLATFORMS
73
125
  ruby
@@ -76,11 +128,15 @@ DEPENDENCIES
76
128
  attribute_matcher!
77
129
  bundler (~> 1.7)
78
130
  coveralls (~> 0.8)
131
+ guard (~> 2.13)
132
+ guard-rspec (~> 4.6)
79
133
  rake (~> 10.0)
80
134
  rspec (~> 3.0)
81
135
  rspec-its (~> 1.2)
82
136
  rubocop (~> 0.30)
83
137
  simplecov (~> 0.9)
138
+ terminal-notifier-guard (~> 1.6)
139
+ virtus (~> 1.0)
84
140
 
85
141
  BUNDLED WITH
86
142
  1.10.6
@@ -0,0 +1,5 @@
1
+ guard :rspec, cmd: 'bundle exec rspec' do
2
+ watch(%r{^lib/(.+)\.rb$}) { 'spec' }
3
+ watch(%r{^spec/spec_helper.rb$}) { 'spec' }
4
+ watch(%r{^spec/.+_spec\.rb$})
5
+ end
data/README.md CHANGED
@@ -25,7 +25,11 @@ Or install it yourself as:
25
25
 
26
26
  ## Usage
27
27
 
28
+ ### With Ruby attr methods
29
+
28
30
  ```ruby
31
+ require 'spec_helper'
32
+
29
33
  class Person
30
34
  attr_accessor :name
31
35
  attr_reader :age
@@ -66,6 +70,49 @@ describe Person do
66
70
  it { is_expected.to have_attribute(:name).with_value('Joe') }
67
71
  it { is_expected.to have_attribute(:age).with_value(nil) }
68
72
  end
73
+
74
+ describe 'type' do
75
+ it { is_expected.to have_attribute(:name).of_type(String) }
76
+ end
77
+ end
78
+ ```
79
+
80
+ ### With Virtus
81
+ ```ruby
82
+ require 'spec_helper'
83
+ require 'virtus'
84
+
85
+ class VirtusPerson
86
+ include Virtus.model
87
+
88
+ attribute :name, String, default: 'Joe'
89
+ attribute :age
90
+ attribute :status
91
+
92
+ attribute :ssn, String, reader: :private, writer: :private
93
+ attribute :address, String, reader: :protected, writer: :protected
94
+ end
95
+
96
+ describe VirtusPerson do
97
+ it { is_expected.to have_attribute(:name) }
98
+ it { is_expected.to have_attribute(:age) }
99
+ it { is_expected.to have_attribute(:status) }
100
+
101
+ describe 'visibility' do
102
+ it { is_expected.to have_attribute(:address).with_reader(:protected) }
103
+ it { is_expected.to have_attribute(:address).with_writer(:protected) }
104
+ it { is_expected.to have_attribute(:ssn).with_reader(:private) }
105
+ it { is_expected.to have_attribute(:ssn).with_writer(:private) }
106
+ end
107
+
108
+ describe 'values' do
109
+ it { is_expected.to have_attribute(:name).with_value('Joe') }
110
+ it { is_expected.to have_attribute(:age).with_value(nil) }
111
+ end
112
+
113
+ describe 'type' do
114
+ it { is_expected.to have_attribute(:name).of_type(String) }
115
+ end
69
116
  end
70
117
  ```
71
118
 
@@ -19,11 +19,15 @@ Gem::Specification.new do |gem|
19
19
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
20
  gem.require_paths = ['lib']
21
21
 
22
- gem.add_development_dependency 'bundler', '~> 1.7'
23
- gem.add_development_dependency 'coveralls', '~> 0.8'
24
- gem.add_development_dependency 'rake', '~> 10.0'
25
- gem.add_development_dependency 'rspec', '~> 3.0'
26
- gem.add_development_dependency 'rspec-its', '~> 1.2'
27
- gem.add_development_dependency 'rubocop', '~> 0.30'
28
- gem.add_development_dependency 'simplecov', '~> 0.9'
22
+ gem.add_development_dependency 'bundler', '~> 1.7'
23
+ gem.add_development_dependency 'coveralls', '~> 0.8'
24
+ gem.add_development_dependency 'guard', '~> 2.13'
25
+ gem.add_development_dependency 'guard-rspec', '~> 4.6'
26
+ gem.add_development_dependency 'rake', '~> 10.0'
27
+ gem.add_development_dependency 'rspec', '~> 3.0'
28
+ gem.add_development_dependency 'rspec-its', '~> 1.2'
29
+ gem.add_development_dependency 'rubocop', '~> 0.30'
30
+ gem.add_development_dependency 'simplecov', '~> 0.9'
31
+ gem.add_development_dependency 'terminal-notifier-guard', '~> 1.6'
32
+ gem.add_development_dependency 'virtus', '~> 1.0'
29
33
  end
@@ -1,4 +1,4 @@
1
- require 'attribute_matcher/ext/rspec/chain_group'
1
+ require 'attribute_matcher/ext/rspec/chain_value'
2
2
  require 'attribute_matcher/ext/rspec/failure_messages'
3
3
 
4
4
  require 'attribute_matcher/attribute_matcher'
@@ -1,36 +1,31 @@
1
1
  RSpec::Matchers.define(:have_attribute) do
2
2
  match do
3
- exists? && access_match? && visibility_match?(:reader) && visibility_match?(:writer) && value_match?
3
+ exists? && all_values_match?
4
4
  end
5
5
 
6
- chain_group :access, :read_only, :write_only, :read_write
6
+ chain_value('with_reader') { |expected_value| ensure_valid_visibility(expected_value); visibility(reader) }
7
+ chain_value('with_writer') { |expected_value| ensure_valid_visibility(expected_value); visibility(writer) }
7
8
 
8
- chain(:with_reader) { |visibility| self.reader_visibility = ensure_valid_visibility(visibility) }
9
- chain(:with_writer) { |visibility| self.writer_visibility = ensure_valid_visibility(visibility) }
9
+ chain_value('read_write') { reader_ok? && writer_ok? }
10
+ chain_value('read_only') { reader_ok? && !writer_ok? }
11
+ chain_value('write_only') { !reader_ok? && writer_ok? }
10
12
 
11
- chain(:with_value) do |value|
12
- self.value = value
13
- self.value_set = true
14
- end
13
+ chain_value('with_value') { attribute_value }
14
+ chain_value('of_type') { attribute_type }
15
15
 
16
16
  private
17
17
 
18
- attr_accessor :value, :value_set, :reader_visibility, :writer_visibility
19
-
20
- def exists?
21
- reader || writer
18
+ def attribute_value
19
+ actual.send(expected)
22
20
  end
23
21
 
24
- def read_only_match?
25
- reader_ok? && writer.nil?
22
+ def attribute_type
23
+ return attribute_value.class if attribute_value
24
+ actual.send(:attribute_set)[expected].primitive if actual.respond_to?(:attribute_set, true)
26
25
  end
27
26
 
28
- def write_only_match?
29
- writer_ok? && reader.nil?
30
- end
31
-
32
- def read_write_match?
33
- reader_ok? && writer_ok?
27
+ def exists?
28
+ reader || writer
34
29
  end
35
30
 
36
31
  def reader_ok?
@@ -66,13 +61,6 @@ RSpec::Matchers.define(:have_attribute) do
66
61
  format('%s() takes %d argument%s instead of %d', method.name, method.arity, method.arity == 1 ? '' : 's', expected_arity) if method && method.arity != expected_arity
67
62
  end
68
63
 
69
- def visibility_match?(accessor)
70
- method = accessor == :reader ? reader : writer
71
- expected_visibility = send("#{accessor}_visibility")
72
-
73
- method.nil? || expected_visibility.nil? || expected_visibility == visibility(method)
74
- end
75
-
76
64
  def visibility(method)
77
65
  klass = method.receiver.class
78
66
 
@@ -90,10 +78,5 @@ RSpec::Matchers.define(:have_attribute) do
90
78
 
91
79
  def ensure_valid_visibility(visibility)
92
80
  fail format('%s is an invalid visibility; should be one of %s', visibility, VALID_VISIBILITIES.join(', ')) unless VALID_VISIBILITIES.include?(visibility)
93
- visibility
94
- end
95
-
96
- def value_match?
97
- value_set.nil? || actual.send(expected).eql?(value)
98
81
  end
99
82
  end
@@ -0,0 +1,44 @@
1
+ # An RSpec extension for chained methods that check single values
2
+ module RSpec
3
+ module Matchers
4
+ module DSL
5
+ class Matcher
6
+ class << self
7
+ def chain_value(value, &actual_definition)
8
+ attr_accessor :chained_values, :"expected_#{value}", :"expected_#{value}_set"
9
+
10
+ create_chain_method(value)
11
+ create_all_values_match_method
12
+ create_value_match_method(value, actual_definition)
13
+ end
14
+
15
+ private
16
+
17
+ def create_chain_method(value)
18
+ chain(value) do |expected_value = true|
19
+ self.chained_values ||= []
20
+ chained_values << :"#{value}_match?"
21
+
22
+ send(:"expected_#{value}=", expected_value)
23
+ send(:"expected_#{value}_set=", true)
24
+ end
25
+ end
26
+
27
+ def create_all_values_match_method
28
+ return if instance_methods(false).include?(:values_match?)
29
+
30
+ define_method(:all_values_match?) do
31
+ chained_values.nil? || chained_values.map { |m| send(m) }.all?
32
+ end
33
+ end
34
+
35
+ def create_value_match_method(value, actual_definition)
36
+ define_method :"#{value}_match?" do
37
+ send(:"expected_#{value}_set").nil? || send(:"expected_#{value}").eql?(instance_exec(send(:"expected_#{value}"), &actual_definition))
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module HaveAttributeMatcher
2
- VERSION ||= '0.0.4'
2
+ VERSION ||= '0.3'
3
3
  end
@@ -154,13 +154,13 @@ describe 'have_attribute matcher' do
154
154
  end
155
155
 
156
156
  it 'should fail if the reader visibility is invalid' do
157
- expect { have_attribute(:private_reader).with_reader(:foo) }.to raise_error do |error|
157
+ expect { should have_attribute(:private_reader).with_reader(:foo) }.to raise_error do |error|
158
158
  expect(error.message).to match /foo is an invalid visibility; should be one of private, protected, public/
159
159
  end
160
160
  end
161
161
 
162
162
  it 'should fail if the write visibility is invalid' do
163
- expect { have_attribute(:private_writer).with_writer(:foo) }.to raise_error do |error|
163
+ expect { should have_attribute(:private_writer).with_writer(:foo) }.to raise_error do |error|
164
164
  expect(error.message).to match /foo is an invalid visibility; should be one of private, protected, public/
165
165
  end
166
166
  end
@@ -178,7 +178,40 @@ describe 'have_attribute matcher' do
178
178
  end
179
179
  end
180
180
 
181
+ it { is_expected.to have_attribute(:name) }
181
182
  it { is_expected.to have_attribute(:name).with_value('John') }
182
183
  it { is_expected.not_to have_attribute(:name).with_value(nil) }
184
+
185
+ it { is_expected.to have_attribute(:address) }
186
+ it { is_expected.to have_attribute(:address).with_value(nil) }
187
+ it { is_expected.not_to have_attribute(:address).with_value('123 Main St') }
188
+
189
+ it_behaves_like 'matcher messages' do
190
+ {
191
+ :'have_attribute(:name).with_value("John")' => 'have attribute :name with value "John"',
192
+ :'have_attribute(:name).with_value(nil)' => 'have attribute :name with value nil',
193
+ }.each do |expectation, expected_description|
194
+ describe(expectation) do
195
+ its(:description) { is_expected.to eql expected_description }
196
+ its(:failure_message) { is_expected.to match /expected .+ to #{expected_description}/ }
197
+ its(:failure_message_when_negated) { is_expected.to match /expected .+ not to #{expected_description}/ }
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+ describe 'of_type' do
204
+ let(:klass) do
205
+ Class.new do
206
+ def initialize
207
+ @name = 'John'
208
+ end
209
+
210
+ attr_reader :name
211
+ end
212
+ end
213
+
214
+ it { is_expected.to have_attribute(:name).of_type(String) }
215
+ it { is_expected.not_to have_attribute(:name).of_type(Integer) }
183
216
  end
184
217
  end
@@ -40,4 +40,8 @@ describe Person do
40
40
  it { is_expected.to have_attribute(:name).with_value('Joe') }
41
41
  it { is_expected.to have_attribute(:age).with_value(nil) }
42
42
  end
43
+
44
+ describe 'type' do
45
+ it { is_expected.to have_attribute(:name).of_type(String) }
46
+ end
43
47
  end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'virtus'
3
+
4
+ class VirtusPerson
5
+ include Virtus.model
6
+
7
+ attribute :name, String, default: 'Joe'
8
+ attribute :age
9
+ attribute :status
10
+
11
+ attribute :ssn, String, reader: :private, writer: :private
12
+ attribute :address, String, reader: :protected, writer: :protected
13
+ end
14
+
15
+ describe VirtusPerson do
16
+ it { is_expected.to have_attribute(:name) }
17
+ it { is_expected.to have_attribute(:age) }
18
+ it { is_expected.to have_attribute(:status) }
19
+
20
+ describe 'visibility' do
21
+ it { is_expected.to have_attribute(:address).with_reader(:protected) }
22
+ it { is_expected.to have_attribute(:address).with_writer(:protected) }
23
+ it { is_expected.to have_attribute(:ssn).with_reader(:private) }
24
+ it { is_expected.to have_attribute(:ssn).with_writer(:private) }
25
+ end
26
+
27
+ describe 'values' do
28
+ it { is_expected.to have_attribute(:name).with_value('Joe') }
29
+ it { is_expected.to have_attribute(:age).with_value(nil) }
30
+ end
31
+
32
+ describe 'type' do
33
+ it { is_expected.to have_attribute(:name).of_type(String) }
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute_matcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Declan Whelan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-23 00:00:00.000000000 Z
11
+ date: 2015-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.13'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.6'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +136,34 @@ dependencies:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0.9'
139
+ - !ruby/object:Gem::Dependency
140
+ name: terminal-notifier-guard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.6'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.6'
153
+ - !ruby/object:Gem::Dependency
154
+ name: virtus
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.0'
111
167
  description: A matcher for testing object attributes.
112
168
  email:
113
169
  - declan@pleanintuit.com
@@ -116,22 +172,25 @@ extensions: []
116
172
  extra_rdoc_files: []
117
173
  files:
118
174
  - ".gitignore"
175
+ - ".guard.rb"
119
176
  - ".rubocop.yml"
120
177
  - ".travis.yml"
121
178
  - Gemfile
122
179
  - Gemfile.lock
180
+ - Guardfile
123
181
  - LICENSE.txt
124
182
  - README.md
125
183
  - Rakefile
126
184
  - attribute_matcher.gemspec
127
185
  - lib/attribute_matcher.rb
128
186
  - lib/attribute_matcher/attribute_matcher.rb
129
- - lib/attribute_matcher/ext/rspec/chain_group.rb
187
+ - lib/attribute_matcher/ext/rspec/chain_value.rb
130
188
  - lib/attribute_matcher/ext/rspec/failure_messages.rb
131
189
  - lib/attribute_matcher/version.rb
132
190
  - spec/lib/attribute_matcher/attribute_matcher_spec.rb
133
191
  - spec/lib/attribute_matcher/usage_spec.rb
134
192
  - spec/lib/attribute_matcher/version_spec.rb
193
+ - spec/lib/attribute_matcher/virtus_spec.rb
135
194
  - spec/spec_helper.rb
136
195
  homepage: https://github.com/dwhelan/attribute_matcher
137
196
  licenses:
@@ -161,4 +220,5 @@ test_files:
161
220
  - spec/lib/attribute_matcher/attribute_matcher_spec.rb
162
221
  - spec/lib/attribute_matcher/usage_spec.rb
163
222
  - spec/lib/attribute_matcher/version_spec.rb
223
+ - spec/lib/attribute_matcher/virtus_spec.rb
164
224
  - spec/spec_helper.rb
@@ -1,30 +0,0 @@
1
- # An RSpec extension for mutually exclusive chained methods
2
- module RSpec
3
- module Matchers
4
- module DSL
5
- class Matcher
6
- class << self
7
- def chain_group(group_name, *method_names)
8
- create_match_method(group_name, *method_names)
9
- chain_methods(method_names)
10
- end
11
-
12
- private
13
-
14
- def create_match_method(group_name, *method_names)
15
- define_method :"#{group_name}_match?" do
16
- active_method_name = method_names.find { |method_name| instance_variable_get("@#{method_name}") }
17
- active_method_name ? send("#{active_method_name}_match?") : true
18
- end
19
- end
20
-
21
- def chain_methods(method_names)
22
- method_names.each do |method_name|
23
- chain(method_name) { instance_variable_set("@#{method_name}", true) }
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end