Class: Listings::Sources::ActiveRecordDataSource

Inherits:
DataSource
  • Object
show all
Defined in:
lib/listings/sources/active_record_data_source.rb

Constant Summary

Constants inherited from DataSource

DataSource::ASC, DataSource::DESC

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from DataSource

for, for_without_active_record, for_without_object, sanitaize_path, #sort

Constructor Details

#initialize(model) ⇒ ActiveRecordDataSource

Returns a new instance of ActiveRecordDataSource.



5
6
7
8
9
10
11
12
13
14
# File 'lib/listings/sources/active_record_data_source.rb', line 5

def initialize(model)
  @items = model
  if model.is_a?(ActiveRecord::Relation)
    @items_for_filter = model.clone
    @model_instance = model.klass.new
  else
    @items_for_filter = model
    @model_instance = model.new
  end
end

Instance Attribute Details

#model_instanceObject (readonly)

Returns the value of attribute model_instance.



3
4
5
# File 'lib/listings/sources/active_record_data_source.rb', line 3

def model_instance
  @model_instance
end

Instance Method Details

#build_field(path, props) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/listings/sources/active_record_data_source.rb', line 71

def build_field(path, props)
  path = self.class.sanitaize_path(path)
  if path.is_a?(Array)
    ActiveRecordAssociationField.new(path, self)
  else
    ActiveRecordField.new(path, self, props[:query_column])
  end
end

#connectionObject



16
17
18
# File 'lib/listings/sources/active_record_data_source.rb', line 16

def connection
  model_instance.class.connection
end

#filter(field, value) ⇒ Object



59
60
61
# File 'lib/listings/sources/active_record_data_source.rb', line 59

def filter(field, value)
  @items = @items.where("#{field.query_column} = ?", value)
end

#itemsObject



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/listings/sources/active_record_data_source.rb', line 20

def items
  if @items.is_a?(Class)
    if Rails::VERSION::MAJOR == 3
      @items.scoped
    else
      @items.all
    end
  else
    @items
  end
end

#joins(relation) ⇒ Object



67
68
69
# File 'lib/listings/sources/active_record_data_source.rb', line 67

def joins(relation)
  @items = @items.eager_load(relation)
end

#paginate(page, page_size) ⇒ Object



63
64
65
# File 'lib/listings/sources/active_record_data_source.rb', line 63

def paginate(page, page_size)
  @items = @items.page(page).per(page_size)
end

#scopeObject



36
37
38
39
# File 'lib/listings/sources/active_record_data_source.rb', line 36

def scope
  @items = yield @items
  @items_for_filter = yield @items_for_filter
end

#search(fields, value) ⇒ Object



49
50
51
52
53
54
55
56
57
# File 'lib/listings/sources/active_record_data_source.rb', line 49

def search(fields, value)
  criteria = []
  values = []
  fields.each do |field|
    criteria << "#{field.query_column} like ?"
    values << "%#{value}%"
  end
  @items = @items.where(criteria.join(' or '), *values)
end

#sort_with_direction(field, direction) ⇒ Object



41
42
43
# File 'lib/listings/sources/active_record_data_source.rb', line 41

def sort_with_direction(field, direction)
  @items = field.sort @items, direction
end

#transform_itemsObject



32
33
34
# File 'lib/listings/sources/active_record_data_source.rb', line 32

def transform_items
  @items = yield @items
end

#values_for_filter(field) ⇒ Object



45
46
47
# File 'lib/listings/sources/active_record_data_source.rb', line 45

def values_for_filter(field)
  field.all_values(@items_for_filter)
end