Module: Loco::Persistable::ClassMethods

Defined in:
lib/motion-loco/persistable.rb

Instance Method Summary collapse

Instance Method Details

#adapter(adapter_class, *args) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/motion-loco/persistable.rb', line 43

def adapter(adapter_class, *args)
  if adapter_class.is_a? String
    @adapter = adapter_class.constantize.new(*args)
  else
    @adapter = adapter_class.new(*args)
  end
end

#find(id = nil, &block) ⇒ Object Also known as: all, where



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/motion-loco/persistable.rb', line 51

def find(id=nil, &block)
  adapter = self.get_class_adapter
  if id.nil?
    # Return all records
    records = RecordArray.new(item_class: self.class)
    adapter.find_all(self, records) do |records|
      block.call(records) if block.is_a? Proc
    end
  elsif id.is_a? Array
    # Return records with given ids
    records = RecordArray.new(item_class: self.class)
    id.each do |i|
      records << self.new(id: i)
    end
    adapter.find_many(self, records, id) do |records|
      block.call(records) if block.is_a? Proc
    end
  elsif id.is_a? Hash
    # Return records matching query
    records = RecordArray.new(item_class: self.class)
    adapter.find_query(self, records, id) do |records|
      block.call(records) if block.is_a? Proc
    end
  else
    record = self.new(id: id)
    adapter.find(record, id) do |record|
      block.call(record) if block.is_a? Proc
    end
  end
end

#get_class_adapterObject



84
85
86
# File 'lib/motion-loco/persistable.rb', line 84

def get_class_adapter
  @adapter ||= Adapter.new
end