attr_extras 3.0.0 → 3.1.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 +4 -4
- data/.travis.yml +1 -2
- data/README.md +4 -1
- data/lib/attr_extras.rb +6 -6
- data/lib/attr_extras/attr_initialize.rb +7 -2
- data/lib/attr_extras/version.rb +1 -1
- data/spec/attr_initialize_spec.rb +14 -0
- data/spec/pattr_initialize_spec.rb +14 -0
- data/spec/vattr_initialize_spec.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52ef09869d3ebdb635964d77234b8bf806b85370
|
4
|
+
data.tar.gz: 3ae234b7c52e1e766cb1399d44c09f5cfc7ee82a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 926fdc5d339f40c481cfec0fbb0a20bb7c11ffcc3fe4206fde1c25e3d6183834e04c4bec247c3c89672f22f6d48a0adb1454c93a98b734b17029503c9fffdb98
|
7
|
+
data.tar.gz: d6040789a8f309c42a5fa15f46c7168ca0a65975d4a15989bd2b0ad723c8d0de9636b7101ca05e510dd869d9a94855c5e3740a2bee72d4e055fe33679a066eba
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -30,7 +30,7 @@ This nicely complements Ruby's built-in `attr_accessor`, `attr_reader` and `attr
|
|
30
30
|
|
31
31
|
Supports positional arguments as well as optional and required hash arguments.
|
32
32
|
|
33
|
-
Also provides conveniences for creating value objects, method objects and
|
33
|
+
Also provides conveniences for creating value objects, method objects, query methods and abstract methods.
|
34
34
|
|
35
35
|
|
36
36
|
## Usage
|
@@ -45,6 +45,8 @@ Defines an initializer that takes two arguments and assigns `@foo` and `@bar`.
|
|
45
45
|
`attr_initialize [:bar, :baz!]` defines an initializer that takes one hash argument, assigning `@bar` (optional) and `@baz` (required).
|
46
46
|
|
47
47
|
|
48
|
+
`attr_initialize` can also accept a block which will be invoked after initialization. This is useful for calling `super` appropriately in subclasses or initializing private data as necessary.
|
49
|
+
|
48
50
|
### `attr_private :foo, :bar`
|
49
51
|
|
50
52
|
Defines private readers for `@foo` and `@bar`.
|
@@ -204,6 +206,7 @@ Or to see warnings (try not to have any):
|
|
204
206
|
* [Victor Arias](https://github.com/victorarias)
|
205
207
|
* [Teo Ljungberg](https://github.com/teoljungberg)
|
206
208
|
* [Kim Persson](https://github.com/lavinia)
|
209
|
+
* [Joe Ferris](https://github.com/jferris)
|
207
210
|
|
208
211
|
|
209
212
|
## License
|
data/lib/attr_extras.rb
CHANGED
@@ -5,8 +5,8 @@ require "attr_extras/utils"
|
|
5
5
|
|
6
6
|
module AttrExtras
|
7
7
|
module ModuleMethods
|
8
|
-
def attr_initialize(*names)
|
9
|
-
AttrInitialize.new(self, names).apply
|
8
|
+
def attr_initialize(*names, &block)
|
9
|
+
AttrInitialize.new(self, names, block).apply
|
10
10
|
end
|
11
11
|
|
12
12
|
def attr_private(*names)
|
@@ -36,13 +36,13 @@ module AttrExtras
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def pattr_initialize(*names)
|
40
|
-
attr_initialize(*names)
|
39
|
+
def pattr_initialize(*names, &block)
|
40
|
+
attr_initialize(*names, &block)
|
41
41
|
attr_private(*Utils.flat_names(names))
|
42
42
|
end
|
43
43
|
|
44
|
-
def vattr_initialize(*names)
|
45
|
-
attr_initialize(*names)
|
44
|
+
def vattr_initialize(*names, &block)
|
45
|
+
attr_initialize(*names, &block)
|
46
46
|
attr_value(*Utils.flat_names(names))
|
47
47
|
end
|
48
48
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class AttrExtras::AttrInitialize
|
2
|
-
def initialize(klass, names)
|
3
|
-
@klass, @names = klass, names
|
2
|
+
def initialize(klass, names, block)
|
3
|
+
@klass, @names, @block = klass, names, block
|
4
4
|
end
|
5
5
|
|
6
6
|
attr_reader :klass, :names
|
@@ -10,6 +10,7 @@ class AttrExtras::AttrInitialize
|
|
10
10
|
# The define_method block can't call our methods, so we need to make
|
11
11
|
# things available via local variables.
|
12
12
|
names = @names
|
13
|
+
block = @block
|
13
14
|
validate_arity = method(:validate_arity)
|
14
15
|
set_ivar_from_hash = method(:set_ivar_from_hash)
|
15
16
|
|
@@ -28,6 +29,10 @@ class AttrExtras::AttrInitialize
|
|
28
29
|
instance_variable_set("@#{name}", value)
|
29
30
|
end
|
30
31
|
end
|
32
|
+
|
33
|
+
if block
|
34
|
+
instance_eval(&block)
|
35
|
+
end
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
data/lib/attr_extras/version.rb
CHANGED
@@ -50,4 +50,18 @@ describe Object, ".attr_initialize" do
|
|
50
50
|
|
51
51
|
lambda { klass.new(:optional => "X") }.must_raise KeyError
|
52
52
|
end
|
53
|
+
|
54
|
+
it "can accept a block for initialization" do
|
55
|
+
klass = Class.new do
|
56
|
+
attr_initialize :value do
|
57
|
+
@copy = @value
|
58
|
+
end
|
59
|
+
|
60
|
+
attr_reader :copy
|
61
|
+
end
|
62
|
+
|
63
|
+
example = klass.new("expected")
|
64
|
+
|
65
|
+
example.copy.must_equal "expected"
|
66
|
+
end
|
53
67
|
end
|
@@ -18,4 +18,18 @@ describe Object, ".pattr_initialize" do
|
|
18
18
|
example = klass.new("Foo", :bar => "Bar", :baz => "Baz")
|
19
19
|
example.send(:baz).must_equal "Baz"
|
20
20
|
end
|
21
|
+
|
22
|
+
it "can reference private initializer methods in an initializer block" do
|
23
|
+
klass = Class.new do
|
24
|
+
pattr_initialize :value do
|
25
|
+
@copy = value
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :copy
|
29
|
+
end
|
30
|
+
|
31
|
+
example = klass.new("expected")
|
32
|
+
|
33
|
+
example.copy.must_equal "expected"
|
34
|
+
end
|
21
35
|
end
|
@@ -23,4 +23,17 @@ describe Object, ".vattr_initialize" do
|
|
23
23
|
example1.baz.must_equal "Baz"
|
24
24
|
example1.must_equal example2
|
25
25
|
end
|
26
|
+
|
27
|
+
it "can accept an initializer block" do
|
28
|
+
called = false
|
29
|
+
klass = Class.new do
|
30
|
+
vattr_initialize :value do
|
31
|
+
called = true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
klass.new("expected")
|
36
|
+
|
37
|
+
called.must_equal true
|
38
|
+
end
|
26
39
|
end
|
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: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|