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