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