Sha256: c5de65a1f802053b30a4c9fd85e47039ebe667be3660430694dfccf9dde291fa

Contents?: true

Size: 1.32 KB

Versions: 8

Compression:

Stored size: 1.32 KB

Contents

# frozen-string-literal: true
module Mobility
  module Arel
    class Visitor < ::Arel::Visitors::Visitor
      INNER_JOIN = ::Arel::Nodes::InnerJoin
      OUTER_JOIN = ::Arel::Nodes::OuterJoin

      attr_reader :backend_class, :locale

      def initialize(backend_class, locale)
        super()
        @backend_class, @locale = backend_class, locale
      end

      private

      def visit(*args)
        super
      rescue TypeError
        visit_default(*args)
      end

      def visit_collection(_objects)
        raise NotImplementedError
      end
      alias :visit_Array :visit_collection

      def visit_Arel_Nodes_Unary(object)
        visit(object.expr)
      end

      def visit_Arel_Nodes_Binary(object)
        visit_collection([object.left, object.right])
      end

      def visit_Arel_Nodes_Function(object)
        visit_collection(object.expressions)
      end

      def visit_Arel_Nodes_Case(object)
        visit_collection([object.case, object.conditions, object.default])
      end

      def visit_Arel_Nodes_And(object)
        visit_Array(object.children)
      end

      def visit_Arel_Nodes_Node(object)
        visit_default(object)
      end

      def visit_Arel_Attributes_Attribute(object)
        visit_default(object)
      end

      def visit_default(_object)
        nil
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
mobility-1.0.0.beta2 lib/mobility/arel/visitor.rb
mobility-1.0.0.beta1 lib/mobility/arel/visitor.rb
mobility-1.0.0.alpha lib/mobility/arel/visitor.rb
mobility-0.8.13 lib/mobility/arel/visitor.rb
mobility-0.8.11 lib/mobility/arel/visitor.rb
mobility-0.8.10 lib/mobility/arel/visitor.rb
mobility-0.8.9 lib/mobility/arel/visitor.rb
mobility-0.8.8 lib/mobility/arel/visitor.rb