class QueryableCollection::Worker::Query

Public Class Methods

new(query, queryable_attributes) click to toggle source
# File lib/queryable_collection/worker.rb, line 49
def initialize(query, queryable_attributes)
  @query = query
  @queryable_attributes = queryable_attributes
  validate!
end

Public Instance Methods

perform(elements) click to toggle source
# File lib/queryable_collection/worker.rb, line 55
def perform(elements)
  elements.select { |element|
    @query.all? { |attribute, value|
      element.send(attribute) == value
    }
  }
end

Private Instance Methods

queryable?(attribute) click to toggle source
# File lib/queryable_collection/worker.rb, line 65
def queryable?(attribute)
  @queryable_attributes.include?(attribute.to_s)
end
validate!() click to toggle source
# File lib/queryable_collection/worker.rb, line 69
def validate!
  non_queryable_attributes = @query.keys.reject { |attribute| queryable?(attribute) }
  return if non_queryable_attributes.empty?
  fail Error, "Attributes #{non_queryable_attributes.join(', ')} can't be used in query"
end