Sha256: 842acaa854438ab75d2382f271370a2ed27959f07597ff746ff03471ecf9798d

Contents?: true

Size: 732 Bytes

Versions: 3

Compression:

Stored size: 732 Bytes

Contents

# frozen_string_literal: true

module WiseGopher
  # Register query's params and build query's bind variables
  class Param
    attr_reader :name, :type

    def initialize(name, type_symbol, transform = nil)
      @name      = name.to_s.freeze
      @type      = ActiveRecord::Type.lookup type_symbol
      @transform = transform&.to_proc
    end

    def build_bind(value)
      prepared_value = @transform ? transform_value(value) : value

      ActiveRecord::Relation::QueryAttribute.new(name, prepared_value, type)
    end

    private

    def transform_value(value)
      case @transform.arity
      when 0 then value.instance_exec(&@transform)
      else
        value.instance_eval(&@transform)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wise_gopher-0.2.1 lib/wise_gopher/param.rb
wise_gopher-0.2.0 lib/wise_gopher/param.rb
wise_gopher-0.1.0 lib/wise_gopher/param.rb