Class: Listings::Sources::ObjectDataSource

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

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

#initialize(items) ⇒ ObjectDataSource

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

#itemsObject



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

#scopeObject



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

#transform_itemsObject



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