class ActiveAny::ObjectAdapter

Public Instance Methods

array_handler(record, key, array) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 42
def array_handler(record, key, array)
  array.include? record.send(key)
end
base_handler(record, key, value) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 30
def base_handler(record, key, value)
  record.send(key) == value
end
group_handler(records, group_values) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 46
def group_handler(records, group_values)
  return records if group_values.empty?

  records.uniq do |record|
    group_values.map { |method| record.send(method) }
  end
end
limit_handler(records, limit_value) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 21
def limit_handler(records, limit_value)
  limit_value ? records.take(limit_value) : records
end
order_handler(records, order_clause) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 25
def order_handler(records, order_clause)
  ordered_records = order_clause.empty? ? records : sort_by_order_clause(records, order_clause)
  order_clause.reverse? ? ordered_records.reverse : ordered_records
end
query(where_clause: Relation::WhereClause.empty, order_clause: Relation::OrderClause.empty, limit_value: nil, group_values: []) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 5
def query(where_clause: Relation::WhereClause.empty, order_clause: Relation::OrderClause.empty, limit_value: nil, group_values: [])
  records = where_handler(klass.data, where_clause)
  records = group_handler(records, group_values)
  records = limit_handler(records, limit_value)
  records = order_handler(records, order_clause)
  records
end
range_handler(record, key, range) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 38
def range_handler(record, key, range)
  range.include? record.send(key)
end
regexp_handler(record, key, regexp) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 34
def regexp_handler(record, key, regexp)
  regexp.match? record.send(key)
end
where_handler(records, where_clause) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 13
def where_handler(records, where_clause)
  records.select do |record|
    where_clause.all? do |condition|
      condition.evaluate(self, record)
    end
  end
end

Private Instance Methods

build_order_proc(a, b, order_value) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 56
def build_order_proc(a, b, order_value)
  case order_value.sort_type
  when :asc then proc { a.send(order_value.key) <=> b.send(order_value.key) }
  when :desc then proc { -(a.send(order_value.key) <=> b.send(order_value.key)) }
  else
    raise ArgumentError, "#{order_value.sort_type} is not supported"
  end
end
sort_by_order_clause(records, order_clause) click to toggle source
# File lib/active_any/adapters/object_adapter.rb, line 65
def sort_by_order_clause(records, order_clause)
  records.sort do |a, b|
    blocks = order_clause.order_values.map do |order_value|
      build_order_proc(a, b, order_value)
    end
    blocks.map(&:call).find(&:nonzero?) || 0
  end
end