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