class Polymorph::Relation

Public Class Methods

new(query, source_types:, fields:) click to toggle source
Calls superclass method
# File lib/polymorph/relation.rb, line 4
def initialize(query, source_types:, fields:)
  @source_types, @fields = source_types, fields
  super(query)
end

Public Instance Methods

count() click to toggle source
# File lib/polymorph/relation.rb, line 9
def count
  self.to_a.length
end
pluck(field) click to toggle source
# File lib/polymorph/relation.rb, line 13
def pluck(field)
  self.to_a.map(&field)
end
where(hash = {}) click to toggle source
Calls superclass method
# File lib/polymorph/relation.rb, line 17
def where(hash = {})
  fields = hash.slice(*@fields)
  clause = fields.map do |field|
    %{(
      #{@source_types.map { |type| "#{type}.#{field[0]} = :#{field[0]}" }.join(" OR ")}
    )}
  end.join(" AND ")
  rebuild(super(clause, fields))
end

Private Instance Methods

rebuild(query) click to toggle source
# File lib/polymorph/relation.rb, line 29
def rebuild(query)
  self.class.new(query, source_types: @source_types, fields: @fields)
end