Class: Listings::Sources::ActiveRecordDataSource
- Inherits:
-
DataSource
- Object
- DataSource
- Listings::Sources::ActiveRecordDataSource
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
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_instance ⇒ Object
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
|
#connection ⇒ Object
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
|
#items ⇒ Object
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
|
#scope ⇒ Object
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
|
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
|