Class: DbFuel::DbProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/db_fuel/db_provider.rb

Overview

Intermediate internal API for Arel/ActiveRecord. There is some overlap in job needs when it comes to the Arel interface so this class condenses down those needs into this class.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(table_name) ⇒ DbProvider

Returns a new instance of DbProvider.

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
# File 'lib/db_fuel/db_provider.rb', line 16

def initialize(table_name)
  raise ArgumentError, 'table_name is required' if table_name.to_s.empty?

  @arel_table = ::Arel::Table.new(table_name.to_s)

  freeze
end

Instance Attribute Details

#arel_tableObject (readonly)

:nodoc: all



14
15
16
# File 'lib/db_fuel/db_provider.rb', line 14

def arel_table
  @arel_table
end

Instance Method Details

#first(object) ⇒ Object



24
25
26
27
28
# File 'lib/db_fuel/db_provider.rb', line 24

def first(object)
  sql = first_sql(object)

  ::ActiveRecord::Base.connection.exec_query(sql).first
end

#first_sql(object) ⇒ Object



30
31
32
33
34
35
# File 'lib/db_fuel/db_provider.rb', line 30

def first_sql(object)
  relation = arel_table.project(Arel.star).take(1)
  manager  = apply_where(object, relation)

  manager.to_sql
end

#insert(object) ⇒ Object



41
42
43
44
45
# File 'lib/db_fuel/db_provider.rb', line 41

def insert(object)
  manager = insert_manager(object)

  ::ActiveRecord::Base.connection.insert(manager)
end

#insert_sql(object) ⇒ Object



37
38
39
# File 'lib/db_fuel/db_provider.rb', line 37

def insert_sql(object)
  insert_manager(object).to_sql
end

#update(set_object, where_object) ⇒ Object



47
48
49
50
51
# File 'lib/db_fuel/db_provider.rb', line 47

def update(set_object, where_object)
  manager = update_manager(set_object, where_object)

  ::ActiveRecord::Base.connection.update(manager)
end

#update_sql(set_object, where_object) ⇒ Object



53
54
55
# File 'lib/db_fuel/db_provider.rb', line 53

def update_sql(set_object, where_object)
  update_manager(set_object, where_object).to_sql
end