[extended-document] added support for property :name, :default => 'Matt" and default couchrest type

This commit is contained in:
Matt Aimonetti 2009-02-05 18:57:11 -08:00
parent 890b60cae4
commit fa7b176fce
5 changed files with 63 additions and 6 deletions

View file

@ -2,8 +2,30 @@ module CouchRest
module Mixins
module DocumentProperties
class IncludeError < StandardError; end
def self.included(base)
base.extend(ClassMethods)
raise CouchRest::Mixins::DocumentProporties::InludeError, "You can only mixin Properties in a class responding to [] and []=" unless (base.new.respond_to?(:[]) && base.new.respond_to?(:[]=))
end
def apply_defaults
return unless new_document?
return if self.class.properties.empty?
# TODO: cache the default object
self.class.properties.each do |property|
key = property.name.to_s
# let's make sure we have a default and we can assign the value
if property.default && (self.respond_to?("#{key}=") || self.key?(key))
if property.default.class == Proc
self[key] = v.call
else
self[key] = Marshal.load(Marshal.dump(property.default))
end
end
end
end
module ClassMethods