lib/cfoundry/v2/model.rb in cfoundry-1.0.0 vs lib/cfoundry/v2/model.rb in cfoundry-1.1.0.rc1
- old
+ new
@@ -1,12 +1,12 @@
require "multi_json"
-
require "cfoundry/v2/model_magic"
-
module CFoundry::V2
class Model
+ include ActiveModel::Validations
+
@@objects = {}
extend ModelMagic
class << self
@@ -62,10 +62,26 @@
@cache = {}
@diff = {}
@changes = {}
end
+ def create
+ create!
+ true
+ rescue CFoundry::APIError => e
+ if e.instance_of? CFoundry::APIError
+ errors.add(:base, :cc_client)
+ else
+ errors.add(attribute_for_error(e), e.message)
+ end
+ false
+ end
+
+ def attribute_for_error(error)
+ :base
+ end
+
# this does a bit of extra processing to allow for
# `delete!' followed by `create!'
def create!
payload = {}
@@ -74,12 +90,12 @@
@manifest[:entity].each do |k, v|
if v.is_a?(Hash) && v.key?(:metadata)
# skip; there's a _guid attribute already
elsif v.is_a?(Array) && !v.empty? && v.all? { |x|
- x.is_a?(Hash) && x.key?(:metadata)
- }
+ x.is_a?(Hash) && x.key?(:metadata)
+ }
singular = k.to_s.sub(/s$/, "")
payload[:"#{singular}_guids"] = v.collect do |x|
if x.is_a?(Hash) && x.key?(:metadata)
x[:metadata][:guid]
@@ -116,24 +132,43 @@
@diff.clear
true
end
+ def delete
+ delete!
+ rescue CFoundry::APIError => e
+ if e.instance_of? CFoundry::APIError
+ errors.add(:base, :cc_client)
+ else
+ errors.add(attribute_for_error(e), e.message)
+ end
+ false
+ end
+
def delete!(options = {})
@client.base.delete("v2", plural_object_name, guid, :params => options)
- @guid = nil
+ @deleted = true
@diff.clear
if @manifest
@manifest.delete :metadata
end
true
end
+ def to_key
+ persisted? ? [@guid] : nil
+ end
+
+ def persisted?
+ @guid && !@deleted
+ end
+
def exists?
invalidate!
manifest
true
rescue CFoundry::NotFound
@@ -145,9 +180,10 @@
end
def eql?(other)
other.is_a?(self.class) && @guid == other.guid
end
+
alias :== :eql?
def hash
@guid.hash
end