class CompilableParameter

Attributes

default_value[R]
name[R]
type[R]

Public Class Methods

new(option) click to toggle source
# File lib/compilable_parameter.rb, line 6
def initialize(option)
  option = option.stringify_keys
  @name = option['name']
  @type = option['type']
  @default_value = option['default']
end

Public Instance Methods

compile(provided_value) click to toggle source
# File lib/compilable_parameter.rb, line 13
def compile(provided_value)
  value = provided_value.blank? ? default_value : provided_value
  process(value)
end

Private Instance Methods

as_string(raw) click to toggle source
# File lib/compilable_parameter.rb, line 43
def as_string(raw)
  "'#{raw.gsub(/'/, '\'\'')}'"
end
parse_time(value) click to toggle source
# File lib/compilable_parameter.rb, line 37
def parse_time(value)
  parsed = Chronic.parse(value)
  return parsed if parsed
  raise CompilerArgumentError, "Value #{value} is unparseable as time"
end
process(value) click to toggle source
# File lib/compilable_parameter.rb, line 20
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
sql_cast(value, type) click to toggle source
# File lib/compilable_parameter.rb, line 47
def sql_cast(value, type)
  "(#{type} #{value})"
end