attr_extras 4.1.0 → 4.2.0

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: 08a7329a2b945733d0baf670533dd8801c1880a9
4
- data.tar.gz: 7f01ba7e4aadab65bb51ec5cdca127f97be8461e
3
+ metadata.gz: 02abc2f4fe382b84b370d6f777be15a50bf136c7
4
+ data.tar.gz: bfee4d693acfdb8c1a15f9ed50677be6f21149a5
5
5
  SHA512:
6
- metadata.gz: c3df45d212321d6d1e1046c7439fc9825e047b8b1d769f2b5e2b453f028449dec6bd07034560f821b1e43f3cb6446a13ac5a18edbb1e2725e49c6d44b895863d
7
- data.tar.gz: ba8800473f4c53b5b83118bd125fa4212728610f2a65475c92af65ef5611094810c343cdf20ab493b675adfd1b5f9cdbe10bfaaae600a7572c5416c546fc186e
6
+ metadata.gz: 5a44ccd28222d3708b7f4b87d74f7f1a605b462ef8980e6b510844e8eca0aa2db9e4f0ae12df38f33b66bf9bbf4a48b08321763ba223ab8bea0abd2eb5c9bfe0
7
+ data.tar.gz: eff2da3b058ff22016362fec1e5a92e5a9c3cc5c1d88eea67341cc4bfec9b421b572d4296996c63b3baf50dbe168f150aae5111523ac0cee72afaad9f707dcb2
data/README.md CHANGED
@@ -35,11 +35,12 @@ Also provides conveniences for creating value objects, method objects, query met
35
35
 
36
36
  ## Usage
37
37
 
