class PaperTrail::Queries::Versions::WhereObject
For public API documentation, see ‘where_object` in `paper_trail/version_concern.rb`. @api private
Public Class Methods
new(version_model_class, attributes)
click to toggle source
-
version_model_class - The class that
VersionConcern
was mixed into. -
attributes - A ‘Hash` of attributes and values. See the public API documentation for details.
@api private
# File lib/paper_trail/queries/versions/where_object.rb, line 14 def initialize(version_model_class, attributes) @version_model_class = version_model_class @attributes = attributes end
Public Instance Methods
execute()
click to toggle source
@api private
# File lib/paper_trail/queries/versions/where_object.rb, line 20 def execute column = @version_model_class.columns_hash["object"] raise Error, "where_object requires an object column" unless column case column.type when :jsonb jsonb when :json json else text end end
Private Instance Methods
json()
click to toggle source
@api private
# File lib/paper_trail/queries/versions/where_object.rb, line 37 def json predicates = [] values = [] @attributes.each do |field, value| predicates.push "object->>? = ?" values.concat([field, value.to_s]) end sql = predicates.join(" and ") @version_model_class.where(sql, *values) end
jsonb()
click to toggle source
@api private
# File lib/paper_trail/queries/versions/where_object.rb, line 49 def jsonb @version_model_class.where("object @> ?", @attributes.to_json) end
text()
click to toggle source
@api private
# File lib/paper_trail/queries/versions/where_object.rb, line 54 def text arel_field = @version_model_class.arel_table[:object] where_conditions = @attributes.map { |field, value| ::PaperTrail.serializer.where_object_condition(arel_field, field, value) } where_conditions = where_conditions.reduce { |a, e| a.and(e) } @version_model_class.where(where_conditions) end