active_record_ignored_attributes 0.0.2 → 0.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.
data/Readme.md CHANGED
@@ -44,6 +44,16 @@ Using `same_as?`:
44
44
  b = Address.new(address: 'Nowhere Road')
45
45
  a.same_as?(b) # => false
46
46
 
47
+ Using `has_attribute_values?`:
48
+
49
+ a = Address.new(address: 'A St.', city: "Don't care")
50
+ a.has_attribute_values?(address: 'A St.') # => true
51
+ a.has_attribute_values?(address: 'A St.', city: 'Different') # => false
52
+
53
+ b = Address.new(address: 'B St.', city: "Don't care")
54
+ b.has_attribute_values?(address: 'A St.') # => false
55
+ b.has_attribute_values?({}) # => true
56
+
47
57
 
48
58
  Installing
49
59
  ==========
@@ -128,7 +138,7 @@ or:
128
138
  RSpec
129
139
  =======
130
140
 
131
- This gem comes with a `be_same_as` matcher for RSpec.
141
+ This gem comes with a `be_same_as` and `have_attribute_values` matcher for RSpec.
132
142
 
133
143
  Add this to your spec_helper.rb:
134
144
 
@@ -152,7 +162,15 @@ and it will lovingly do a diff for you and only show you the attributes in each
152
162
  expected: #<Address address: "Nowhere Road">
153
163
  got: #<Address address: "B St.">
154
164
 
165
+ Or use `should have_attribute_values` whenever it's more convenient to specify the expected attributes with a hash instead of building a new model instance:
166
+
167
+ a = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
168
+ a.should have_attribute_values name: 'A', address: 'A Slightly Different Address'
169
+
170
+ will fail with:
155
171
 
172
+ expected: {:name=>"A", :address=>"A Slightly Different Address"}
173
+ got: {:name=>"A", :address=>"The Same Address"}
156
174
 
157
175
  Motivation
158
176
  ==========