38
- * [`pattr_initialize`](#pattr_initialize)
39
- * [`vattr_initialize`](#vattr_initialize)
40
38
  * [`attr_initialize`](#attr_initialize)
41
39
  * [`attr_private`](#attr_private)
42
40
  * [`attr_value`](#attr_value)
41
+ * [`pattr_initialize`](#pattr_initialize) / [`attr_private_initialize`](#attr_private_initialize)
42
+ * [`vattr_initialize`](#vattr_initialize) / [`attr_value_initialize`](#attr_value_initialize)
43
+ * [`rattr_initialize`](#rattr_initialize) / [`attr_reader_initialize`](#attr_reader_initialize)
43
44
  * [`static_facade`](#static_facade)
44
45
  * [`method_object`](#method_object)
45
46
  * [`attr_implement`](#attr_implement)
@@ -47,16 +48,41 @@ Also provides conveniences for creating value objects, method objects, query met
47
48
  * [`attr_id_query`](#attr_id_query)
48
49
 
49
50
 
51
+ ### `attr_initialize`
52
+
53
+ `attr_initialize :foo, :bar` defines an initializer that takes two arguments and assigns `@foo` and `@bar`.
54
+
55
+ `attr_initialize :foo, [:bar, :baz!]` defines an initializer that takes one regular argument, assigning `@foo`, and one hash argument, assigning `@bar` (optional) and `@baz` (required).
56
+
57
+ `attr_initialize [:bar, :baz!]` defines an initializer that takes one hash argument, assigning `@bar` (optional) and `@baz` (required).
58
+
59
+ `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.
60
+
61
+
62
+ ### `attr_private`
63
+
64
+ `attr_private :foo, :bar` defines private readers for `@foo` and `@bar`.
65
+
66
+
67
+ ### `attr_value`
68
+
69
+ `attr_value :foo, :bar` defines public readers for `@foo` and `@bar` and also defines object equality: two value objects of the same class with the same values will be considered equal (with `==` and `eql?`, in `Set`s, as `Hash` keys etc).
70
+
71
+ It does not define writers, because [value objects](http://en.wikipedia.org/wiki/Value_object) are typically immutable.
72
+
50
73
 
51
74
  ### `pattr_initialize`
75
+ ### `attr_private_initialize`
52
76
 
53
- `pattr_initialize :foo, :bar` defines both initializer and private readers: shortcut for
77
+ `pattr_initialize :foo, :bar` defines both initializer and private readers. Shortcut for:
54
78
 
55
79
  ``` ruby
56
80
  attr_initialize :foo, :bar
57
81
  attr_private :foo, :bar
58
82
  ```
59
83
 
84
+ `pattr_initialize` is aliased as `attr_private_initialize` if you prefer a longer but clearer name.
85
+
60
86
  Example:
61
87
 
62
88
  ``` ruby
@@ -73,16 +99,18 @@ Item.new("Pug", 100).price_with_vat # => 125.0
73
99
 
74
100
  [The `attr_initialize` notation](#attr_initialize) for hash arguments is also supported: `pattr_initialize :foo, [:bar, :baz!]`
75
101
 
76
-
77
102
  ### `vattr_initialize`
103
+ ### `attr_value_initialize`
78
104
 
79
- `vattr_initialize :foo, :bar` defines initializer, public readers and [value object identity](#attr_value): shortcut for
105
+ `vattr_initialize :foo, :bar` defines initializer, public readers and [value object identity](#attr_value). Shortcut for:
80
106
 
81
107
  ``` ruby
82
108
  attr_initialize :foo, :bar
83
109
  attr_value :foo, :bar
84
110
  ```
85
111
 
112
+ `vattr_initialize` is aliased as `attr_value_initialize` if you prefer a longer but clearer name.
113
+
86
114
  Example:
87
115
 
88
116
  ``` ruby
@@ -97,28 +125,34 @@ Country.new("SE").code # => "SE"
97
125
  [The `attr_initialize` notation](#attr_initialize) for hash arguments is also supported: `vattr_initialize :foo, [:bar, :baz!]`
98
126
 
99
127
 
100
- ### `attr_initialize`
101
-
102
- `attr_initialize :foo, :bar` defines an initializer that takes two arguments and assigns `@foo` and `@bar`.
103
-
104
- `attr_initialize :foo, [:bar, :baz!]` defines an initializer that takes one regular argument, assigning `@foo`, and one hash argument, assigning `@bar` (optional) and `@baz` (required).
105
-
106
- `attr_initialize [:bar, :baz!]` defines an initializer that takes one hash argument, assigning `@bar` (optional) and `@baz` (required).
107
-
108
- `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.
128
+ ### `rattr_initialize`
129
+ ### `attr_reader_initialize`
109
130
 
131
+ `rattr_initialize :foo, :bar` defines both initializer and public readers. Shortcut for:
110
132
 
111
- ### `attr_private`
133
+ ``` ruby
134
+ attr_initialize :foo, :bar
135
+ attr_reader :foo, :bar
136
+ ```
112
137
 
113
- `attr_private :foo, :bar` defines private readers for `@foo` and `@bar`.
138
+ `rattr_initialize` is aliased as `attr_reader_initialize` if you prefer a longer but clearer name.
114
139
 
140
+ Example:
115
141
 
116
- ### `attr_value`
142
+ ``` ruby
143
+ class PublishBook
144
+ rattr_initalize :book_name, :publisher_backend
117
145
 
118
- `attr_value :foo, :bar` defines public readers for `@foo` and `@bar` and also defines object equality: two value objects of the same class with the same values will be considered equal (with `==` and `eql?`, in `Set`s, as `Hash` keys etc).
146
+ def call
147
+ publisher_backend.publish book_name
148
+ end
149
+ end
119
150
 
120
- It does not define writers, because [value objects](http://en.wikipedia.org/wiki/Value_object) are typically immutable.
151
+ service = PublishBook.new("A Novel")
152
+ service.book_name # => "A Novel"
153
+ ```
121
154
 
155
+ [The `attr_initialize` notation](#attr_initialize) for hash arguments is also supported: `rattr_initialize :foo, [:bar, :baz!]`
122
156
 
123
157
  ### `static_facade`
124
158
 
@@ -307,6 +341,7 @@ Or to see warnings (try not to have any):
307
341
  * [Teo Ljungberg](https://github.com/teoljungberg)
308
342
  * [Kim Persson](https://github.com/lavinia)
309
343
  * [Joe Ferris](https://github.com/jferris)
344
+ * [Julien Vanier](https://github.com/monkbroc)
310
345
 
311
346
 
312
347
  ## License
data/lib/attr_extras.rb CHANGED
@@ -41,11 +41,22 @@ module AttrExtras
41
41
  attr_private(*Utils.flat_names(names))
42
42
  end
43
43
 
44
+ alias_method :attr_private_initialize, :pattr_initialize
45
+
44
46
  def vattr_initialize(*names, &block)
45
47
  attr_initialize(*names, &block)
46
48
  attr_value(*Utils.flat_names(names))
47
49
  end
48
50
 
51
+ alias_method :attr_value_initialize, :vattr_initialize
52
+
53
+ def rattr_initialize(*names, &block)
54
+ attr_initialize(*names, &block)
55
+ attr_reader(*Utils.flat_names(names))
56
+ end
57
+
58
+ alias_method :attr_reader_initialize, :rattr_initialize
59
+
49
60
  def static_facade(method_name, *names)
50
61
  define_singleton_method(method_name) do |*values|
51
62
  new(*values).public_send(method_name)
@@ -1,3 +1,3 @@
1
1
  module AttrExtras
2
- VERSION = "4.1.0"
2
+ VERSION = "4.2.0"
3
3
  end
@@ -32,4 +32,13 @@ describe Object, ".pattr_initialize" do
32
32
 
33
33
  example.copy.must_equal "expected"
34
34
  end
35
+
36
+ it "accepts the alias attr_private_initializer" do
37
+ klass = Class.new do
38
+ attr_private_initialize :foo, :bar
39
+ end
40
+
41
+ example = klass.new("Foo", "Bar")
42
+ example.send(:foo).must_equal "Foo"
43
+ end
35
44
  end
@@ -0,0 +1,30 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe Object, ".rattr_initialize" do
4
+ it "creates both initializer and public readers" do
5
+ klass = Class.new do
6
+ rattr_initialize :foo, :bar
7
+ end
8
+
9
+ example = klass.new("Foo", "Bar")
10
+ example.public_send(:foo).must_equal "Foo"
11
+ end
12
+
13
+ it "works with hash ivars" do
14
+ klass = Class.new do
15
+ rattr_initialize :foo, [:bar, :baz!]
16
+ end
17
+
18
+ example = klass.new("Foo", :bar => "Bar", :baz => "Baz")
19
+ example.public_send(:baz).must_equal "Baz"
20
+ end
21
+
22
+ it "accepts the alias attr_reader_initializer" do
23
+ klass = Class.new do
24
+ attr_reader_initialize :foo, :bar
25
+ end
26
+
27
+ example = klass.new("Foo", "Bar")
28
+ example.public_send(:foo).must_equal "Foo"
29
+ end
30
+ end
@@ -36,4 +36,16 @@ describe Object, ".vattr_initialize" do
36
36
 
37
37
  called.must_equal true
38
38
  end
39
+
40
+ it "accepts the alias attr_value_initializer" do
41
+ klass = Class.new do
42
+ attr_value_initialize :foo, :bar
43
+ end
44
+
45
+ example1 = klass.new("Foo", "Bar")
46
+ example2 = klass.new("Foo", "Bar")
47
+
48
+ example1.foo.must_equal "Foo"
49
+ example1.must_equal example2
50
+ end
39
51
  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: 4.1.0
4
+ version: 4.2.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: 2015-02-09 00:00:00.000000000 Z
13
+ date: 2015-02-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest
@@ -70,6 +70,7 @@ files:
70
70
  - spec/attr_value_spec.rb
71
71
  - spec/method_object_spec.rb
72
72
  - spec/pattr_initialize_spec.rb
73
+ - spec/rattr_initialize_spec.rb
73
74
  - spec/spec_helper.rb
74
75
  - spec/static_facade_spec.rb
75
76
  - spec/vattr_initialize_spec.rb
@@ -93,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
94
  version: '0'
94
95
  requirements: []
95
96
  rubyforge_project:
96
- rubygems_version: 2.2.2
97
+ rubygems_version: 2.4.5
97
98
  signing_key:
98
99
  specification_version: 4
99
100
  summary: Takes some boilerplate out of Ruby with methods like attr_initialize.
@@ -107,6 +108,7 @@ test_files:
107
108
  - spec/attr_value_spec.rb
108
109
  - spec/method_object_spec.rb
109
110
  - spec/pattr_initialize_spec.rb
111
+ - spec/rattr_initialize_spec.rb
110
112
  - spec/spec_helper.rb
111
113
  - spec/static_facade_spec.rb
112
114
  - spec/vattr_initialize_spec.rb