Module: Endymion::Memory::Helper

Defined in:
lib/endymion/memory/helper.rb

Class Method Summary collapse

Class Method Details

.apply_filters(filters, records) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/endymion/memory/helper.rb', line 4

def self.apply_filters(filters, records)
  records.select do |record|
    filters.all? do |filter|
      value = record[filter.field]
      case filter.operator
      when '<'; value && value < filter.value
      when '<='; value && value <= filter.value
      when '>'; value && value > filter.value
      when '>='; value && value >= filter.value
      when '='; value == filter.value
      when '!='; value != filter.value
      when 'contains?'; filter.value.include?(value)
      end
    end
  end
end

.apply_limit(limit, records) ⇒ Object



45
46
47
48
# File 'lib/endymion/memory/helper.rb', line 45

def self.apply_limit(limit, records)
  return records unless limit
  records.take(limit)
end

.apply_offset(offset, records) ⇒ Object



40
41
42
43
# File 'lib/endymion/memory/helper.rb', line 40

def self.apply_offset(offset, records)
  return records unless offset
  records.drop offset
end

.apply_sorts(sorts, records) ⇒ Object



21
22
23
# File 'lib/endymion/memory/helper.rb', line 21

def self.apply_sorts(sorts, records)
  records.sort { |record1, record2| compare_records record1, record2, sorts }
end

.compare_record(record1, record2, sort) ⇒ Object



33
34
35
36
37
38
# File 'lib/endymion/memory/helper.rb', line 33

def self.compare_record(record1, record2, sort)
  field1, field2 = record1[sort.field], record2[sort.field]
  field1 == field2                      ?  nil :
    field1 < field2 && sort.ascending?  ?  -1  :
    field1 > field2 && sort.descending? ?  -1  : 1
end

.compare_records(record1, record2, sorts) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/endymion/memory/helper.rb', line 25

def self.compare_records(record1, record2, sorts)
  sorts.each do |sort|
    result = compare_record record1, record2, sort
    return result if result
  end
  0
end