Sha256: 18491f95363deee2c82535b28abaae488e347df040d72c692ccf6b3e83a86ed7

Contents?: true

Size: 1.03 KB

Versions: 4

Compression:

Stored size: 1.03 KB

Contents

module BB
  module Converter
    class Table
      TEMPLATE = {
        subquery: "(%s)",
        table_date_range: "TABLE_DATE_RANGE(%s, %s, %s)"
      }.freeze

      attr_reader :value, :options

      def initialize(value, options = {})
        @value   = value
        @options = options
      end

      def convert
        evaluated_type = Evaluator::Table.eval_type(value, options)
        evaluated_type && send("to_#{evaluated_type}")
      end

      private

      def to_subquery
        format(TEMPLATE[:subquery], value.to_sql)
      end

      def to_table_date
        options[:on].strftime("#{value}%Y%m%d")
      end

      def to_table_date_range
        from = Value.convert(options[:from], type: :timestamp)
        to   = Value.convert(options[:to],   type: :timestamp)

        format(TEMPLATE[:table_date_range], value, from, to)
      end

      def to_plain
        value.to_s
      end

      class << self
        def convert(value, options = {})
          new(value, options).convert
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
b_b-0.1.3 lib/b_b/converter/table.rb
b_b-0.1.2 lib/b_b/converter/table.rb
b_b-0.1.1 lib/b_b/converter/table.rb
b_b-0.1.0 lib/b_b/converter/table.rb