Class: DataMapper::Context

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

Defined Under Namespace

Classes: MaterializationError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter) ⇒ Context

Returns a new instance of Context.



12
13
14
# File 'lib/data_mapper/context.rb', line 12

def initialize(adapter)
  @adapter = adapter
end

Instance Attribute Details

#adapterObject (readonly)

Returns the value of attribute adapter.



10
11
12
# File 'lib/data_mapper/context.rb', line 10

def adapter
  @adapter
end

Instance Method Details

#all(klass, options = {}) ⇒ Object



51
52
53
# File 'lib/data_mapper/context.rb', line 51

def all(klass, options = {})
  @adapter.load(self, klass, options)
end

#column_exists_for_table?(klass, column_name) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/data_mapper/context.rb', line 87

def column_exists_for_table?(klass, column_name)
  @adapter.column_exists_for_table?(klass, column_name)
end

#count(klass, *args) ⇒ Object



55
56
57
# File 'lib/data_mapper/context.rb', line 55

def count(klass, *args)
  table(klass).count(*args)
end

#create_table(klass) ⇒ Object



75
76
77
# File 'lib/data_mapper/context.rb', line 75

def create_table(klass)
  table(klass).create!
end

#delete_all(klass) ⇒ Object



67
68
69
# File 'lib/data_mapper/context.rb', line 67

def delete_all(klass)
  @adapter.delete(self, klass)
end

#destroy(instance) ⇒ Object



63
64
65
# File 'lib/data_mapper/context.rb', line 63

def destroy(instance)
  @adapter.delete(self, instance)
end

#drop_table(klass) ⇒ Object



79
80
81
# File 'lib/data_mapper/context.rb', line 79

def drop_table(klass)
  table(klass).drop!
end

#execute(*args) ⇒ Object



91
92
93
# File 'lib/data_mapper/context.rb', line 91

def execute(*args)
  @adapter.execute(*args)
end

#first(klass, *args) ⇒ Object



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
# File 'lib/data_mapper/context.rb', line 20

def first(klass, *args)
  id = nil
  options = nil
  table = self.table(klass)
  key = table.key
  
  if args.empty? # No id, no options
    options = { :limit => 1 }
  elsif args.size == 2 && args.last.kind_of?(Hash) # id AND options
    options = args.last.merge(key => args.first)
  elsif args.size == 1 # id OR options
    if args.first.kind_of?(Hash)
      options = args.first.merge(:limit => 1) # no id, add limit
    else
      options = { key => args.first } # no options, set id
    end
  else
    raise ArgumentError.new('Context#first takes a class, and optional type_or_id and/or options arguments')
  end
  
  # Account for undesired behaviour in MySQL that returns the
  # last inserted row when the WHERE clause contains a "#{primary_key} IS NULL".
  return nil if options.has_key?(key.name) && options[key.name] == nil
  
  @adapter.load(self, klass, options).first
end

#get(klass, keys) ⇒ Object



47
48
49
# File 'lib/data_mapper/context.rb', line 47

def get(klass, keys)
  @adapter.get(self, klass, keys)
end

#identity_mapObject



16
17
18
# File 'lib/data_mapper/context.rb', line 16

def identity_map
  @identity_map || ( @identity_map = IdentityMap.new )
end

#loggerObject



107
108
109
# File 'lib/data_mapper/context.rb', line 107

def logger
  @logger || @logger = @adapter.logger
end

#query(*args) ⇒ Object



95
96
97
# File 'lib/data_mapper/context.rb', line 95

def query(*args)      
  @adapter.query(*args)
end

#save(instance) ⇒ Object



59
60
61
# File 'lib/data_mapper/context.rb', line 59

def save(instance)
  @adapter.save(self, instance)
end

#schemaObject



99
100
101
# File 'lib/data_mapper/context.rb', line 99

def schema
  @adapter.schema
end

#table(klass) ⇒ Object



103
104
105
# File 'lib/data_mapper/context.rb', line 103

def table(klass)
  @adapter.table(klass)
end

#table_exists?(klass) ⇒ Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/data_mapper/context.rb', line 83

def table_exists?(klass)
  table(klass).exists?
end

#truncate(klass) ⇒ Object



71
72
73
# File 'lib/data_mapper/context.rb', line 71

def truncate(klass)
  table(klass).truncate!
end