Class: DataMapper::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/data_mapper/database.rb

Defined Under Namespace

Classes: ConditionEscapeError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Database

Returns a new instance of Database.



52
53
54
# File 'lib/data_mapper/database.rb', line 52

def initialize(name)
  @name = name
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args) ⇒ Object

Shortcut to adapter.class::Queries::FooStatement.new



57
58
59
60
# File 'lib/data_mapper/database.rb', line 57

def method_missing(sym, *args)
  return super if sym.to_s !~ /_statement$/
  @adapter.class::Queries.const_get(Inflector.classify(sym.to_s)).new(self, *args)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



76
77
78
# File 'lib/data_mapper/database.rb', line 76

def name
  @name
end

Class Method Details

.[](name) ⇒ Object



38
39
40
# File 'lib/data_mapper/database.rb', line 38

def self.[](name)
  @databases[name]
end

.contextObject



42
43
44
# File 'lib/data_mapper/database.rb', line 42

def self.context
  @context
end

.setup(name = :default, &initializer) ⇒ Object



46
47
48
49
50
# File 'lib/data_mapper/database.rb', line 46

def self.setup(name = :default, &initializer)
  current = self.new(name)
  current.instance_eval(&initializer)
  @databases[name] = current
end

Instance Method Details

#[](klass_or_table_name) ⇒ Object



66
67
68
# File 'lib/data_mapper/database.rb', line 66

def [](klass_or_table_name)
  schema[klass_or_table_name]
end

#adapter(value = nil) ⇒ Object

Raises:

  • (ArgumentError)


78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/data_mapper/database.rb', line 78

def adapter(value = nil)
  return @adapter if value.nil?
  
  raise ArgumentError.new('The adapter is readonly after being set') unless @adapter.nil?
  
  require "data_mapper/adapters/#{Inflector.underscore(value)}_adapter"
  adapter_class = Adapters::const_get(Inflector.classify(value) + "Adapter")
  
  (class << self; self end).send(:include, adapter_class::Quoting)
  (class << self; self end).send(:include, adapter_class::Coersion)
  
  @adapter = adapter_class.new(self)
end

#connectionObject



119
120
121
122
123
# File 'lib/data_mapper/database.rb', line 119

def connection
  @adapter.connection do |db|
    results = yield(db)
  end
end

#database(value = nil) ⇒ Object



93
# File 'lib/data_mapper/database.rb', line 93

def database(value = nil); value.nil? ? @database : @database = value end

#execute(sql) ⇒ Object



129
130
131
# File 'lib/data_mapper/database.rb', line 129

def execute(sql)
  connection { |db| db.execute(sql) }
end

#host(value = nil) ⇒ Object



92
# File 'lib/data_mapper/database.rb', line 92

def host(value = nil); value.nil? ? (@host || 'localhost') : @host = value end

#log(value = nil) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/data_mapper/database.rb', line 97

def log(value = nil)
  @log = value unless value.nil?

  if @log.nil?
    @log = log_stream.nil? ? Logger.new(nil) : Logger.new(log_stream, File::WRONLY | File::APPEND | File::CREAT)
    @log.level = log_level || Logger::WARN
    at_exit { @log.close }
  end
  
  @log
end

#log_level(value = nil) ⇒ Object



109
110
111
112
# File 'lib/data_mapper/database.rb', line 109

def log_level(value = nil)
  return @log_level if value.nil?
  @log_level = value
end

#log_stream(value = nil) ⇒ Object



114
115
116
117
# File 'lib/data_mapper/database.rb', line 114

def log_stream(value = nil)
  return @log_stream if value.nil?
  @log_stream = value
end

#password(value = nil) ⇒ Object



95
# File 'lib/data_mapper/database.rb', line 95

def password(value = nil); value.nil? ? (@password || '') : @password = value end

#query(sql) ⇒ Object



125
126
127
# File 'lib/data_mapper/database.rb', line 125

def query(sql)
  connection { |db| db.query(sql) }
end

#schemaObject



70
71
72
# File 'lib/data_mapper/database.rb', line 70

def schema
  @schema ||= Mappings::Schema.new(self)
end

#syntax(token) ⇒ Object



62
63
64
# File 'lib/data_mapper/database.rb', line 62

def syntax(token)
  @adapter.class::SYNTAX[token]
end

#username(value = nil) ⇒ Object



94
# File 'lib/data_mapper/database.rb', line 94

def username(value = nil); value.nil? ? @username : @username = value end