Sha256: 3bd269353e6397930bd5aab1674c8fd9b2e630b7851ebd497f11a8bca4e942e4

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

module Predicator
  module Visitors
    class String < Visitor
      private

      def terminal node
        node.left.to_s
      end

      def visit_STRING node
        "'#{node.left}'"
      end

      def visit_ARRAY node
        contents = node.left.map{ |item| visit item }.join(", ")
        "[#{contents}]"
      end

      def visit_NOT node
        "!#{visit node.left}"
      end

      def visit_GROUP node
        "(#{visit node.left})"
      end

      def visit_EQ node
        [visit(node.left), " = ", visit(node.right)].join
      end

      def visit_GT node
        [visit(node.left), " > ", visit(node.right)].join
      end

      def visit_LT node
        [visit(node.left), " < ", visit(node.right)].join
      end

      def visit_AND node
        [visit(node.left), " and ", visit(node.right)].join
      end

      def visit_OR node
        [visit(node.left), " or ", visit(node.right)].join
      end

      def visit_BETWEEN node
        [visit(node.left), " between ", visit(node.middle), " and ", visit(node.right)].join
      end

      def visit_IN node
        [visit(node.left), " in ", visit(node.right)].join
      end

      def visit_NOTIN node
        [visit(node.left), " not in ", visit(node.right)].join
      end

      def visit_STRSTARTSWITH node
        [visit(node.left), " starts with ", visit(node.right)].join
      end

      def visit_STRENDSWITH node
        [visit(node.left), " ends with ", visit(node.right)].join
      end

      def visit_DATEAGO node
        visit(node.left) + " ago"
      end

      def visit_DATEFROMNOW node
        visit(node.left) + " from now"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
predicator-1.2.1 lib/predicator/visitors/string.rb
predicator-1.2.0 lib/predicator/visitors/string.rb