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