output_attributes 0.1.0 → 0.1.1
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/Gemfile.lock +2 -2
- data/README.md +36 -22
- data/lib/output_attributes/version.rb +1 -1
- data/output_attributes.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ca0d8769aa2e316843cad1728211dbc7d0fb35165927b04a7c6d99d00cd2046
|
4
|
+
data.tar.gz: f8ee1ee5cd330c5deca707dcf34456a3d771f2a2456428c0e17cd3e96edff40f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8c06caab668a52cd446b8e045f9add37e3d141bb630745ea7aacf59f9d0fc31ef62aefa0cd6c334d13d3c8ab7da142cdaee9b0d994c817f988811541a089ffa
|
7
|
+
data.tar.gz: 4601bc74afad5daf820795bd65438113a9d92722eb398ac26546916294317aaed3eab7407c4d8c364343b0d3ab3b26bed8ae1891e9b8e04dcd3b85232cce97a3
|
data/Gemfile.lock
CHANGED
@@ -12,7 +12,7 @@ GEM
|
|
12
12
|
pry (0.12.2)
|
13
13
|
coderay (~> 1.1.0)
|
14
14
|
method_source (~> 0.9.0)
|
15
|
-
rake (
|
15
|
+
rake (13.0.1)
|
16
16
|
|
17
17
|
PLATFORMS
|
18
18
|
ruby
|
@@ -22,7 +22,7 @@ DEPENDENCIES
|
|
22
22
|
minitest (~> 5.0)
|
23
23
|
output_attributes!
|
24
24
|
pry
|
25
|
-
rake (~>
|
25
|
+
rake (~> 13.0)
|
26
26
|
|
27
27
|
BUNDLED WITH
|
28
28
|
2.0.2
|
data/README.md
CHANGED
@@ -1,10 +1,32 @@
|
|
1
1
|
# OutputAttributes
|
2
2
|
|
3
|
-
This gem
|
3
|
+
This gem helps you serialize your data object by providing an `output` class macro for defining your class. You can call `#output_attributes` to get a hash representing your object from the output helpers.
|
4
|
+
|
5
|
+
I find it jarring to keep `#to_hash` up to date on classes that have many data attributes, and a few helper methods. I often wish to just mark a method as "This method describes my data and should be part of `#to_hash`".
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'output_attributes'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install output_attributes
|
22
|
+
|
23
|
+
## Usage
|
4
24
|
|
5
25
|
Behold:
|
6
26
|
|
7
27
|
```ruby
|
28
|
+
require 'output_attributes'
|
29
|
+
|
8
30
|
class Item
|
9
31
|
include OutputAttributes
|
10
32
|
|
@@ -157,9 +179,16 @@ class Page < SimpleDelegator
|
|
157
179
|
labels(:size)
|
158
180
|
end
|
159
181
|
|
160
|
-
output
|
182
|
+
output def description
|
183
|
+
"#{name} #{size} #{color}"
|
184
|
+
end
|
161
185
|
|
162
|
-
|
186
|
+
def to_hash
|
187
|
+
output_attributes.merge(
|
188
|
+
extracted_at: Time.now,
|
189
|
+
object: self.class
|
190
|
+
)
|
191
|
+
end
|
163
192
|
|
164
193
|
private
|
165
194
|
def labels(key)
|
@@ -171,7 +200,9 @@ end
|
|
171
200
|
Page.new(nokogirilike).to_hash
|
172
201
|
```
|
173
202
|
|
174
|
-
Usually when I'm writing a method for a page object, I'm thinking "Is this part of my data output, or is this just a helper method?". I've often forgotten to update `#to_hash` when it lives
|
203
|
+
Usually when I'm writing a method for a page object, I'm already thinking "Is this part of my data output, or is this just a helper method?". I've often forgotten to update `#to_hash` when it lives far away from the method itself.
|
204
|
+
|
205
|
+
I've also tried other styles that involved packaging my data methods into a module, and then doing something like `Attributes.public_instance_methods.reduce({})...` but I wanted to give this style a spin. For now, I like it well enough.
|
175
206
|
|
176
207
|
|
177
208
|
# Fun Fact
|
@@ -184,24 +215,7 @@ memoize def my_method
|
|
184
215
|
end
|
185
216
|
```
|
186
217
|
|
187
|
-
I think this is pretty cool
|
188
|
-
|
189
|
-
|
190
|
-
## Installation
|
191
|
-
|
192
|
-
Add this line to your application's Gemfile:
|
193
|
-
|
194
|
-
```ruby
|
195
|
-
gem 'output_attributes'
|
196
|
-
```
|
197
|
-
|
198
|
-
And then execute:
|
199
|
-
|
200
|
-
$ bundle
|
201
|
-
|
202
|
-
Or install it yourself as:
|
203
|
-
|
204
|
-
$ gem install output_attributes
|
218
|
+
I think this is pretty cool. It's exactly the type of syntax I usually wished I had when creating data objects.
|
205
219
|
|
206
220
|
## Development
|
207
221
|
|
data/output_attributes.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
33
|
spec.add_development_dependency "bundler", "~> 2.0"
|
34
|
-
spec.add_development_dependency "rake", "~>
|
34
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
35
35
|
spec.add_development_dependency "minitest", "~> 5.0"
|
36
36
|
spec.add_development_dependency "pry"
|
37
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: output_attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Tilberg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
requirements: []
|
110
|
-
rubygems_version: 3.0.
|
110
|
+
rubygems_version: 3.0.3
|
111
111
|
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Easily declare a hash to represent your object using `output` attributes
|