fog-core 1.23.0 → 1.24.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODU0ZTJhZDcwMGI0NzRiNmY1ODdjM2NmMDc2ZDMzYWM5NTk1ZjcwYw==
4
+ MjU4ODI0MTQ2ZDlkOWNmMGI4ZDliZjY3ZDdmOGY1Yjc0MzYyMjVlOQ==
5
5
  data.tar.gz: !binary |-
6
- MzExN2UxODJlZDg5ZGQzZDIxNjM3YzUzMzc1MDI1MmZmMmJlNzg4Yg==
6
+ MmZiYWEzZTU5YTdiYzc4YzkyNWEyMzFkMzMzNDQ3NWQzNGM5MWRmNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MTIyZTRhZDg0ZWVjYWY3OTQyNTZhZmY4Y2YzYTBjMDYxYTZhZTQ5N2RiMGRh
10
- OTMxODUyOGIxYTIwZmYyZGM3NWU4MTc0NTU0OTU4NjI2MzJkODVjYmYzOThl
11
- OTI2N2MxZjdmOTJiN2IzOTVjZDUwODE5NmEyY2FiOGJmNWEwMGU=
9
+ YzAzM2Q4MDM0ODg3MjQ1MmEzYzJlMDQ0Yjc1YmMxNjU1ZGJjNTQ5NzNhMWQ4
10
+ ZWY4OTYzZDZmZDc2NGY1OGMyYmRjOWYwOTk0ZDJjZTE2NjFiYjUwZmQ3OGNm
11
+ NjNjNWNiZmIwNjQwMmY2OThkOWQ0Y2YyZDQyOTAzNTU5YTA2M2Y=
12
12
  data.tar.gz: !binary |-
13
- NmQ3NDdjZTM4OGY1ZTI1MTc0M2FiNWQ5YmRmM2FlYjlhNDE3MWNhYjEwMmY3
14
- NDE0MDNhZDQ5ZTQyYmJhMTliMTI2NzhmZDUyYmVkZThlMDFhMDg0MDA1NTBi
15
- OWRkMzNlMDUxNTYyYjM4ZDczNTljZWZmZmY5NDE5YTgwNDEzOTM=
13
+ Mjc1YTY5MDQyODM5MDQwODkyOWE4ZTkyNzNjZmZiNDc4OWFkMDcyZmUyZmEy
14
+ NWMxZmMwYWMyNGYxMmMyN2M5MWEwMGYwNjA5ZjdmODA2MjBkNWZlZjczZTJl
15
+ OGMwN2M2MjAwOTgwNjZkMjczMGFjYjJkM2JkZTUzMTJiYjg2YzE=
@@ -9,7 +9,6 @@ rvm:
9
9
  - 1.9.2
10
10
  - 1.9.3
11
11
  - 2.0.0
12
- - 2.1.0
13
12
  - jruby-18mode
14
13
  - jruby-19mode
15
14
  - jruby-head
@@ -53,7 +52,4 @@ notifications:
53
52
  - "[#%{build_number}] %{compare_url}"
54
53
  on_success: always
55
54
  on_failure: always
56
- use_notice: false
57
-
58
- before_install:
59
- - gem update --system # todo: workaround for https://github.com/rubygems/rubygems/pull/763
55
+ use_notice: false
@@ -2,8 +2,11 @@
2
2
  * Chris Johnson <wchrisjohnson@gmail.com>
3
3
  * Dominic Cleal <dcleal@redhat.com>
4
4
  * Evan Light <evan@tripledogdare.net>
5
+ * Mike Hagedorn <mike@silverchairsolutions.com>
6
+ * Naoto TAKAHASHI <tnaoto@gmail.com>
5
7
  * Paul Thornthwaite <paul@brightbox.co.uk>
6
8
  * Paul Thornthwaite <tokengeek@gmail.com>
9
+ * Paulo Henrique Lopes Ribeiro <plribeiro3000@gmail.com>
7
10
  * Wesley Beary <geemus+github@gmail.com>
8
11
  * geemus <geemus@gmail.com>
9
12
  * mountkin <moutkin@gmail.com>
data/Rakefile CHANGED
@@ -1,33 +1,23 @@
1
1
  require 'bundler/setup'
2
2
 
3
- task :travis => ['test:travis', 'coveralls_push_workaround']
4
3
  task :default => [:test]
