module Endymion::Memory::Helper

Public Class Methods

apply_filters(filters, records) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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