attr_extras 2.1.1 → 2.2.0
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 +5 -13
- data/README.md +5 -5
- data/lib/attr_extras.rb +8 -0
- data/lib/attr_extras/version.rb +1 -1
- data/spec/attr_extras_spec.rb +24 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MDY2ZjIwMWM4MzVjZWYwYWE2ZGFhZGYxMDRmMWU3MzBlMTFiOTFkOQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d34aacc5f3feb712ffe95b8bf2a52aa72062beb4
|
4
|
+
data.tar.gz: 1fac1c2c1dd6039bb6f6a0846b74bb80989bcfa6
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NTk3MjA5MGRjNDg5NjllNWYwNGZlNTUzZTYyYmQ0MGI3ZGI0MTFhOWY1Nzg1
|
11
|
-
OTUxMzlhODkxOGRjNDQwOTM0YzlkZWJiZWNiZTEyODg0ZDdhMjk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ODc1ODQ2YmQwNzdkNWVlZWZmZTA3NDllNGIyZDFlNmQyYjNkNWRiODEyMTI3
|
14
|
-
NmQ3N2Y0NTc3ZDMxOWM2YzAyMmYxZDJkZmFlM2MxZjA4MTUxODk2ZTQ3ODcx
|
15
|
-
YzcwNWEwZGM2N2Q4NDU5ZjI1YWM4NTk5YWIxMmIzY2Y0MGY1ZDM=
|
6
|
+
metadata.gz: bd82d64a1cb6f42556a659e03dd8160ada1b64cccbce889ece550bfbf8afb63f5aad6e7b1d848f3de70d3f753f9148859f4a33ade5ceba0f0531fcc76e11b445
|
7
|
+
data.tar.gz: eef168267a504e30f5740c54c7b54dcfc476dab70a372cc3d3e3fd5889dbf5e88316782d19a95345571430412adb0a89d47e26b844ed0c7cfcd5813fdc18710a
|
data/README.md
CHANGED
@@ -52,7 +52,7 @@ Defines private readers for `@foo` and `@bar`.
|
|
52
52
|
|
53
53
|
### `attr_value :foo, :bar`
|
54
54
|
|
55
|
-
Defines public readers. Does not define writers, as value objects are typically immutable.
|
55
|
+
Defines public readers. Does not define writers, as [value objects](http://en.wikipedia.org/wiki/Value_object) are typically immutable.
|
56
56
|
|
57
57
|
Defines object equality: two value objects of the same class with the same values are equal.
|
58
58
|
|
@@ -66,7 +66,7 @@ attr_initialize :foo, :bar
|
|
66
66
|
attr_private :foo, :bar
|
67
67
|
```
|
68
68
|
|
69
|
-
The `attr_initialize` notation
|
69
|
+
The `attr_initialize` notation for hash arguments is also supported: `pattr_initialize :foo, [:bar, :baz!]`
|
70
70
|
|
71
71
|
|
72
72
|
### `vattr_initialize :foo, :bar`
|
@@ -78,7 +78,7 @@ attr_initialize :foo, :bar
|
|
78
78
|
attr_value :foo, :bar
|
79
79
|
```
|
80
80
|
|
81
|
-
The `attr_initialize` notation
|
81
|
+
The `attr_initialize` notation for hash arguments is also supported: `vattr_initialize :foo, [:bar, :baz!]`
|
82
82
|
|
83
83
|
|
84
84
|
### `method_object :fooable?, :foo`<br>
|
@@ -127,7 +127,7 @@ def self.fooable?(foo)
|
|
127
127
|
end
|
128
128
|
```
|
129
129
|
|
130
|
-
The `attr_initialize` notation
|
130
|
+
The `attr_initialize` notation for hash arguments is also supported: `method_object :fooable?, :foo, [:bar, :baz!]`
|
131
131
|
|
132
132
|
You don't have to specify readers if you don't want them: `method_object :fooable?` is also valid.
|
133
133
|
|
@@ -180,7 +180,7 @@ Or install it yourself as:
|
|
180
180
|
|
181
181
|
## License
|
182
182
|
|
183
|
-
Copyright (c) 2012 [Barsoom AB](http://barsoom.se)
|
183
|
+
Copyright (c) 2012-2014 [Barsoom AB](http://barsoom.se)
|
184
184
|
|
185
185
|
MIT License
|
186
186
|
|
data/lib/attr_extras.rb
CHANGED
@@ -22,6 +22,14 @@ module AttrExtras
|
|
22
22
|
|
23
23
|
names.all? { |attr| self.public_send(attr) == other.public_send(attr) }
|
24
24
|
end
|
25
|
+
|
26
|
+
# Both #eql? and #hash are required for hash identity.
|
27
|
+
|
28
|
+
alias_method :eql?, :==
|
29
|
+
|
30
|
+
define_method(:hash) do
|
31
|
+
[self.class.name, *names.map { |attr| public_send(attr) }].hash
|
32
|
+
end
|
25
33
|
end
|
26
34
|
|
27
35
|
def pattr_initialize(*names)
|
data/lib/attr_extras/version.rb
CHANGED
data/spec/attr_extras_spec.rb
CHANGED
@@ -213,6 +213,30 @@ describe Object, ".attr_value" do
|
|
213
213
|
|
214
214
|
assert instance != "a string"
|
215
215
|
end
|
216
|
+
|
217
|
+
it "hashes objects the same if they have the same attributes" do
|
218
|
+
klass = Class.new do
|
219
|
+
attr_initialize :foo
|
220
|
+
attr_value :foo
|
221
|
+
end
|
222
|
+
|
223
|
+
example1 = klass.new("Foo")
|
224
|
+
example2 = klass.new("Foo")
|
225
|
+
example3 = klass.new("Bar")
|
226
|
+
|
227
|
+
example1.hash.must_equal example2.hash
|
228
|
+
example1.hash.wont_equal example3.hash
|
229
|
+
|
230
|
+
assert example1.eql?(example2), "Examples should be 'eql?'"
|
231
|
+
refute example2.eql?(example3), "Examples should not be 'eql?'"
|
232
|
+
|
233
|
+
Set[example1, example2, example3].length.must_equal 2
|
234
|
+
|
235
|
+
hash = {}
|
236
|
+
hash[example1] = :awyeah
|
237
|
+
hash[example3] = :wat
|
238
|
+
hash[example2].must_equal :awyeah
|
239
|
+
end
|
216
240
|
end
|
217
241
|
|
218
242
|
describe Object, ".attr_id_query" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_extras
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
name: rake
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - '>='
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0'
|
29
29
|
description:
|
@@ -57,17 +57,17 @@ require_paths:
|
|
57
57
|
- lib
|
58
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - '>='
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
requirements: []
|
69
69
|
rubyforge_project:
|
70
|
-
rubygems_version: 2.2.
|
70
|
+
rubygems_version: 2.2.0
|
71
71
|
signing_key:
|
72
72
|
specification_version: 4
|
73
73
|
summary: Takes some boilerplate out of Ruby with methods like attr_initialize.
|