property_sets 2.1.0 → 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.
- data/README.md +3 -0
- data/lib/property_sets/active_record_extension.rb +25 -7
- data/lib/property_sets/version.rb +1 -1
- data/test/test_property_sets.rb +33 -0
- metadata +21 -13
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -34,6 +34,9 @@ account.settings.featured?
|
|
34
34
|
|
35
35
|
# Short hand for setting one or more values
|
36
36
|
account.settings.set(:version => "v1.2", :activated => true)
|
37
|
+
|
38
|
+
# Short hand for getting a hash with pairs for each key argument
|
39
|
+
account.settings.get([:version, :activated])
|
37
40
|
```
|
38
41
|
|
39
42
|
### Validations
|
@@ -20,6 +20,21 @@ module PropertySets
|
|
20
20
|
|
21
21
|
hash_opts = {:class_name => property_class.name, :autosave => true, :dependent => :destroy}.merge(options)
|
22
22
|
has_many association, hash_opts do
|
23
|
+
# Accepts an array of names as strings or symbols and returns a hash.
|
24
|
+
def get(keys = [])
|
25
|
+
property_keys = if keys.empty?
|
26
|
+
association_class.keys
|
27
|
+
else
|
28
|
+
association_class.keys & keys.map(&:to_s)
|
29
|
+
end
|
30
|
+
|
31
|
+
property_pairs = property_keys.map do |name|
|
32
|
+
value = lookup_value(association_class.type(name), name)
|
33
|
+
[name.to_s, value]
|
34
|
+
end.flatten
|
35
|
+
HashWithIndifferentAccess[*property_pairs]
|
36
|
+
end
|
37
|
+
|
23
38
|
# Accepts a name value pair hash { :name => 'value', :pairs => true } and builds a property for each key
|
24
39
|
def set(property_pairs, with_protection = false)
|
25
40
|
property_pairs.keys.each do |name|
|
@@ -145,17 +160,20 @@ module PropertySets
|
|
145
160
|
# This finder method returns the property if present, otherwise a new instance with the default value.
|
146
161
|
# It does not have the side effect of adding a new setting object.
|
147
162
|
def lookup_or_default(arg)
|
148
|
-
instance
|
149
|
-
instance ||=
|
163
|
+
instance = lookup_without_default(arg)
|
164
|
+
instance ||= association_class.new(:value => raw_default(arg))
|
165
|
+
instance.value_serialized = property_serialized?(arg)
|
166
|
+
instance
|
167
|
+
end
|
168
|
+
|
169
|
+
def association_class
|
170
|
+
@association_class ||= begin
|
150
171
|
if ActiveRecord::VERSION::STRING >= "3.1.0"
|
151
|
-
|
172
|
+
proxy_association.klass
|
152
173
|
else
|
153
|
-
|
174
|
+
@reflection.klass
|
154
175
|
end
|
155
|
-
association_class.new(:value => raw_default(arg))
|
156
176
|
end
|
157
|
-
instance.value_serialized = property_serialized?(arg)
|
158
|
-
instance
|
159
177
|
end
|
160
178
|
end
|
161
179
|
end
|
data/test/test_property_sets.rb
CHANGED
@@ -145,6 +145,39 @@ class TestPropertySets < ActiveSupport::TestCase
|
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
+
context "#get" do
|
149
|
+
setup { @account.settings.set(:baz => "456") }
|
150
|
+
|
151
|
+
should "fetch property pairs with string arguments" do
|
152
|
+
assert @account.settings.lookup_without_default(:baz)
|
153
|
+
assert_equal({"baz" => "456"}, @account.settings.get(["baz"]))
|
154
|
+
end
|
155
|
+
|
156
|
+
should "fetch property pairs with symbol arguments" do
|
157
|
+
assert_equal({"baz" => "456"}, @account.settings.get([:baz]))
|
158
|
+
end
|
159
|
+
|
160
|
+
should "return all property pairs if no arguments are provided" do
|
161
|
+
assert_same_elements(
|
162
|
+
["foo", "bar", "baz", "hep", "pro"],
|
163
|
+
@account.settings.get.keys
|
164
|
+
)
|
165
|
+
end
|
166
|
+
|
167
|
+
should "ignore non-existent keys" do
|
168
|
+
assert_equal({"baz" => "456"}, @account.settings.get([:baz, :red]))
|
169
|
+
end
|
170
|
+
|
171
|
+
should "include default property pairs" do
|
172
|
+
assert_nil @account.settings.lookup_without_default(:hep)
|
173
|
+
assert_equal({"hep" => "skep"}, @account.settings.get(["hep"]))
|
174
|
+
end
|
175
|
+
|
176
|
+
should "return a hash with values that can be fetched by string or symbol" do
|
177
|
+
assert_equal "456", @account.settings.get(["baz"]).fetch(:baz)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
148
181
|
context "#set" do
|
149
182
|
should "support writing multiple values to the association" do
|
150
183
|
assert !@account.settings.foo?
|
metadata
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: property_sets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Morten Primdahl
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-20 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activesupport
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- - '>='
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 2.3.14
|
20
22
|
- - <
|
@@ -23,8 +25,9 @@ dependencies:
|
|
23
25
|
type: :runtime
|
24
26
|
prerelease: false
|
25
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
26
29
|
requirements:
|
27
|
-
- - '>='
|
30
|
+
- - ! '>='
|
28
31
|
- !ruby/object:Gem::Version
|
29
32
|
version: 2.3.14
|
30
33
|
- - <
|
@@ -33,8 +36,9 @@ dependencies:
|
|
33
36
|
- !ruby/object:Gem::Dependency
|
34
37
|
name: activerecord
|
35
38
|
requirement: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
36
40
|
requirements:
|
37
|
-
- - '>='
|
41
|
+
- - ! '>='
|
38
42
|
- !ruby/object:Gem::Version
|
39
43
|
version: 2.3.14
|
40
44
|
- - <
|
@@ -43,8 +47,9 @@ dependencies:
|
|
43
47
|
type: :runtime
|
44
48
|
prerelease: false
|
45
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
46
51
|
requirements:
|
47
|
-
- - '>='
|
52
|
+
- - ! '>='
|
48
53
|
- !ruby/object:Gem::Version
|
49
54
|
version: 2.3.14
|
50
55
|
- - <
|
@@ -53,15 +58,17 @@ dependencies:
|
|
53
58
|
- !ruby/object:Gem::Dependency
|
54
59
|
name: json
|
55
60
|
requirement: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
56
62
|
requirements:
|
57
|
-
- - '>='
|
63
|
+
- - ! '>='
|
58
64
|
- !ruby/object:Gem::Version
|
59
65
|
version: '0'
|
60
66
|
type: :runtime
|
61
67
|
prerelease: false
|
62
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
63
70
|
requirements:
|
64
|
-
- - '>='
|
71
|
+
- - ! '>='
|
65
72
|
- !ruby/object:Gem::Version
|
66
73
|
version: '0'
|
67
74
|
description: This gem is an ActiveRecord extension which provides a convenient interface
|
@@ -101,25 +108,26 @@ files:
|
|
101
108
|
homepage: http://github.com/zendesk/property_sets
|
102
109
|
licenses:
|
103
110
|
- MIT
|
104
|
-
metadata: {}
|
105
111
|
post_install_message:
|
106
112
|
rdoc_options: []
|
107
113
|
require_paths:
|
108
114
|
- lib
|
109
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
110
117
|
requirements:
|
111
|
-
- - '>='
|
118
|
+
- - ! '>='
|
112
119
|
- !ruby/object:Gem::Version
|
113
120
|
version: '0'
|
114
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
115
123
|
requirements:
|
116
|
-
- - '>='
|
124
|
+
- - ! '>='
|
117
125
|
- !ruby/object:Gem::Version
|
118
126
|
version: '0'
|
119
127
|
requirements: []
|
120
128
|
rubyforge_project:
|
121
|
-
rubygems_version:
|
129
|
+
rubygems_version: 1.8.23
|
122
130
|
signing_key:
|
123
|
-
specification_version:
|
131
|
+
specification_version: 3
|
124
132
|
summary: Property sets for ActiveRecord.
|
125
133
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: a0839379d91e7803975103fb3b43f06163a45d7d
|
4
|
-
data.tar.gz: 71dea6d3b8cd20221c38712ecf4d5ecc254a1eae
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 642289a1daf0b276d680bbf5aea576ee536f06385f911fc1e10f3e3e8d09290e60a52520457df72cc48c85f458de5eadf50dfd2da45d7a0987f5eda76ba24a8f
|
7
|
-
data.tar.gz: c5f60fd099c481062e2a3a74d73319c2fc7fcc1e80a64d56eb0f89329ba1d7928c055b0ffde961c31e8025720448e21a1ae025a7e1bb08be8b201d92ba719df8
|