attribute_matcher 0.0.4 → 0.3

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: 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