cistern 0.11.0 → 0.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e00bac7d299cc0636b1ac4b5ca42958de6f96f41
4
- data.tar.gz: 0f83891e9e0bc7f9cdcbdb8ad9c0280dfb969ae3
3
+ metadata.gz: b042d8632a8caf3a3b22b917105d96a08c5a589d
4
+ data.tar.gz: d83e62f2b43df0cc5d8043065679e41f5372d7a5
5
5
  SHA512:
6
- metadata.gz: d8e0baa62cd55e6f8cafc7ef6401d1c8a6f8a8bcfafd4fb19cb850ae6e06ba76eacdc55912c6780eddc53729b162db855db6d8986ae7ac25463937eac96c7fb3
7
- data.tar.gz: 4ec77508143ddad1788aff2159711eaa49301bafb765eecdfda0c498d02c0e4969449646eb6990daf1b6e7f899374043dd176869261867f4105302238242a1f5
6
+ metadata.gz: df23a5684addc4f8c446ec88b9b983e4d288b9bd1a09421478658c93f5fd67e88793f6b16ad7fb3191c69216702ce3b20536af7b3565d3db20b64183d9d34234
7
+ data.tar.gz: 6cebf42a5df2dfa6602c89d763f5c1d1a07b1b277bb4da34ed5ce682e6d64434815478e7e12a3cee2dc75d7b70ccb4b6cc944b52299e5b158bf01de596e87959
data/Guardfile CHANGED
@@ -4,7 +4,7 @@ guard :bundler do
4
4
  watch(/^.+\.gemspec/)
5
5
  end
6
6
 
7
- guard 'rspec', all_on_start: true, all_after_pass: true, cmd: 'bundle exec rspec' do
7
+ guard 'rspec', all_on_start: true, all_after_pass: true, cmd: 'bundle exec rspec', failed_mode: :focus do
8
8
  watch(%r{^spec/.+_spec\.rb$})
9
9
  watch(%r{^lib/(.+)\.rb$}) { "spec" }
10
10
  watch('spec/spec_helper.rb') { "spec" }
@@ -12,13 +12,14 @@ module Cistern::Attributes
12
12
 
13
13
  def self.transforms
14
14
  @transforms ||= {
15
- :squash => Proc.new do |k, v, options|
15
+ :squash => Proc.new do |k, _v, options|
16
+ v = Cistern::Hash.stringify_keys(_v)
16
17
  squash = options[:squash]
18
+
17
19
  if v.is_a?(::Hash) && squash.is_a?(Array)
18
20
  travel = lambda do |tree, path|
19
21
  if tree.is_a?(::Hash)
20
- subtree = tree[path.shift]
21
- travel.call(subtree, path)
22
+ travel.call(tree[path.shift], path)
22
23
  else tree
23
24
  end
24
25
  end
@@ -49,7 +50,7 @@ module Cistern::Attributes
49
50
  end
50
51
 
51
52
  def aliases
52
- @aliases ||= {}
53
+ @aliases ||= Hash.new { |h,k| h[k] = [] }
53
54
  end
54
55
 
55
56
  def attributes
@@ -85,12 +86,16 @@ module Cistern::Attributes
85
86
  if self.attributes[name]
86
87
  raise(ArgumentError, "#{self.name} attribute[#{_name}] specified more than once")
87
88
  else
89
+ if options[:squash]
90
+ options[:squash] = Array(options[:squash]).map(&:to_s)
91
+ end
88
92
  self.attributes[name] = options
89
93
  end
90
94
 
91
- Array(options[:aliases]).each do |new_alias|
92
- aliases[new_alias] ||= []
93
- aliases[new_alias] << name
95
+ options[:aliases] = Array(options[:aliases]).map { |a| a.to_s.to_sym }
96
+
97
+ options[:aliases].each do |new_alias|
98
+ aliases[new_alias] << name.to_s.to_sym
94
99
  end
95
100
  end
96
101
 
@@ -168,13 +173,15 @@ module Cistern::Attributes
168
173
  end
169
174
 
170
175
  def merge_attributes(new_attributes = {})
171
- new_attributes.each do |key, value|
176
+ new_attributes.each do |_key, value|
177
+ key = _key.to_s.to_sym
172
178
  # find nested paths
173
179
  value.is_a?(::Hash) && self.class.attributes.each do |name, options|
174
- if (options[:squash] || []).first == key
180
+ if (options[:squash] || []).first == key.to_s
175
181
  send("#{name}=", {key => value})
176
182
  end
177
183
  end
184
+
178
185
  unless self.class.ignored_attributes.include?(key)
179
186
  if self.class.aliases.has_key?(key)
180
187
  self.class.aliases[key].each do |aliased_key|
@@ -182,7 +189,9 @@ module Cistern::Attributes
182
189
  end
183
190
  end
184
191
 
185
- if self.respond_to?("#{key}=", true)
192
+ protected_methods = Cistern::Model.instance_methods - [:connection, :identity, :collection]
193
+
194
+ if !protected_methods.include?(key) && self.respond_to?("#{key}=", true)
186
195
  send("#{key}=", value)
187
196
  end
188
197
  end
@@ -1,3 +1,3 @@
1
1
  module Cistern
2
- VERSION = "0.11.0"
2
+ VERSION = "0.11.1"
3
3
  end
@@ -59,6 +59,7 @@ describe "Cistern::Model" do
59
59
  attribute :same_alias_squashed_1, squash: ["nested", "attr_1"]
60
60
  attribute :same_alias_squashed_2, squash: ["nested", "attr_2"]
61
61
  attribute :same_alias_squashed_3, squash: ["nested", "attr_2"]
62
+ attribute :adam_attributes, aliases: "attributes"
62
63
 
63
64
  def save
64
65
  requires :flag
@@ -69,6 +70,10 @@ describe "Cistern::Model" do
69
70
  expect(TypeSpec.new(name: 1).name).to eq("1")
70
71
  end
71
72
 
73
+ it "should handle a 'attributes' aliased attribute" do
74
+ expect(TypeSpec.new(attributes: "x").adam_attributes).to eq("x")
75
+ end
76
+
72
77
  it "should parse time" do
73
78
  time = Time.now
74
79
  created_at = TypeSpec.new(created_at: time.to_s).created_at
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cistern
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Lane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-15 00:00:00.000000000 Z
11
+ date: 2014-10-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: API client framework extracted from Fog
14
14
  email:
@@ -87,3 +87,4 @@ test_files:
87
87
  - spec/singular_spec.rb
88
88
  - spec/spec_helper.rb
89
89
  - spec/wait_for_spec.rb
90
+ has_rdoc: