Sha256: d540df029c698e427d8902968b3362e0f742c32aa2dfc9341b28c42758a843dc

Contents?: true

Size: 1.18 KB

Versions: 19

Compression:

Stored size: 1.18 KB

Contents

module Ransack
  class Visitor

    def accept(object)
      visit(object)
    end

    def can_accept?(object)
      respond_to? DISPATCH[object.class]
    end

    def visit_Array(object)
      object.map { |o| accept(o) }.compact
    end

    def visit_Ransack_Nodes_Condition(object)
      object.arel_predicate if object.valid?
    end

    def visit_Ransack_Nodes_Grouping(object)
      if object.combinator == Constants::OR
        visit_or(object)
      else
        visit_and(object)
      end
    end

    def visit_and(object)
      raise "not implemented"
    end

    def visit_or(object)
      nodes = object.values.map { |o| accept(o) }.compact
      return nil unless nodes.size > 0

      if nodes.size > 1
        nodes.inject(&:or)
      else
        nodes.first
      end
    end

    def visit_Ransack_Nodes_Sort(object)
      object.attr.send(object.dir) if object.valid?
    end

    def quoted?(object)
      raise "not implemented"
    end

    def visit(object)
      send(DISPATCH[object.class], object)
    end

    DISPATCH = Hash.new do |hash, klass|
      hash[klass] = "visit_#{
        klass.name.gsub(Constants::TWO_COLONS, Constants::UNDERSCORE)
        }"
    end

  end
end

Version data entries

19 entries across 19 versions & 3 rubygems

Version Path
ransack-1.8.7 lib/ransack/visitor.rb
ransack-1.8.6 lib/ransack/visitor.rb
ransack-1.8.4 lib/ransack/visitor.rb
ransack-1.8.3 lib/ransack/visitor.rb
ransack-1.8.2 lib/ransack/visitor.rb
ransack-1.8.1 lib/ransack/visitor.rb
ransack-1.8.0 lib/ransack/visitor.rb
ransack-1.7.0 lib/ransack/visitor.rb
solidus_backend-1.0.0.pre3 vendor/bundle/gems/ransack-1.6.6/lib/ransack/visitor.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/ransack-1.6.6/lib/ransack/visitor.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/ransack-1.6.6/lib/ransack/visitor.rb
shoppe-paypal-1.1.0 vendor/bundle/ruby/2.1.0/gems/ransack-1.6.2/lib/ransack/visitor.rb
ransack-1.6.6 lib/ransack/visitor.rb
ransack-1.6.5 lib/ransack/visitor.rb
ransack-1.6.4 lib/ransack/visitor.rb
ransack-1.6.3 lib/ransack/visitor.rb
ransack-1.6.2 lib/ransack/visitor.rb
ransack-1.6.1 lib/ransack/visitor.rb
ransack-1.6.0 lib/ransack/visitor.rb