Class: Listings::Sources::ObjectDataSource
Constant Summary
Constants inherited
from DataSource
DataSource::ASC, DataSource::DESC
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 ObjectDataSource.
3
4
5
6
|
# File 'lib/listings/sources/object_data_source.rb', line 3
def initialize(items)
@items = items
@items_for_filter = items
end
|
Instance Method Details
#build_field(path, props) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/listings/sources/object_data_source.rb', line 50
def build_field(path, props)
path = self.class.sanitaize_path(path)
unless path.is_a?(Array)
path = [path]
end
ObjectField.new(path, self)
end
|
#filter(field, value) ⇒ Object
44
45
46
47
48
|
# File 'lib/listings/sources/object_data_source.rb', line 44
def filter(field, value)
@items = @items.select do |item|
field.value_for(item) == value
end
end
|
#items ⇒ Object
8
9
10
|
# File 'lib/listings/sources/object_data_source.rb', line 8
def items
@items
end
|
#paginate(page, page_size) ⇒ Object
16
17
18
|
# File 'lib/listings/sources/object_data_source.rb', line 16
def paginate(page, page_size)
@items = Kaminari.paginate_array(@items).page(page).per(page_size)
end
|
#scope ⇒ Object
20
21
22
23
|
# File 'lib/listings/sources/object_data_source.rb', line 20
def scope
@items = yield @items
@items_for_filter = yield @items_for_filter
end
|
#search(fields, value) ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/listings/sources/object_data_source.rb', line 36
def search(fields, value)
@items = @items.select do |item|
fields.any? do |field|
field.value_for(item).try { |o| o.include?(value) }
end
end
end
|
#sort_with_direction(field, direction) ⇒ Object
25
26
27
28
29
30
|
# File 'lib/listings/sources/object_data_source.rb', line 25
def sort_with_direction(field, direction)
@items = @items.sort do |a, b|
b, a = a, b if direction == DESC
field.value_for(a) <=> field.value_for(b)
end
end
|
12
13
14
|
# File 'lib/listings/sources/object_data_source.rb', line 12
def transform_items
@items = yield @items
end
|
#values_for_filter(field) ⇒ Object
32
33
34
|
# File 'lib/listings/sources/object_data_source.rb', line 32
def values_for_filter(field)
@items_for_filter.map { |o| field.value_for(o) }.uniq.reject(&:nil?).sort
end
|