Sha256: 2ca14457d33ba6a4a3c2c2d90dfec5a12da3975737b9aeeda257064a07e4ef50

Contents?: true

Size: 1.7 KB

Versions: 15

Compression:

Stored size: 1.7 KB

Contents

module PaperTrail
  module Queries
    module Versions
      # For public API documentation, see `where_object` in
      # `paper_trail/version_concern.rb`.
      # @api private
      class WhereObject
        # - 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
        def initialize(version_model_class, attributes)
          @version_model_class = version_model_class
          @attributes = attributes
        end

        # @api private
        def execute
          case @version_model_class.columns_hash["object"].type
          when :jsonb
            jsonb
          when :json
            json
          else
            text
          end
        end

        private

        # @api private
        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

        # @api private
        def jsonb
          @version_model_class.where("object @> ?", @attributes.to_json)
        end

        # @api private
        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
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
paper_trail-8.1.2 lib/paper_trail/queries/versions/where_object.rb
paper_trail-8.1.1 lib/paper_trail/queries/versions/where_object.rb
paper_trail-8.1.0 lib/paper_trail/queries/versions/where_object.rb
paper_trail-8.0.1 lib/paper_trail/queries/versions/where_object.rb
paper_trail-8.0.0 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.1.3 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.1.2 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.1.1 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.1.0 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.0.3 lib/paper_trail/queries/versions/where_object.rb
enju_leaf-1.2.1 vendor/bundle/ruby/2.3/gems/paper_trail-7.0.2/lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.0.2 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.0.1 lib/paper_trail/queries/versions/where_object.rb
paper_trail-7.0.0 lib/paper_trail/queries/versions/where_object.rb
paper_trail-6.0.2 lib/paper_trail/queries/versions/where_object.rb