Sha256: 1ab4f6d319e7b5243db560354c0ca200959227079ad40188b610d030849e9e68

Contents?: true

Size: 1.1 KB

Versions: 16

Compression:

Stored size: 1.1 KB

Contents

class CompilableParameter
  attr_reader :name, :type, :default_value

  class CompilerArgumentError < ArgumentError; end

  def initialize(option)
    option = option.stringify_keys
    @name = option['name']
    @type = option['type']
    @default_value = option['default']
  end

  def compile(provided_value)
    value = provided_value.blank? ? default_value : provided_value
    process(value)
  end

  private

  def process(value)
    case type
    when 'raw'
      value
    when 'string'
      as_string(value)
    when 'number'
      value.to_f.to_s
    when 'date'
      sql_cast(as_string(parse_time(value).strftime('%Y-%m-%d')), 'DATE')
    when 'timestamp'
      sql_cast(as_string(parse_time(value).utc.iso8601(3)), 'TIMESTAMP')
    else
      raise CompilerArgumentError, "Unknown parameter type #{type}"
    end
  end

  def parse_time(value)
    parsed = Chronic.parse(value)
    return parsed if parsed
    raise CompilerArgumentError, "Value #{value} is unparseable as time"
  end

  def as_string(raw)
    "'#{raw.gsub(/'/, '\'\'')}'"
  end

  def sql_cast(value, type)
    "(#{type} #{value})"
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
aleph_analytics-0.4.9.pre.dev lib/compilable_parameter.rb
aleph_analytics-0.4.8 lib/compilable_parameter.rb
aleph_analytics-0.4.7 lib/compilable_parameter.rb
aleph_analytics-0.4.4 lib/compilable_parameter.rb
aleph_analytics-0.4.2 lib/compilable_parameter.rb
aleph_analytics-0.4.1 lib/compilable_parameter.rb
aleph_analytics-0.3.0 lib/compilable_parameter.rb
aleph_analytics-0.2.0 lib/compilable_parameter.rb
aleph_analytics-0.1.0 lib/compilable_parameter.rb
aleph_analytics-0.0.6 lib/compilable_parameter.rb
aleph_analytics-0.0.5 lib/compilable_parameter.rb
aleph_analytics-0.0.4 lib/compilable_parameter.rb
aleph_analytics-0.0.3 lib/compilable_parameter.rb
aleph_analytics-0.0.2 lib/compilable_parameter.rb
aleph_analytics-0.0.1.alpha lib/compilable_parameter.rb
aleph_analytics-0.0.0.alpha lib/compilable_parameter.rb