5
4
 
6
5
  require "rake/testtask"
7
6
 
8
-
9
7
  Rake::TestTask.new do |t|
10
8
  t.libs << "lib"
11
9
  t.libs << "spec"
12
10
  t.pattern = "spec/**/*_spec.rb"
13
11
  end
14
12
 
15
- namespace :test do
13
+ task :travis do
16
14
  mock = 'true' || ENV['FOG_MOCK']
17
- task :travis do
18
- # jruby coveralls causes an OOM in travis
19
- ENV['COVERAGE'] = 'false' if RUBY_PLATFORM == 'java'
20
- sh("export FOG_MOCK=#{mock} && rake")
21
- end
22
- end
15
+ sh("export FOG_MOCK=#{mock} && rake")
23
16
 
24
- #require "tasks/changelog_task"
25
- #Fog::Rake::ChangelogTask.new
26
- task :coveralls_push_workaround do
27
- use_coveralls = (Gem::Version.new(RUBY_VERSION.dup) > Gem::Version.new('1.9.2'))
28
- if (ENV['COVERAGE'] != 'false') && use_coveralls
17
+ if ENV['COVERAGE']
29
18
  require 'coveralls/rake/task'
19
+
30
20
  Coveralls::RakeTask.new
31
21
  Rake::Task["coveralls:push"].invoke
32
22
  end
33
- end
23
+ end
@@ -1,3 +1,14 @@
1
+ 1.24.0 08/26/2014
2
+ ==========================================================
3
+
4
+ fixes for defaulting attributes
5
+ add method for getting all attributes
6
+ add methods for associations
7
+ add all_attributes, all_associations and all_associations_and_attributes helper methods
8
+ remove no-longer-needed gem update on travis
9
+ add all_values
10
+ fixes to avoid path conflicts with fog/fog
11
+
1
12
  1.23.0 07/16/2014
2
13
  ==========================================================
3
14
 
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'fog/version'
4
+ require 'fog/core/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "fog-core"
@@ -11,16 +11,22 @@ require 'timeout'
11
11
  require 'ipaddr'
12
12
 
13
13
  # internal core dependencies
14
- require "fog/version"
14
+ require "fog/core/version"
15
+
15
16
  require 'fog/core/attributes'
16
17
  require 'fog/core/attributes/default'
18
+ require 'fog/core/attributes/array'
17
19
  require 'fog/core/attributes/boolean'
18
20
  require 'fog/core/attributes/float'
19
21
  require 'fog/core/attributes/integer'
20
22
  require 'fog/core/attributes/string'
21
23
  require 'fog/core/attributes/time'
22
24
  require 'fog/core/attributes/timestamp'
23
- require 'fog/core/attributes/array'
25
+ require 'fog/core/associations/default'
26
+ require 'fog/core/associations/many_identities'
27
+ require 'fog/core/associations/many_models'
28
+ require 'fog/core/associations/one_model'
29
+ require 'fog/core/associations/one_identity'
24
30
  require 'fog/core/collection'
25
31
  require 'fog/core/connection'
26
32
  require 'fog/core/credentials'
