Module: Endymion::Memory::Helper
- Defined in:
- lib/endymion/memory/helper.rb
Class Method Summary collapse
- .apply_filters(filters, records) ⇒ Object
- .apply_limit(limit, records) ⇒ Object
- .apply_offset(offset, records) ⇒ Object
- .apply_sorts(sorts, records) ⇒ Object
- .compare_record(record1, record2, sort) ⇒ Object
- .compare_records(record1, record2, sorts) ⇒ Object
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 |