Module: CouchbaseOrm::Persistence::ClassMethods

Defined in:
lib/couchbase-orm/persistence.rb

Instance Method Summary collapse

Instance Method Details

#create(attributes = nil, &block) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/couchbase-orm/persistence.rb', line 21

def create(attributes = nil, &block)
  if attributes.is_a?(Array)
    attributes.collect { |attr| create(attr, &block) }
  else
    instance = new(attributes, &block)
    instance.save
    instance
  end
end

#create!(attributes = nil, &block) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/couchbase-orm/persistence.rb', line 31

def create!(attributes = nil, &block)
  if attributes.is_a?(Array)
    attributes.collect { |attr| create!(attr, &block) }
  else
    instance = new(attributes, &block)
    instance.save!
    instance
  end
end

#design_document(name = nil) ⇒ Object

Allow classes to overwrite the default document name extend ActiveModel::Naming (included by ActiveModel::Model)



48
49
50
51
52
# File 'lib/couchbase-orm/persistence.rb', line 48

def design_document(name = nil)
  return @design_document unless name

  @design_document = name.to_s
end

#fail_validate!(document) ⇒ Object

Raise an error if validation failed.



42
43
44
# File 'lib/couchbase-orm/persistence.rb', line 42

def fail_validate!(document)
  raise Error::RecordInvalid.new(document)
end

#inherited(child) ⇒ Object

Set a default design document



55
56
57
58
59
60
# File 'lib/couchbase-orm/persistence.rb', line 55

def inherited(child)
  super
  child.instance_eval do
    @design_document = child.name.underscore
  end
end

#instantiate(attributes, id, cas, klass) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/couchbase-orm/persistence.rb', line 62

def instantiate(attributes, id, cas, klass)
  # attributes = decode_encrypted_attributes(attributes)
  type = attributes.delete('type')
  if type && type.to_s != klass.design_document
    raise CouchbaseOrm::Error::TypeMismatchError.new(
      "document type mismatch, #{type} != #{klass.design_document}", self
    )
  end

  # Use ActiveModel::AttributeSet::Builder to build attributes
  builder = attributes_builder
  attribute_set = builder.build_from_database(attributes)

  # Allocate and initialize the object
  instance = klass.allocate
  instance.init_with('attributes' => attribute_set, 'id' => id, 'cas' => cas, 'new_record' => false) # Custom initialization method
  instance
end