Sha256: cf64ae300e728eedaa3c20c59fd8abcab73f777e2cfde964def2d47b9d0a7089

Contents?: true

Size: 1.42 KB

Versions: 40

Compression:

Stored size: 1.42 KB

Contents

module Polyamorous
  class Join
    include TreeNode

    attr_accessor :name
    attr_reader :type, :klass

    def initialize(name, type = InnerJoin, klass = nil)
      @name = name
      @type = convert_to_arel_join_type(type)
      @klass = convert_to_class(klass) if klass
    end

    def klass=(klass)
      @klass = convert_to_class(klass) if klass
    end

    def type=(type)
      @type = convert_to_arel_join_type(type) if type
    end

    def hash
      [@name, @type, @klass].hash
    end

    def eql?(other)
      self.class == other.class &&
      self.name  == other.name &&
      self.type  == other.type &&
      self.klass == other.klass
    end

    alias :== :eql?

    def add_to_tree(hash)
      hash[self] ||= {}
    end

    private

    def convert_to_arel_join_type(type)
      case type
      when 'inner', :inner
        InnerJoin
      when 'outer', :outer
        OuterJoin
      when Class
        if [InnerJoin, OuterJoin].include? type
          type
        else
          raise ArgumentError, "#{type} cannot be converted to an ARel join type"
        end
      else
        raise ArgumentError, "#{type} cannot be converted to an ARel join type"
      end
    end

    def convert_to_class(value)
      case value
      when String, Symbol
        Kernel.const_get(value)
      when Class
        value
      else
        raise ArgumentError, "#{value} cannot be converted to a Class"
      end
    end

  end
end

Version data entries

40 entries across 40 versions & 6 rubygems

Version Path
ransack-4.2.1 lib/polyamorous/join.rb
ransack-4.2.0 lib/polyamorous/join.rb
ransack-4.1.1 lib/polyamorous/join.rb
ransack-4.1.0 lib/polyamorous/join.rb
ransack-4.0.0 lib/polyamorous/join.rb
ransack-3.2.1 lib/polyamorous/join.rb
ransack-3.2.0 lib/polyamorous/join.rb
ransack-3.1.0 lib/polyamorous/join.rb
ransack-3.0.1 lib/polyamorous/join.rb
ransack-3.0.0 lib/polyamorous/join.rb
ransack-2.6.0 lib/polyamorous/join.rb
ransack-2.5.0 lib/polyamorous/join.rb
date_n_time_picker_activeadmin-0.1.2 vendor/bundle/ruby/2.6.0/gems/ransack-2.4.2/lib/polyamorous/join.rb
date_n_time_picker_activeadmin-0.1.1 vendor/bundle/ruby/2.6.0/gems/ransack-2.4.2/lib/polyamorous/join.rb
ransack-2.4.2 lib/polyamorous/join.rb
ransack-2.4.1 lib/polyamorous/join.rb
ransack-2.4.0 lib/polyamorous/join.rb
polyamorous-2.3.2 lib/polyamorous/join.rb
polyamorous-2.3.1 lib/polyamorous/join.rb
ransack-2.3.2 polyamorous/lib/polyamorous/join.rb