Sha256: 0f39dc6a0cb9f45ea0578947b28510fe9ac41de5d526788854f6d67747de4b83

Contents?: true

Size: 981 Bytes

Versions: 1

Compression:

Stored size: 981 Bytes

Contents

module Piglet
  module Field
    class UdfExpression
      include Field
      
      def initialize(ali4s, *args)
        @alias, @args = ali4s, args
        @predecessors = args.select { |arg| arg.respond_to? :field_alias }
      end
      
      def to_s(inner=false)
        if inner
          "#{@alias}(#{args_to_inner_s(@args)})"
        else
          "#{@alias}(#{args_to_s(@args)})"
        end
      end
      
    private
      
      def args_to_s(arg)
        case arg
        when String
          "'#{escape(arg)}'"
        when Enumerable
          arg.map { |a| args_to_s(a) }.join(', ')
        else
          arg
        end
      end
      
      def args_to_inner_s(arg)
        if arg.is_a? String
          "'#{escape(arg)}'"
        elsif arg.is_a? Enumerable
          arg.map { |a| args_to_inner_s(a) }.join(", ")
        elsif arg.respond_to? :field_alias
          arg.field_alias
        else
          arg.to_s
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
piglet-0.3.0 lib/piglet/field/udf_expression.rb