lib/fog/model.rb in fog-0.1.6 vs lib/fog/model.rb in fog-0.1.7
- old
+ new
@@ -1,62 +1,17 @@
module Fog
class Model
- def self._load(marshalled)
- new(Marshal.load(marshalled))
- end
+ extend Attributes::ClassMethods
+ include Attributes::InstanceMethods
- def self.aliases
- @aliases ||= {}
- end
-
- def self.attributes
- @attributes ||= []
- end
-
- def self.attribute(name, other_names = [])
- class_eval <<-EOS, __FILE__, __LINE__
- attr_accessor :#{name}
- EOS
- @attributes ||= []
- @attributes |= [name]
- for other_name in [*other_names]
- aliases[other_name] = name
- end
- end
-
- def self.identity(name, other_names = [])
- @identity = name
- self.attribute(name, other_names)
- end
-
- def _dump
- Marshal.dump(attributes)
- end
-
attr_accessor :connection
- def attributes
- attributes = {}
- for attribute in self.class.attributes
- attributes[attribute] = send("#{attribute}")
- end
- attributes
- end
-
def collection
@collection
end
- def identity
- send(self.class.instance_variable_get('@identity'))
- end
-
- def identity=(new_identity)
- send("#{identity}=", new_identity)
- end
-
def initialize(new_attributes = {})
merge_attributes(new_attributes)
end
def inspect
@@ -70,47 +25,18 @@
end
data << "\n#{Thread.current[:formatador].indentation}>"
data
end
- def merge_attributes(new_attributes = {})
- for key, value in new_attributes
- if aliased_key = self.class.aliases[key]
- send("#{aliased_key}=", value)
- else
- send("#{key}=", value)
- end
- end
- self
- end
-
- def new_record?
- !identity
- end
-
def reload
if data = collection.get(identity)
new_attributes = data.attributes
merge_attributes(new_attributes)
self
end
end
- def requires(*args)
- missing = []
- for arg in [:connection] | args
- missing << arg unless send("#{arg}")
- end
- unless missing.empty?
- if missing.length == 1
- raise(ArgumentError, "#{missing.first} is required for this operation")
- else
- raise(ArgumentError, "#{missing[0...-1].join(", ")} and #{missing[-1]} are required for this operation")
- end
- end
- end
-
def to_json
attributes.to_json
end
def wait_for(timeout = 600, &block)
@@ -123,17 +49,9 @@
private
def collection=(new_collection)
@collection = new_collection
- end
-
- def remap_attributes(attributes, mapping)
- for key, value in mapping
- if attributes.key?(key)
- attributes[value] = attributes.delete(key)
- end
- end
end
end
end