Class: ActiveMapper::Adapter::ActiveRecord

Inherits:
Object
  • Object
show all
Defined in:
lib/active_mapper/adapter/active_record.rb,
lib/active_mapper/adapter/active_record/order.rb,
lib/active_mapper/adapter/active_record/query.rb,
lib/active_mapper/adapter/active_record/order/attribute.rb,
lib/active_mapper/adapter/active_record/query/attribute.rb,
lib/active_mapper/adapter/active_record/query/expression.rb

Defined Under Namespace

Classes: Order, Query

Instance Method Summary collapse

Constructor Details

#initializeActiveRecord



8
9
10
# File 'lib/active_mapper/adapter/active_record.rb', line 8

def initialize
  @collection = {}
end

Instance Method Details

#average(klass, attribute, &block) ⇒ Object



41
42
43
# File 'lib/active_mapper/adapter/active_record.rb', line 41

def average(klass, attribute, &block)
  calculate(:average, klass, attribute, &block)
end

#count(klass, &block) ⇒ Object



29
30
31
# File 'lib/active_mapper/adapter/active_record.rb', line 29

def count(klass, &block)
  where(klass, &block).count
end

#delete(klass, object) ⇒ Object



73
74
75
# File 'lib/active_mapper/adapter/active_record.rb', line 73

def delete(klass, object)
  find(klass, object.id).delete
end

#delete_all(klass, &block) ⇒ Object



77
78
79
# File 'lib/active_mapper/adapter/active_record.rb', line 77

def delete_all(klass, &block)
  where(klass, &block).delete_all
end

#find(klass, id) ⇒ Object



12
13
14
# File 'lib/active_mapper/adapter/active_record.rb', line 12

def find(klass, id)
  collection(klass).find_by(id: id)
end

#insert(klass, object) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/active_mapper/adapter/active_record.rb', line 49

def insert(klass, object)
  active_record = collection(klass)
  attributes = serialize(klass, object)

  record = active_record.new(attributes)
  record.save
  record.id
end

#maximum(klass, attribute, &block) ⇒ Object



37
38
39
# File 'lib/active_mapper/adapter/active_record.rb', line 37

def maximum(klass, attribute, &block)
  calculate(:maximum, klass, attribute, &block)
end

#minimum(klass, attribute, &block) ⇒ Object



33
34
35
# File 'lib/active_mapper/adapter/active_record.rb', line 33

def minimum(klass, attribute, &block)
  calculate(:minimum, klass, attribute, &block)
end

#serialize(klass, object) ⇒ Object



62
63
64
65
66
67
# File 'lib/active_mapper/adapter/active_record.rb', line 62

def serialize(klass, object)
  collection(klass).column_names.dup.inject({}) do |memo, attribute|
    memo[attribute] = object.send(attribute)
    memo
  end
end

#sum(klass, attribute, &block) ⇒ Object



45
46
47
# File 'lib/active_mapper/adapter/active_record.rb', line 45

def sum(klass, attribute, &block)
  calculate(:sum, klass, attribute, &block)
end

#unserialize(klass, object) ⇒ Object



69
70
71
# File 'lib/active_mapper/adapter/active_record.rb', line 69

def unserialize(klass, object)
  klass.new(serialize(klass, object))
end

#update(klass, object) ⇒ Object



58
59
60
# File 'lib/active_mapper/adapter/active_record.rb', line 58

def update(klass, object)
  find(klass, object.id).update_columns(serialize(klass, object))
end

#where(klass, options = {}, &block) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/active_mapper/adapter/active_record.rb', line 16

def where(klass, options = {}, &block)
  active_record = collection(klass)
  query = Query.new(active_record.arel_table, &block)
  order = Order.new(&options[:order])

  records = active_record.where(query.to_sql)
  records = records.limit(options[:limit]) if options[:limit]
  records = records.offset(options[:offset]) if options[:offset]
  records = records.order(order.to_sql)

  records
end