cistern 0.3.0 → 0.3.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.
- data/lib/cistern/attributes.rb +8 -16
- data/lib/cistern/version.rb +1 -1
- data/spec/model_spec.rb +22 -0
- metadata +2 -2
data/lib/cistern/attributes.rb
CHANGED
@@ -6,18 +6,7 @@ module Cistern::Attributes
|
|
6
6
|
:integer => lambda{|v,opts| v && v.to_i},
|
7
7
|
:float => lambda{|v,opts| v && v.to_f},
|
8
8
|
:array => lambda{|v,opts| [*v]},
|
9
|
-
:boolean =>
|
10
|
-
{
|
11
|
-
true => true,
|
12
|
-
"true" => true,
|
13
|
-
"1" => true,
|
14
|
-
1 => true,
|
15
|
-
false => false,
|
16
|
-
"false" => false,
|
17
|
-
"0" => false,
|
18
|
-
0 => false,
|
19
|
-
}[v]
|
20
|
-
end,
|
9
|
+
:boolean => lambda{|v,opts| ['true', '1'].include?(v.to_s.downcase)}
|
21
10
|
}
|
22
11
|
end
|
23
12
|
|
@@ -76,8 +65,9 @@ module Cistern::Attributes
|
|
76
65
|
@attributes ||= []
|
77
66
|
@attributes |= [name]
|
78
67
|
|
79
|
-
|
80
|
-
aliases[new_alias]
|
68
|
+
Array(options[:aliases]).each do |new_alias|
|
69
|
+
aliases[new_alias] ||= []
|
70
|
+
aliases[new_alias] << name
|
81
71
|
end
|
82
72
|
end
|
83
73
|
|
@@ -125,8 +115,10 @@ module Cistern::Attributes
|
|
125
115
|
def merge_attributes(new_attributes = {})
|
126
116
|
for key, value in new_attributes
|
127
117
|
unless self.class.ignored_attributes.include?(key)
|
128
|
-
if
|
129
|
-
|
118
|
+
if self.class.aliases.has_key?(key)
|
119
|
+
self.class.aliases[key].each do |aliased_key|
|
120
|
+
send("#{aliased_key}=", value)
|
121
|
+
end
|
130
122
|
elsif self.respond_to?("#{key}=", true)
|
131
123
|
send("#{key}=", value)
|
132
124
|
else
|
data/lib/cistern/version.rb
CHANGED
data/spec/model_spec.rb
CHANGED
@@ -31,6 +31,13 @@ describe "Cistern::Model" do
|
|
31
31
|
attribute :butternut, type: :integer, aliases: "squash", squash: "id"
|
32
32
|
attribute :custom, parser: lambda{|v, opts| "X!#{v}"}
|
33
33
|
|
34
|
+
attribute :same_alias_1, aliases: "nested"
|
35
|
+
attribute :same_alias_2, aliases: "nested"
|
36
|
+
|
37
|
+
attribute :same_alias_squashed_1, aliases: "nested", squash: "attr_1"
|
38
|
+
attribute :same_alias_squashed_2, aliases: "nested", squash: "attr_2"
|
39
|
+
attribute :same_alias_squashed_3, aliases: "nested", squash: "attr_2"
|
40
|
+
|
34
41
|
def save
|
35
42
|
requires :flag
|
36
43
|
end
|
@@ -76,6 +83,21 @@ describe "Cistern::Model" do
|
|
76
83
|
TypeSpec.new({"squash" => {"id" => "12"}}).butternut.should == 12
|
77
84
|
end
|
78
85
|
|
86
|
+
context "allowing the same alias for multiple attributes" do
|
87
|
+
it "should do so when not squashing" do
|
88
|
+
type_spec = TypeSpec.new({"nested" => "bamboo"})
|
89
|
+
type_spec.same_alias_1.should == "bamboo"
|
90
|
+
type_spec.same_alias_2.should == "bamboo"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should do so when squashing" do
|
94
|
+
type_spec = TypeSpec.new({"nested" => {"attr_1" => "bamboo", "attr_2" => "panda"}})
|
95
|
+
type_spec.same_alias_squashed_1.should == "bamboo"
|
96
|
+
type_spec.same_alias_squashed_2.should == "panda"
|
97
|
+
type_spec.same_alias_squashed_3.should == "panda"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
79
101
|
it "should slice out unaccounted for attributes" do
|
80
102
|
TypeSpec.new({"something" => {"id" => "12"}}).attributes.keys.should_not include("something")
|
81
103
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cistern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
4
5
|
prerelease:
|
5
|
-
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Josh Lane
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: API client framework extracted from Fog
|
15
15
|
email:
|