[extended-document] added support for property :name, :default => 'Matt" and default couchrest type
This commit is contained in:
parent
890b60cae4
commit
fa7b176fce
5 changed files with 63 additions and 6 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue