Module: DataMapper::Is::Schemaless::InstanceMethods

Defined in:
lib/dm-is-schemaless/is/schemaless.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_symbol, *args) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 82

def method_missing(method_symbol, *args)
  method_name = method_symbol.to_s
  if %w(? =).include?(method_name[-1,1])
    method = method_name[0..-2]
    operator = method_name[-1,1]
    if operator == '='
      set_value(method, args.first)
    elsif operator == '?'
      !body[method].blank?
    end
  else 
    body[method_name]
  end
end

Instance Method Details

#initialize(args = {}) ⇒ Object



77
78
79
80
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 77

def initialize(args = {})
  super({})
  self.body = args
end

#set_value(method, val) ⇒ Object



97
98
99
100
101
102
103
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 97

def set_value(method, val)
  if val.blank?
    body.delete(method)
  else
    body[method] = val
  end
end

#update_indexesObject



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 105

def update_indexes
  self.class.indexes.each do |field, index|
    field = field.to_s
    assoc = if send(index.assoc_name).blank?
      self.send(:"#{index.assoc_name}=", index.model.new)
    else
      self.send(index.assoc_name)
    end
    if body.key?(field)
      assoc[field] = body[field]
    elsif assoc && assoc.destroy
      self.send(:"#{index.assoc_name}=", nil)
    end
  end
end