class SQLCompiler

Constants

CompilerResult

Attributes

parameters[RW]

Public Class Methods

new(options) click to toggle source
# File lib/sql_compiler.rb, line 6
def initialize(options)
  @body = options[:body]
  @parameter_reporters = options[:parameters]
end

Public Instance Methods

compile(substitution_values = {}) click to toggle source
# File lib/sql_compiler.rb, line 11
def compile(substitution_values = {})
  compile!(substitution_values)
rescue CompilableParameter::CompilerArgumentError => e
  CompilerResult.new(nil, nil, e)
end
compile!(substitution_values = {}) click to toggle source
# File lib/sql_compiler.rb, line 17
def compile!(substitution_values = {})
  effective_values = get_effective_values(substitution_values)
  body = effective_values.inject(@body) do |body, (name, value)|
    body.gsub(/{\s*#{name}\s*}/) { value }
  end
  CompilerResult.new(body, effective_values)
end

Protected Instance Methods

get_effective_values(substitution_values) click to toggle source
# File lib/sql_compiler.rb, line 27
def get_effective_values(substitution_values)
  substitution_values = substitution_values.stringify_keys
  @parameter_reporters.each_with_object({}) do |parameter_reporter, hash|
    hash[parameter_reporter.name] = parameter_reporter.compile(substitution_values[parameter_reporter.name])
  end
end