class Bricolage::SQLMetaDataParser

Constants

DECLARATIONS
KEYS_RE

Public Instance Methods

parse(source) click to toggle source
# File lib/bricolage/sqlstatement.rb, line 247
def parse(source)
  parse_meta(read_meta(source))
end
parse_declarations(source) click to toggle source
# File lib/bricolage/sqlstatement.rb, line 243
def parse_declarations(source)
  build_decls(parse(source))
end

Private Instance Methods

build_decls(map) click to toggle source
# File lib/bricolage/sqlstatement.rb, line 260
def build_decls(map)
  decls = Declarations.new
  DECLARATIONS.each do |key, type|
    value = map.delete(key)
    decls.send "declare_#{type}", key, value if value
  end
  unless map.empty?
    raise ParameterError, "unknown SQL parameter declaration: #{map.keys.join(', ')}"
  end
  decls.freeze
  decls
end
parse_meta(source) click to toggle source
# File lib/bricolage/sqlstatement.rb, line 273
def parse_meta(source)
  return Hash.new if source.empty?
  YAML.load(source) || {}
rescue YAML::SyntaxError => ex
  raise ParameterError, "SQL meta data syntax error: #{ex.message}"
end
read_meta(source) click to toggle source
# File lib/bricolage/sqlstatement.rb, line 282
def read_meta(source)
  lines = ''
  source.each_line do |line|
    case line
    when KEYS_RE
      lines.concat line.sub(/\A--/, '')
    when /\A--([\w\-]+):/
      key = $1
      raise ParameterError, "unknown SQL meta data: #{source}: #{key}"
    when /\A--/
      # skip non-metadata comments
      lines.concat "\n"
    else
      break
    end
  end
  lines
end