@@ -0,0 +1,9 @@
1
+ #require 'active_support/core_ext/hash/keys'
2
+
3
+ module ActiveRecordIgnoredAttributes::HasAttributeValues
4
+ def has_attribute_values?(expected)
5
+ self.attributes.slice(*expected.stringify_keys.keys) == expected.stringify_keys
6
+ end
7
+ alias_method :has_attributes_hash?, :has_attribute_values?
8
+ end
9
+
@@ -0,0 +1,15 @@
1
+ RSpec::Matchers.define :have_attribute_values do |expected|
2
+ match do |actual|
3
+ actual.has_attribute_values?(expected)
4
+ end
5
+
6
+ failure_message_for_should do |actual|
7
+ %(expected: #{expected.symbolize_keys.inspect}\n) +
8
+ %( got: #{actual.attributes.slice(*expected.stringify_keys.keys).symbolize_keys.inspect})
9
+ end
10
+
11
+ failure_message_for_should_not do |actual|
12
+ %(expected #{actual.inspect}\n) +
13
+ %(not to have attribute values #{expected.symbolize_keys.inspect})
14
+ end
15
+ end
@@ -1 +1,2 @@
1
1
  require 'active_record_ignored_attributes/matchers/be_same_as'
2
+ require 'active_record_ignored_attributes/matchers/have_attribute_values'
@@ -1,3 +1,3 @@
1
1
  module ActiveRecordIgnoredAttributes
2
- Version = "0.0.2"
2
+ Version = "0.0.3"
3
3
  end
@@ -1,7 +1,8 @@
1
1
  require 'active_record'
2
2
  require "active_record_ignored_attributes/version"
3
- require "active_record_ignored_attributes/inspect"
4
3
  require "active_record_ignored_attributes/same_attributes_as"
4
+ require "active_record_ignored_attributes/has_attribute_values"
5
+ require "active_record_ignored_attributes/inspect"
5
6
 
6
7
  module ActiveRecordIgnoredAttributes
7
8
  extend ActiveSupport::Concern
@@ -22,5 +23,6 @@ end
22
23
  ActiveRecord::Base.class_eval do
23
24
  include ActiveRecordIgnoredAttributes
24
25
  include ActiveRecordIgnoredAttributes::SameAttributesAs
26
+ include ActiveRecordIgnoredAttributes::HasAttributeValues
25
27
  include ActiveRecordIgnoredAttributes::Inspect
26
28
  end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Address do
4
+ describe 'has_attribute_values?' do
5
+ let(:address) { Address.new }
6
+
7
+ it 'should return true if passed {}' do
8
+ a = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
9
+ a.has_attribute_values?({}).should be_true
10
+ end
11
+
12
+ it 'should return true if the given attributes have the given values' do
13
+ a = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
14
+ a.has_attribute_values?(name: 'A', address: 'The Same Address').should be_true
15
+ end
16
+
17
+ it 'should return false if any of the given attributes have different values than given' do
18
+ a = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
19
+ a.has_attribute_values?(name: 'A', address: 'The Same Address', city: "I do care after all").should be_false
20
+ a.has_attribute_values?(name: 'B', address: 'The Same Address').should be_false
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,38 @@
1
+ require 'pathname'; __DIR__ = Pathname.new(__FILE__).dirname
2
+ require __DIR__ + "../spec_helper"
3
+ require 'active_support/core_ext/string/strip'
4
+
5
+ describe "have_attribute_values" do
6
+ it "delegates to has_attribute_values?" do
7
+ object, other = Object.new, Object.new
8
+ mock(object).has_attribute_values?(other) { true }
9
+ object.should have_attribute_values(other)
10
+ end
11
+
12
+ it 'matches when it should match' do
13
+ object = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
14
+ expect do
15
+ (object.should have_attribute_values name: 'A', address: 'The Same Address').should be_true
16
+ end.to_not raise_error
17
+ end
18
+
19
+ it "reports a nice failure message for should" do
20
+ object = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
21
+ expect do
22
+ object.should have_attribute_values name: 'A', address: 'A Slightly Different Address'
23
+ end.to raise_error(<<-End.strip_heredoc.chomp)
24
+ expected: {:name=>"A", :address=>"A Slightly Different Address"}
25
+ got: {:name=>"A", :address=>"The Same Address"}
26
+ End
27
+ end
28
+
29
+ it "reports a nice failure message for should_not" do
30
+ object = Address.new( name: 'A', address: 'The Same Address', city: "Don't care")
31
+ expect do
32
+ object.should_not have_attribute_values name: 'A', address: 'The Same Address'
33
+ end.to raise_error(<<-End.strip_heredoc.chomp)
34
+ expected {Address id: nil, name: "A", address: "The Same Address", city: "Don't care", state: nil, postal_code: nil, country: nil}
35
+ not to have attribute values {:name=>"A", :address=>"The Same Address"}
36
+ End
37
+ end
38
+ end
@@ -12,7 +12,7 @@ describe "be_same_as" do
12
12
  object, other = Address.new(address: 'A Street'), Address.new(address: 'B Street')
13
13
  expect do
14
14
  object.should be_same_as(other)
15
- end.should raise_error(<<-End.strip_heredoc.chomp)
15
+ end.to raise_error(<<-End.strip_heredoc.chomp)
16
16
  expected: #<Address address: "B Street">
17
17
  got: #<Address address: "A Street">
18
18
  End
@@ -22,7 +22,7 @@ describe "be_same_as" do
22
22
  object, other = Address.new(address: 'A Street'), Address.new(address: 'A Street')
23
23
  expect do
24
24
  object.should_not be_same_as(other)
25
- end.should raise_error(<<-End.strip_heredoc.chomp)
25
+ end.to raise_error(<<-End.strip_heredoc.chomp)
26
26
  expected: {Address id: nil, name: nil, address: "A Street", city: nil, state: nil, postal_code: nil, country: nil}
27
27
  to not be same_as: {Address id: nil, name: nil, address: "A Street", city: nil, state: nil, postal_code: nil, country: nil}
28
28
  End
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: active_record_ignored_attributes
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tyler Rick
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-21 00:00:00 -07:00
13
+ date: 2011-09-07 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -119,14 +119,18 @@ files:
119
119
  - active_record_ignored_attributes.gemspec
120
120
  - lib/active_record_ignored_attributes.rb
121
121
  - lib/active_record_ignored_attributes/comparison.rb
122
+ - lib/active_record_ignored_attributes/has_attribute_values.rb
122
123
  - lib/active_record_ignored_attributes/inspect.rb
123
124
  - lib/active_record_ignored_attributes/matchers.rb
124
125
  - lib/active_record_ignored_attributes/matchers/be_same_as.rb
126
+ - lib/active_record_ignored_attributes/matchers/have_attribute_values.rb
125
127
  - lib/active_record_ignored_attributes/same_attributes_as.rb
126
128
  - lib/active_record_ignored_attributes/version.rb
127
129
  - spec/attributes_spec.rb
130
+ - spec/has_attribute_values_spec.rb
128
131
  - spec/inspect_spec.rb
129
- - spec/matchers_spec.rb
132
+ - spec/matchers/have_attribute_values_spec.rb
133
+ - spec/matchers/same_as_spec.rb
130
134
  - spec/same_as_spec.rb
131
135
  - spec/spec_helper.rb
132
136
  - spec/support/database.mysql2.yml