Method: Abtab::Driver::DbiDriver#initialize

Defined in:
lib/abtab/drivers/dbi_driver.rb

#initialize(url) ⇒ DbiDriver

Returns a new instance of DbiDriver.



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
67
68
69
70
71
72
73
74
75
76
# File 'lib/abtab/drivers/dbi_driver.rb', line 29

def initialize url
  @options = {
    :dbi_driver => nil,
    :host       => nil,
    :user       => nil,
    :pass       => nil,
    :database   => nil,
    :table      => nil,
  }

  @rc_defaults = {}
  if File.exist? CREDENTIALS_RC_FILE
    @rc_defaults.merge!(YAML.load_file(CREDENTIALS_RC_FILE))
  end

  @url = url
  schema, rest = url.split '://', 2

  # expect 'driver' name, eg: pg
  driver, host, database_name, table = rest.split '/', 4

  if driver =~ /@/
    user_pass, driver = driver.split '@', 2
    user, pass = nil, nil
    if user_pass =~ /:/
      user, pass = user_pass.split ':', 2
      @options[:user] = user
      @options[:pass] = pass
    end
    @options[:dbi_driver] = driver
  end

  @options[:dbi_driver] = driver
  @options[:database]   = database_name
  @options[:host]       = host
  @options[:table]      = table

  @options[:user] ||= lookup_rc_default @options[:host], @options[:database], "user"
  @options[:pass] ||= lookup_rc_default @options[:host], @options[:database], "pass"

  #puts "OPTIONS: #{@options.inspect}"

  require DB_MODULES[@options[:dbi_driver]][:require]
  driver_name = DB_MODULES[@options[:dbi_driver]][:name]

  @conn = DBI.connect("DBI:#{driver_name}:database=#{@options[:database]};host=#{@options[:host]}",@options[:user],@options[:pass]);

end