Class: Ditto::Options
- Inherits:
-
OpenStruct
- Object
- OpenStruct
- Ditto::Options
- Defined in:
- lib/ditto/options.rb
Constant Summary collapse
- DEFAULTS =
{ :connstring => ENV['DATABASE_URL'] || 'nodb://a/b', :entitydir => 'ditto', :dittomart => ENV['DITTO_MART'], :debug => false, :check => false, :droptables => false, :verbose => 0, :loadfiles => nil }
Instance Method Summary collapse
-
#atfile(fn, dir = '.') ⇒ Object
Take a filename and expand it if it’s an @file relative paths are always relative to the including file return an array of absolute filenames.
-
#initialize(argv) ⇒ Options
constructor
A new instance of Options.
Constructor Details
#initialize(argv) ⇒ Options
Returns a new instance of Options.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ditto/options.rb', line 18 def initialize argv super(DEFAULTS) Ditto::Options::DEFAULTS.each do |k,v| self.send "#{k}=".to_s, v end OptionParser.new do |opts| opts. = "Usage: ditto [ options ] files..." opts.separator "Files specified (in yaml format) will be loaded into database" opts.on("-c STRING", "--connection", String, "Database connection string", "Defaults to environment variable DATABASE_URL", "Current default is #{DEFAULTS[:connstring]}") do |s| self.connstring = s end opts.on("-e DIR", "--entitydir", String, "Directory to load Ditto entities from (default #{DEFAULTS[:entitydir]})") do |m| raise "Entity dir #{m} does not exist!" unless Dir.exist?(m) self.entitydir = m end opts.on("-m FILE", "--dittomart", String, "File containing Datamapper models for target Datamart (default #{DEFAULTS[:dittomart]})") do |m| self.dittomart = m end opts.on("-d", "--debug", "Debug") do |s| self.debug = true end opts.on("-v", "--verbose", "Verbose (repeat for more)") do self.verbose += 1 end opts.on("--check", "Check given files, don't do anything!") do self.check = true end opts.on("--droptables", "Delete existing database tables!") do self.droptables = true end opts.on("-?", "-h", "--help", "Show this message") do puts opts exit end begin opts.parse!(argv) rescue OptionParser::ParseError => e STDERR.puts e., "\n", opts exit(-1) end end self.martfiles = atfile self.dittomart self.loadfiles = argv.map{ |m| atfile m}.flatten return self end |
Instance Method Details
#atfile(fn, dir = '.') ⇒ Object
Take a filename and expand it if it’s an @file relative paths are always relative to the including file return an array of absolute filenames
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/ditto/options.rb', line 72 def atfile fn, dir = '.' return [] unless fn af = fn.split('@',2) fn = af[1] if af.size == 2 fn = File.(fn,dir) raise Errno::ENOENT, fn unless File.exist? fn return Array[fn] if af.size == 1 dir = File.dirname File.absolute_path(fn) fh = File.open(fn) files = [] fh.each_with_index do |line,ix| line.strip! begin files.push *atfile(line,dir) unless line =~ /(^\s*$|^\s*#)/ rescue $!. << " at '#{fn}:#{ix}'" raise end end return files end |