has_attributes 0.0.2 → 0.0.4
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 +15 -0
- data/History.md +9 -1
- data/README.md +3 -3
- data/has_attributes.gemspec +2 -2
- data/lib/has_attributes/version.rb +1 -1
- data/lib/has_attributes.rb +10 -5
- data/spec/has_attributes_spec.rb +12 -2
- metadata +13 -21
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YzJlODZkMGM5MTI5NWFiYzM5YTE3NDYxNzgxODg2MjA3MGJlZTIyZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MjNmNTRkYTMwNTVkMzg4YTBkNzVmOGU3ODA4ODRiNjNhNmIwMjhjMQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjVlNmUyNTlkMWViMzEzZDE1YzI3NzkwN2Q1YmU5ZDJmYjFiYmE4ZWQyMDUy
|
10
|
+
ZDJmNzMzNzc1YzVmNTk1MzQwYmMwMDcwZmIzYzgyNDQ2NTUwMzBhMzI0Zjhj
|
11
|
+
NWZlMzNkZmQ4OTU5ZWViN2YzMTQwNDQyNDZiMDViZDFhMDg4ZGE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NmQxZGFjMWY1YzQ1M2VkZTMwYTcwNjdjNGY0MmZkMTNhNGY4ODVhNWI0OTk1
|
14
|
+
YmFhNmEwNzE3NTQwMjEyMTk2NDI2NWU5OGQzZjc3MGNjM2M2OTVhNTY4OGM3
|
15
|
+
OWJmOTA4YzA2NGE2NmUwNTQzNDEwNDBjZDIzODAzYTNhNDlmMGQ=
|
data/History.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3 / 2014-02-08
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Set model_attributes to an empty set in included hook
|
5
|
+
* Filter out nils from #attributes calls
|
6
|
+
* Update readme
|
7
|
+
|
8
|
+
|
9
|
+
0.0.2 / 2014-02-07
|
2
10
|
==================
|
3
11
|
|
4
12
|
* Use public_send for public instance methods
|
data/README.md
CHANGED
@@ -12,15 +12,15 @@ has_attributes delivers the following class and instance methods:
|
|
12
12
|
|
13
13
|
#### .model_attributes() → Set
|
14
14
|
|
15
|
-
An attribute accessor on the class that contains a set of attributes specified with `has_attributes`
|
15
|
+
An attribute accessor on the class that contains a set of attributes specified with `has_attributes`. It is added to the class via the included hook when `include`ing the module. If there is no call to `has_attributes`, then calling `model_attributes` on the class will be `nil`.
|
16
16
|
|
17
17
|
#### .has_attributes(*args) → nil
|
18
18
|
|
19
|
-
Takes any number of symbols or strings and defines attribute accessors for those attributes.
|
19
|
+
Takes any number of symbols or strings and defines attribute accessors for those attributes. `has_attributes` will attempt to copy any existing attributes from the parent class unless the last argument is a `Hash` and contains an `inherit` key set to `false`.
|
20
20
|
|
21
21
|
#### #attributes() → Hash
|
22
22
|
|
23
|
-
Returns a hash whose keys are
|
23
|
+
Returns a hash whose keys are the attributes set with `has_attributes`. Only the keys whose values are non `nil` will be returned.
|
24
24
|
|
25
25
|
#### #attributes=(attrs) → Hash
|
26
26
|
|
data/has_attributes.gemspec
CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "rspec"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.1"
|
23
|
+
spec.add_development_dependency "rspec", "~> 2.14"
|
24
24
|
end
|
data/lib/has_attributes.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'has_attributes/version'
|
2
2
|
require "set"
|
3
3
|
|
4
4
|
module HasAttributes
|
5
5
|
def self.included(base)
|
6
6
|
base.class.send(:attr_accessor, :model_attributes)
|
7
|
+
base.send(:model_attributes=, Set.new)
|
7
8
|
base.extend(ClassMethods)
|
8
9
|
end
|
9
10
|
|
@@ -18,7 +19,7 @@ module HasAttributes
|
|
18
19
|
Set.new
|
19
20
|
end
|
20
21
|
|
21
|
-
attrs =
|
22
|
+
attrs = model_attributes.merge(attrs.map(&:to_sym))
|
22
23
|
|
23
24
|
if inherit_parent_attributes
|
24
25
|
attrs = parent_attributes.merge(attrs)
|
@@ -38,13 +39,17 @@ module HasAttributes
|
|
38
39
|
end
|
39
40
|
|
40
41
|
def attributes=(attrs)
|
41
|
-
self.class.model_attributes.each
|
42
|
-
|
42
|
+
self.class.model_attributes.each do |attr|
|
43
|
+
public_send((attr.to_s << "=").to_sym, attrs[attr])
|
44
|
+
end
|
43
45
|
end
|
44
46
|
|
45
47
|
def attributes
|
46
48
|
self.class.model_attributes.reduce({}) do |memo, attr|
|
47
|
-
|
49
|
+
unless (value = public_send(attr)).nil?
|
50
|
+
memo[attr] = value
|
51
|
+
end
|
52
|
+
memo
|
48
53
|
end
|
49
54
|
end
|
50
55
|
end
|
data/spec/has_attributes_spec.rb
CHANGED
@@ -78,6 +78,13 @@ describe HasAttributes do
|
|
78
78
|
describe "#attributes" do
|
79
79
|
let(:klass) { create_model :attr1, :attr2 }
|
80
80
|
|
81
|
+
it "returns an empty hash when no attributes were defined" do
|
82
|
+
instance = Class.new { include HasAttributes }.new
|
83
|
+
|
84
|
+
instance.attributes = {a: true, b: false}
|
85
|
+
expect(instance.attributes).to eq({})
|
86
|
+
end
|
87
|
+
|
81
88
|
it "sets a hash of attributes on the instance" do
|
82
89
|
instance = klass.new
|
83
90
|
|
@@ -98,7 +105,8 @@ describe HasAttributes do
|
|
98
105
|
expect(instance.attr1).to be_nil
|
99
106
|
expect(instance.attr2).to be_false
|
100
107
|
|
101
|
-
expect(instance.attributes).
|
108
|
+
expect(instance.attributes).not_to include(:attr1)
|
109
|
+
expect(instance.attributes).to include(attr2: false)
|
102
110
|
end
|
103
111
|
|
104
112
|
it "only sets attributes that were declared with .has_attributes" do
|
@@ -109,7 +117,9 @@ describe HasAttributes do
|
|
109
117
|
expect(instance.attr1).to be_true
|
110
118
|
expect(instance.attr2).to be_nil
|
111
119
|
|
112
|
-
expect(instance.attributes).to
|
120
|
+
expect(instance.attributes).to include(attr1: true)
|
121
|
+
expect(instance.attributes).not_to include(:attr2)
|
122
|
+
expect(instance.attributes).not_to include(:another_attr)
|
113
123
|
end
|
114
124
|
end
|
115
125
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ben Reinhart
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,35 +27,31 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
33
|
+
version: '10.1'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
40
|
+
version: '10.1'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
47
|
+
version: '2.14'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
54
|
+
version: '2.14'
|
62
55
|
description: Extend your classes with simple methods for creating elegant plain-ruby
|
63
56
|
models
|
64
57
|
email:
|
@@ -82,27 +75,26 @@ files:
|
|
82
75
|
homepage: https://github.com/benjreinhart/has_attributes
|
83
76
|
licenses:
|
84
77
|
- MIT
|
78
|
+
metadata: {}
|
85
79
|
post_install_message:
|
86
80
|
rdoc_options: []
|
87
81
|
require_paths:
|
88
82
|
- lib
|
89
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
84
|
requirements:
|
92
85
|
- - ! '>='
|
93
86
|
- !ruby/object:Gem::Version
|
94
87
|
version: '0'
|
95
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
89
|
requirements:
|
98
90
|
- - ! '>='
|
99
91
|
- !ruby/object:Gem::Version
|
100
92
|
version: '0'
|
101
93
|
requirements: []
|
102
94
|
rubyforge_project:
|
103
|
-
rubygems_version:
|
95
|
+
rubygems_version: 2.2.2
|
104
96
|
signing_key:
|
105
|
-
specification_version:
|
97
|
+
specification_version: 4
|
106
98
|
summary: Better plain-ruby models
|
107
99
|
test_files:
|
108
100
|
- spec/has_attributes_spec.rb
|