class PgBundle::Dsl

The Dsl class defines the Domain Specific Language for the PgFile it's mainly user to parse a PgFile and return a Definition Object

Public Class Methods

new() click to toggle source
# File lib/pgbundle/dsl.rb, line 5
def initialize
  @definition = Definition.new
  @databases = []
end

Public Instance Methods

database(*args) click to toggle source
# File lib/pgbundle/dsl.rb, line 26
def database(*args)
  opts = extract_options!(args)
  @databases << Database.new(args.first, opts)
end
eval_pgfile(pgfile, contents=nil) click to toggle source
# File lib/pgbundle/dsl.rb, line 10
def eval_pgfile(pgfile, contents=nil)
  contents ||= File.read(pgfile.to_s)
  instance_eval(contents)
  raise PgfileError, "no databases defined" if @databases.size == 0
  @databases.map{|d| df = @definition.clone; df.database = d; df}
rescue SyntaxError => e
  syntax_msg = e.message.gsub("#{pgfile}:", 'on line ')
  raise PgfileError, "Pgfile syntax error #{syntax_msg}"
rescue ScriptError, RegexpError, NameError, ArgumentError => e
  e.backtrace[0] = "#{e.backtrace[0]}: #{e.message} (#{e.class})"
  puts e.backtrace.join("\n       ")
  raise PgfileError, "There was an error in your Pgfile," \
    " and pgbundle cannot continue. " \
    + e.message
end
pgx(*args) click to toggle source
# File lib/pgbundle/dsl.rb, line 31
def pgx(*args)
  opts = extract_options!(args)
  ext = Extension.new(*args, opts)
  @definition.extensions[ext.name] = ext
end

Private Instance Methods

extract_options!(arr) click to toggle source
# File lib/pgbundle/dsl.rb, line 39
def extract_options!(arr)
  if arr.last.is_a? Hash
    arr.pop
  else
    {}
  end
end