Class: Rubeus::Extensions::Java::Sql::DriverManager::Loader

Inherits:
Object
  • Object
show all
Defined in:
lib/rubeus/extensions/java/sql/driver_manager.rb,
lib/rubeus/extensions/java/sql/driver_manager.rb

Overview

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Loader

Returns a new instance of Loader.



57
58
59
60
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 57

def initialize(name)
  @name = name
  @patterns = []
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



55
56
57
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 55

def name
  @name
end

Class Method Details

.entriesObject



27
28
29
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 27

def self.entries
  @entries ||= []
end

.entry(name, pattern, driver, driver_type = :unknown, options = nil, &block) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 31

def self.entry(name, pattern, driver, driver_type = :unknown, options = nil, &block)
  result = entry_with(name) do |db|
    db.pattern(pattern, driver, driver_type)
    db.options = options
  end
  result.instance_eval(&block) if block_given?
  result
end

.entry_with(name, &block) ⇒ Object



40
41
42
43
44
45
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 40

def self.entry_with(name, &block)
  result = self.new(name)
  result.instance_eval(&block) if block_given?
  entries << result
  result
end

.setup_for(url, setup_options = nil) ⇒ Object

Raises:

  • (ArgumentError)


47
48
49
50
51
52
53
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 47

def self.setup_for(url, setup_options = nil)
  entries.each do |entry|
    driver = entry.setup_for(url, setup_options)
    return driver if driver
  end
  raise ArgumentError, "DriverManager catalog not found for #{url}"
end

Instance Method Details

#driver_for(url, driver_type = nil) ⇒ Object



74
75
76
77
78
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 74

def driver_for(url, driver_type = nil)
  patterns = driver_type ? @patterns.select{|pattern| pattern[:driver_type] == driver_type} : @patterns
  pattern = patterns.detect{|pattern| pattern[:pattern] =~ url}
  pattern ? pattern[:driver] : nil
end

#optionsObject



66
67
68
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 66

def options
  @options ||= {} 
end

#options=(value) ⇒ Object



70
71
72
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 70

def options=(value)
  @options = value
end

#pattern(pattern, driver, driver_type = :unknown) ⇒ Object



62
63
64
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 62

def pattern(pattern, driver, driver_type = :unknown)
  @patterns << {:pattern => pattern, :driver => driver, :driver_type => driver_type}
end

#setup_for(url, setup_options = nil) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/rubeus/extensions/java/sql/driver_manager.rb', line 80

def setup_for(url, setup_options = nil)
  driver_name = driver_for(url)
  return nil unless driver_name
  begin
    return JavaUtilities.get_proxy_class(driver_name)
  rescue NameError => name_error
    requirements = options[:gem_require]
    raise name_error unless requirements
    requirements = [requirements] unless requirements.is_a?(Array)
    load_error_messages = []
    requirements.each do |requirement|
      begin
        require(requirement)
      rescue LoadError => load_error
        msg = "failure to load '#{requirement}' of '#{options[:gem]}'."
        msg << " Try 'jruby -S gem install #{options[:gem]}'" unless /\.jar$/ =~ requirement
        load_error_messages << msg
        next
      end
      begin
        return JavaUtilities.get_proxy_class(driver_name)
      rescue NameError => name_error_again
        msg = "#{driver_name} not found for #{url}"
        msg << ", but loaded '#{requirement}' of '#{options[:gem]}' successfully."
        msg << " It might be a serious problem. Please let us know by email '#{Rubeus::EMAIL_GROUP}'. "
        raise NameError, msg
      end
    end
    raise LoadError, "#{driver_name} not found for #{url} because of " << load_error_messages.join(" AND ")
  end
end