@@ -0,0 +1,15 @@
1
+ module Fog
2
+ module Associations
3
+ class Default
4
+ attr_reader :model, :name
5
+
6
+ def initialize(model, name, collection_name)
7
+ @model = model
8
+ @name = name
9
+ model.associations[name] = collection_name
10
+ create_setter
11
+ create_getter
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Associations
3
+ class ManyIdentities < Default
4
+ def create_setter
5
+ model.class_eval <<-EOS, __FILE__, __LINE__
6
+ def #{name}=(new_#{name})
7
+ associations[:#{name}] = Array(new_#{name}).map do |association|
8
+ association.respond_to?(:identity) ? association.identity : association
9
+ end
10
+ end
11
+ EOS
12
+ end
13
+
14
+ def create_getter
15
+ model.class_eval <<-EOS, __FILE__, __LINE__
16
+ def #{name}
17
+ return [] if associations[:#{name}].nil?
18
+ Array(associations[:#{name}]).map do |association|
19
+ service.send(self.class.associations[:#{name}]).get(association)
20
+ end
21
+ end
22
+ EOS
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module Associations
3
+ class ManyModels < Default
4
+ def create_setter
5
+ model.class_eval <<-EOS, __FILE__, __LINE__
6
+ def #{name}=(new_#{name})
7
+ associations[:#{name}] = Array(new_#{name})
8
+ end
9
+ EOS
10
+ end
11
+
12
+ def create_getter
13
+ model.class_eval <<-EOS, __FILE__, __LINE__
14
+ def #{name}
15
+ Array(associations[:#{name}])
16
+ end
17
+ EOS
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module Associations
3
+ class OneIdentity < Default
4
+ def create_setter
5
+ model.class_eval <<-EOS, __FILE__, __LINE__
6
+ def #{name}=(new_#{name})
7
+ associations[:#{name}] = new_#{name}.respond_to?(:identity) ? new_#{name}.identity : new_#{name}
8
+ end
9
+ EOS
10
+ end
11
+
12
+ def create_getter
13
+ model.class_eval <<-EOS, __FILE__, __LINE__
14
+ def #{name}
15
+ return nil if associations[:#{name}].nil?
16
+ service.send(self.class.associations[:#{name}]).get(associations[:#{name}])
17
+ end
18
+ EOS
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module Associations
3
+ class OneModel < Default
4
+ def create_setter
5
+ model.class_eval <<-EOS, __FILE__, __LINE__
6
+ def #{name}=(new_#{name})
7
+ associations[:#{name}] = new_#{name}
8
+ end
9
+ EOS
10
+ end
11
+
12
+ def create_getter
13
+ model.class_eval <<-EOS, __FILE__, __LINE__
14
+ def #{name}
15
+ associations[:#{name}]
16
+ end
17
+ EOS
18
+ end
19
+ end
20
+ end
21
+ end
@@ -10,6 +10,10 @@ module Fog
10
10
  @aliases ||= {}
11
11
  end
12
12
 
13
+ def associations
14
+ @associations ||= {}
15
+ end
16
+
13
17
  def attributes
14
18
  @attributes ||= []
15
19
  end
@@ -20,13 +24,23 @@ module Fog
20
24
 
21
25
  def attribute(name, options = {})
22
26
  type = options.fetch(:type, 'default').to_s.capitalize
23
- default = options.fetch(:default, false)
24
- Fog::Attributes::const_get(type).new(self, name, options).create
25
- attributes << name
26
- default_values[name] = default if default
27
- Array(options[:aliases]).each do |new_alias|
28
- aliases[new_alias] = name
29
- end
27
+ Fog::Attributes::const_get(type).new(self, name, options)
28
+ end
29
+
30
+ def has_one(name, collection_name)
31
+ Fog::Associations::OneModel.new(self, name, collection_name)
32
+ end
33
+
34
+ def has_many(name, collection_name)
35
+ Fog::Associations::ManyModels.new(self, name, collection_name)
36
+ end
37
+
38
+ def has_one_identity(name, collection_name)
39
+ Fog::Associations::OneIdentity.new(self, name, collection_name)
40
+ end
41
+
42
+ def has_many_identities(name, collection_name)
43
+ Fog::Associations::ManyIdentities.new(self, name, collection_name)
30
44
  end
31
45
 
32
46
  def identity(name, options = {})
@@ -54,6 +68,28 @@ module Fog
54
68
  @attributes ||= {}
55
69
  end
56
70
 
71
+ def associations
72
+ @associations ||= {}
73
+ end
74
+
75
+ def all_attributes
76
+ self.class.attributes.inject({}) do |hash, attribute|
77
+ hash[attribute] = send(attribute)
78
+ hash
79
+ end
80
+ end
81
+
82
+ def all_associations
83
+ self.class.associations.keys.inject({}) do |hash, association|
84
+ hash[association] = associations[association] || send(association)
85
+ hash
86
+ end
87
+ end
88
+
89
+ def all_associations_and_attributes
90
+ all_attributes.merge(all_associations)
91
+ end
92
+
57
93
  def dup
58
94
  copy = super
59
95
  copy.dup_attributes!
@@ -4,7 +4,15 @@ module Fog
4
4
  def create_setter
5
5
  model.class_eval <<-EOS, __FILE__, __LINE__
6
6
  def #{name}=(new_#{name})
7
- attributes[:#{name}] = [*new_#{name}]
7
+ attributes[:#{name}] = Array(new_#{name})
8
+ end
9
+ EOS
10
+ end
11
+
12
+ def create_getter
13
+ model.class_eval <<-EOS, __FILE__, __LINE__
14
+ def #{name}
15
+ Array(attributes[:#{name}])
8
16
  end
9
17
  EOS
10
18
  end
@@ -1,19 +1,21 @@
1
1
  module Fog
2
2
  module Attributes
3
3
  class Default
4
- attr_reader :model, :name, :squash
5
-
4
+ attr_reader :model, :name, :squash, :aliases, :default
5
+
6
6
  def initialize(model, name, options)
7
7
  @model = model
8
+ @model.attributes << name
8
9
  @name = name
9
10
  @squash = options.fetch(:squash, false)
10
- end
11
-
12
- def create
11
+ @aliases = options.fetch(:aliases, [])
12
+ @default = options[:default]
13
13
  create_setter
14
14
  create_getter
15
+ create_aliases
16
+ set_defaults
15
17
  end
16
-
18
+
17
19
  def create_setter
18
20
  if squash
19
21
  model.class_eval <<-EOS, __FILE__, __LINE__
@@ -43,13 +45,24 @@ module Fog
43
45
  def create_getter
44
46
  model.class_eval <<-EOS, __FILE__, __LINE__
45
47
  def #{name}
46
- if self.class.default_values[:#{name}] && !persisted?
48
+ return attributes[:#{name}] unless attributes[:#{name}].nil?
49
+ if !attributes.key?(:#{name}) && !self.class.default_values[:#{name}].nil? && !persisted?
47
50
  return self.class.default_values[:#{name}]
48
51
  end
49
52
  attributes[:#{name}]
50
53
  end
51
54
  EOS
52
55
  end
56
+
57
+ def create_aliases
58
+ Array(aliases).each do |alias_name|
59
+ model.aliases[alias_name] = name
60
+ end
61
+ end
62
+
63
+ def set_defaults
64
+ model.default_values[name] = default unless default.nil?
65
+ end
53
66
  end
54
67
  end
55
68
  end
@@ -77,5 +77,16 @@ module Fog
77
77
  end
78
78
  end
79
79
 
80
+ def method_missing(method_name, *args)
81
+ if self.class.aliases.include?(method_name)
82
+ send(self.class.aliases[method_name])
83
+ else
84
+ super
85
+ end
86
+ end
87
+
88
+ def respond_to?(method_name, include_private = false)
89
+ super || self.class.aliases.include?(method_name)
90
+ end
80
91
  end
81
92
  end
@@ -0,0 +1,3 @@
1
+ module Fog
2
+ VERSION = "1.24.0"
3
+ end
@@ -11,7 +11,49 @@ class FogAttributeTestModel < Fog::Model
11
11
  attribute :string, :type => :string
12
12
  attribute :timestamp, :type => :timestamp
13
13
  attribute :array, :type => :array
14
- attribute :default, :default => 'default_value'
14
+ attribute :default, :default => 'default_value', :aliases => :some_name
15
+ attribute :another_default, :default => false
16
+
17
+ has_one :one_object, :single_associations
18
+ has_many :many_objects, :multiple_associations
19
+ has_one_identity :one_identity, :single_associations
20
+ has_many_identities :many_identities, :multiple_associations
21
+
22
+ def service
23
+ Service.new
24
+ end
25
+ end
26
+
27
+ class Service
28
+ def single_associations
29
+ FogSingleAssociationCollection.new
30
+ end
31
+
32
+ def multiple_associations
33
+ FogMultipleAssociationsCollection.new
34
+ end
35
+ end
36
+
37
+ class FogSingleAssociationCollection
38
+ def get(id)
39
+ FogSingleAssociationModel.new(:id => id)
40
+ end
41
+ end
42
+
43
+ class FogMultipleAssociationsCollection
44
+ def get(id)
45
+ FogMultipleAssociationsModel.new(:id => id)
46
+ end
47
+ end
48
+
49
+ class FogSingleAssociationModel < Fog::Model
50
+ identity :id
51
+ attribute :name, :type => :string
52
+ end
53
+
54
+ class FogMultipleAssociationsModel < Fog::Model
55
+ identity :id
56
+ attribute :name, :type => :string
15
57
  end
16
58
 
17
59
  describe "Fog::Attributes" do
@@ -19,7 +61,7 @@ describe "Fog::Attributes" do
19
61
  let(:model) { FogAttributeTestModel.new }
20
62
 
21
63
  it "should not create alias for nil" do
22
- FogAttributeTestModel.aliases.must_equal({ "keys" => :key })
64
+ refute FogAttributeTestModel.aliases.keys.include?(nil)
23
65
  end
24
66
 
25
67
  describe "squash 'id'" do
@@ -142,11 +184,25 @@ describe "Fog::Attributes" do
142
184
  end
143
185
 
144
186
  describe ":type => :array" do
187
+ it "returns an empty array when not initialized" do
188
+ assert_equal [], model.array
189
+ end
190
+
145
191
  it "returns an empty array as an empty array" do
146
192
  model.merge_attributes(:array => [])
147
193
  assert_equal [], model.array
148
194
  end
149
195
 
196
+ it "returns nil as an empty array" do
197
+ model.merge_attributes(:array => nil)
198
+ assert_equal [], model.array
199
+ end
200
+
201
+ it "returns an array with nil as an array with nil" do
202
+ model.merge_attributes(:array => [nil])
203
+ assert_equal [nil], model.array
204
+ end
205
+
150
206
  it "returns a single element as array" do
151
207
  model.merge_attributes(:array => 1.5)
152
208
  assert_equal [ 1.5 ], model.array
@@ -168,10 +224,19 @@ describe "Fog::Attributes" do
168
224
  assert_equal model.bool, false
169
225
  end
170
226
 
171
- it "should return the default value on a new object" do
227
+ it "should return the default value on a new object with value equal nil" do
172
228
  assert_equal model.default, 'default_value'
173
229
  end
174
230
 
231
+ it "should return the value on a new object with value not equal nil" do
232
+ model.default = 'not default'
233
+ assert_equal model.default, 'not default'
234
+ end
235
+
236
+ it "should return false when default value is false on a new object" do
237
+ assert_equal model.another_default, false
238
+ end
239
+
175
240
  it "should return the value of the persisted object" do
176
241
  model.merge_attributes({ :id => 'some-crazy-id', :default => 23 })
177
242
  assert_equal model.default, 23
@@ -181,5 +246,220 @@ describe "Fog::Attributes" do
181
246
  model.merge_attributes({ :id => 'some-crazy-id' })
182
247
  assert_equal model.default, nil
183
248
  end
249
+
250
+ it "should return nil when an attribute with default value is setted to nil" do
251
+ model.default = nil
252
+ assert_equal model.default, nil
253
+ end
254
+ end
255
+
256
+ describe ".has_one" do
257
+ it "should create an instance_variable to save the association object" do
258
+ assert_equal model.one_object, nil
259
+ end
260
+
261
+ it "should create a getter to save the association model" do
262
+ model.merge_attributes(:one_object => FogSingleAssociationModel.new(:id => '123'))
263
+ assert_instance_of FogSingleAssociationModel, model.one_object
264
+ assert_equal model.one_object.attributes, { :id => '123' }
265
+ end
266
+
267
+ it "should create a setter that accept an object as param" do
268
+ model.one_object = FogSingleAssociationModel.new(:id => '123')
269
+ assert_equal model.one_object.attributes, { :id => '123' }
270
+ end
271
+ end
272
+
273
+ describe ".has_one_identity" do
274
+ it "should create an instance_variable to save the association identity" do
275
+ assert_equal model.one_identity, nil
276
+ end
277
+
278
+ it "should create a getter to load the association model" do
279
+ model.merge_attributes(:one_identity => '123')
280
+ assert_instance_of FogSingleAssociationModel, model.one_identity
281
+ assert_equal model.one_identity.attributes, { :id => '123' }
282
+ end
283
+
284
+ describe "should create a setter that accept" do
285
+ it "an id as param" do
286
+ model.one_identity = '123'
287
+ assert_equal model.one_identity.attributes, { :id => '123' }
288
+ end
289
+
290
+ it "a model as param" do
291
+ model.one_identity = FogSingleAssociationModel.new(:id => '123')
292
+ assert_equal model.one_identity.attributes, { :id => '123' }
293
+ end
294
+ end
295
+ end
296
+
297
+ describe ".has_many" do
298
+ it "should create an instance_variable to save the associated objects" do
299
+ assert_equal model.many_objects, []
300
+ end
301
+
302
+ it "should create a getter to save all associated models" do
303
+ model.merge_attributes(:many_objects => [ FogMultipleAssociationsModel.new(:id => '456') ])
304
+ assert_instance_of Array, model.many_objects
305
+ assert_equal model.many_objects.size, 1
306
+ assert_instance_of FogMultipleAssociationsModel, model.many_objects.first
307
+ assert_equal model.many_objects.first.attributes, { :id => '456' }
308
+ end
309
+
310
+ it "should create a setter that accept an array of objects as param" do
311
+ model.many_objects = [ FogMultipleAssociationsModel.new(:id => '456') ]
312
+ assert_equal model.many_objects.first.attributes, { :id => '456' }
313
+ end
314
+ end
315
+
316
+ describe ".has_many_identities" do
317
+ it "should create an instance_variable to save the associations identities" do
318
+ assert_equal model.many_identities, []
319
+ end
320
+
321
+ it "should create a getter to load all association models" do
322
+ model.merge_attributes(:many_identities => [ '456' ])
323
+ assert_instance_of Array, model.many_identities
324
+ assert_equal model.many_identities.size, 1
325
+ assert_instance_of FogMultipleAssociationsModel, model.many_identities.first
326
+ assert_equal model.many_identities.first.attributes, { :id => '456' }
327
+ end
328
+
329
+ describe "should create a setter that accept an array of" do
330
+ it "ids as param" do
331
+ model.many_identities = [ '456' ]
332
+ assert_equal model.many_identities.first.attributes, { :id => '456' }
333
+ end
334
+
335
+ it "models as param" do
336
+ model.many_identities = [ FogMultipleAssociationsModel.new(:id => '456') ]
337
+ assert_equal model.many_identities.first.attributes, { :id => '456' }
338
+ end
339
+ end
340
+ end
341
+
342
+ describe "#all_attributes" do
343
+ describe "on a persisted object" do
344
+ it "should return all attributes without default values" do
345
+ model.merge_attributes( :id => 2, :float => 3.2, :integer => 55555555 )
346
+ assert model.persisted?
347
+ assert_equal model.all_attributes, { :id => 2,
348
+ :key => nil,
349
+ :time => nil,
350
+ :bool => nil,
351
+ :float => 3.2,
352
+ :integer => 55555555,
353
+ :string => nil,
354
+ :timestamp => nil,
355
+ :array => [],
356
+ :default => nil,
357
+ :another_default => nil }
358
+ end
359
+ end
360
+
361
+ describe "on a new object" do
362
+ it "should return all attributes including default values for empty attributes" do
363
+ model.merge_attributes( :float => 3.2, :integer => 55555555 )
364
+ refute model.persisted?
365
+ assert_equal model.all_attributes, { :id => nil,
366
+ :key => nil,
367
+ :time => nil,
368
+ :bool => nil,
369
+ :float => 3.2,
370
+ :integer => 55555555,
371
+ :string => nil,
372
+ :timestamp => nil,
373
+ :array => [],
374
+ :default => 'default_value',
375
+ :another_default => false }
376
+ end
377
+ end
378
+ end
379
+
380
+ describe "#all_associations" do
381
+ describe "without any association" do
382
+ it "should return all associations empty" do
383
+ assert_equal model.all_associations, { :one_object => nil,
384
+ :many_objects => [],
385
+ :one_identity => nil,
386
+ :many_identities => [] }
387
+ end
388
+ end
389
+
390
+ describe "with associations" do
391
+ it "should return all association objects" do
392
+ @one_object = FogMultipleAssociationsModel.new
393
+ @many_objects = [ @one_object ]
394
+ model.merge_attributes(:one_object => @one_object, :many_objects => @many_objects)
395
+ model.merge_attributes(:one_identity => 'XYZ', :many_identities => %w(ABC))
396
+ assert_equal model.all_associations, { :one_object => @one_object,
397
+ :many_objects => @many_objects,
398
+ :one_identity => 'XYZ',
399
+ :many_identities => %w(ABC) }
400
+ end
401
+ end
402
+ end
403
+
404
+ describe "#all_associations_and_attributes" do
405
+ describe "on a persisted object" do
406
+ it "should return all association and attributes but no default values" do
407
+ @one_object = FogMultipleAssociationsModel.new
408
+ @many_objects = [ @one_object ]
409
+ model.merge_attributes(:id => 2, :float => 3.2, :integer => 55555555)
410
+ model.merge_attributes(:one_object => @one_object, :many_objects => @many_objects)
411
+ model.merge_attributes(:one_identity => 'XYZ', :many_identities => %w(ABC))
412
+ assert model.persisted?
413
+ assert_equal model.all_associations_and_attributes, { :id => 2,
414
+ :key => nil,
415
+ :time => nil,
416
+ :bool => nil,
417
+ :float => 3.2,
418
+ :integer => 55555555,
419
+ :string => nil,
420
+ :timestamp => nil,
421
+ :array => [],
422
+ :default => nil,
423
+ :another_default => nil,
424
+ :one_object => @one_object,
425
+ :many_objects => @many_objects,
426
+ :one_identity => 'XYZ',
427
+ :many_identities => %w(ABC) }
428
+ end
429
+ end
430
+
431
+ describe "on a non persisted object" do
432
+ it "should return all association and attributes and the default value for blank attributes" do
433
+ @one_object = FogMultipleAssociationsModel.new
434
+ @many_objects = [ @one_object ]
435
+ model.merge_attributes(:float => 3.2, :integer => 55555555)
436
+ model.merge_attributes(:one_object => @one_object, :many_objects => @many_objects)
437
+ model.merge_attributes(:one_identity => 'XYZ', :many_identities => %w(ABC))
438
+ refute model.persisted?
439
+ assert_equal model.all_associations_and_attributes, { :id => nil,
440
+ :key => nil,
441
+ :time => nil,
442
+ :bool => nil,
443
+ :float => 3.2,
444
+ :integer => 55555555,
445
+ :string => nil,
446
+ :timestamp => nil,
447
+ :array => [],
448
+ :default => 'default_value',
449
+ :another_default => false,
450
+ :one_object => @one_object,
451
+ :many_objects => @many_objects,
452
+ :one_identity => 'XYZ',
453
+ :many_identities => %w(ABC) }
454
+ end
455
+ end
456
+ end
457
+
458
+ describe "aliases accessors" do
459
+ it "should have accessors to the original attribute" do
460
+ model.merge_attributes(:default => true)
461
+ assert model.respond_to?(:some_name)
462
+ assert model.some_name
463
+ end
184
464
  end
185
465
  end
@@ -4,5 +4,13 @@ require 'minitest/stub_const'
4
4
 
5
5
  $LOAD_PATH.unshift "lib"
6
6
 
7
- require 'fog/core'
7
+ if ENV['COVERAGE']
8
+ require 'coveralls'
9
+ require 'simplecov'
8
10
 
11
+ SimpleCov.start do
12
+ add_filter '/spec/'
13
+ end
14
+ end
15
+
16
+ require 'fog/core'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.23.0
4
+ version: 1.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Light
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-16 00:00:00.000000000 Z
12
+ date: 2014-08-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
@@ -218,6 +218,11 @@ files:
218
218
  - lib/fog/compute.rb
219
219
  - lib/fog/compute/models/server.rb
220
220
  - lib/fog/core.rb
221
+ - lib/fog/core/associations/default.rb
222
+ - lib/fog/core/associations/many_identities.rb
223
+ - lib/fog/core/associations/many_models.rb
224
+ - lib/fog/core/associations/one_identity.rb
225
+ - lib/fog/core/associations/one_model.rb
221
226
  - lib/fog/core/attributes.rb
222
227
  - lib/fog/core/attributes/array.rb
223
228
  - lib/fog/core/attributes/boolean.rb
@@ -246,6 +251,7 @@ files:
246
251
  - lib/fog/core/time.rb
247
252
  - lib/fog/core/utils.rb
248
253
  - lib/fog/core/uuid.rb
254
+ - lib/fog/core/version.rb
249
255
  - lib/fog/core/wait_for.rb
250
256
  - lib/fog/core/wait_for_defaults.rb
251
257
  - lib/fog/core/whitelist_keys.rb
@@ -270,7 +276,6 @@ files:
270
276
  - lib/fog/test_helpers/model_helper.rb
271
277
  - lib/fog/test_helpers/responds_to_helper.rb
272
278
  - lib/fog/test_helpers/succeeds_helper.rb
273
- - lib/fog/version.rb
274
279
  - lib/fog/volume.rb
275
280
  - lib/fog/vpn.rb
276
281
  - lib/tasks/test_task.rb
@@ -1,3 +0,0 @@
1
- module Fog
2
- VERSION = "1.23.0"
3
- end