Class DataMapper::Adapters::Sql::Commands::LoadCommand::Loader
In: lib/data_mapper/adapters/sql/commands/load_command.rb
lib/data_mapper/adapters/sql/commands/load_command.rb
Parent: Object

Methods

Public Class methods

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 10
10:             def initialize(load_command, klass)
11:               @load_command, @klass = load_command, klass
12:               @columns = {}
13:               @key = nil
14:               @key_index = nil
15:               @type_override_present = false
16:               @type_override_index = nil
17:               @type_override = nil
18:               @database_context = load_command.database_context
19:               @reload = load_command.reload?
20:               @set = []
21:             end

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 10
10:             def initialize(load_command, klass)
11:               @load_command, @klass = load_command, klass
12:               @columns = {}
13:               @key = nil
14:               @key_index = nil
15:               @type_override_present = false
16:               @type_override_index = nil
17:               @type_override = nil
18:               @database_context = load_command.database_context
19:               @reload = load_command.reload?
20:               @set = []
21:             end

Public Instance methods

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 23
23:             def add_column(column, index)
24:               if column.key?
25:                 @key = column 
26:                 @key_index = index
27:               end
28: 
29:               if column.type == :class
30:                 @type_override_present = true
31:                 @type_override_index = index
32:                 @type_override = column
33:               end
34: 
35:               @columns[index] = column
36: 
37:               self
38:             end

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 23
23:             def add_column(column, index)
24:               if column.key?
25:                 @key = column 
26:                 @key_index = index
27:               end
28: 
29:               if column.type == :class
30:                 @type_override_present = true
31:                 @type_override_index = index
32:                 @type_override = column
33:               end
34: 
35:               @columns[index] = column
36: 
37:               self
38:             end

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 85
85:             def loaded_set
86:               @set
87:             end

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 85
85:             def loaded_set
86:               @set
87:             end

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 40
40:             def materialize(values)
41:               instance_id = @key.type_cast_value(values[@key_index])
42:               instance = create_instance(instance_id,
43:                 if @type_override_present
44:                   @type_override.type_cast_value(values[@type_override_index]) || @klass
45:                 else
46:                   @klass
47:                 end
48:               )
49:               
50:               @klass.callbacks.execute(:before_materialize, instance)
51: 
52:               type_casted_values = {}
53:               
54:               @columns.each_pair do |index, column|
55:                 # This may be a little confusing, but we're
56:                 # setting both the original_value, and the
57:                 # instance-variable through method chaining to avoid
58:                 # lots of extra short-lived local variables.
59:                 begin
60:                   type_casted_values[column.name] = instance.instance_variable_set(
61:                     column.instance_variable_name,
62:                     column.type_cast_value(values[index])
63:                   )
64:                 rescue => e
65:                   raise MaterializationError.new("Failed to materialize column #{column.name.inspect} with value #{values[index].inspect}\n#{e.display}")
66:                 end
67:               end
68:               
69:               instance.original_values = type_casted_values
70:               instance.instance_variable_set(:@loaded_set, @set)
71:               @set << instance
72: 
73:               @klass.callbacks.execute(:after_materialize, instance)
74: 
75:               return instance
76:               
77:             rescue => e
78:               if e.is_a?(MaterializationError)
79:                 raise e
80:               else
81:                 raise MaterializationError.new("Failed to materialize row: #{values.inspect}\n#{e.display}")
82:               end
83:             end

[Source]

    # File lib/data_mapper/adapters/sql/commands/load_command.rb, line 40
40:             def materialize(values)
41:               instance_id = @key.type_cast_value(values[@key_index])
42:               instance = create_instance(instance_id,
43:                 if @type_override_present
44:                   @type_override.type_cast_value(values[@type_override_index]) || @klass
45:                 else
46:                   @klass
47:                 end
48:               )
49:               
50:               @klass.callbacks.execute(:before_materialize, instance)
51: 
52:               type_casted_values = {}
53:               
54:               @columns.each_pair do |index, column|
55:                 # This may be a little confusing, but we're
56:                 # setting both the original_value, and the
57:                 # instance-variable through method chaining to avoid
58:                 # lots of extra short-lived local variables.
59:                 begin
60:                   type_casted_values[column.name] = instance.instance_variable_set(
61:                     column.instance_variable_name,
62:                     column.type_cast_value(values[index])
63:                   )
64:                 rescue => e
65:                   raise MaterializationError.new("Failed to materialize column #{column.name.inspect} with value #{values[index].inspect}\n#{e.display}")
66:                 end
67:               end
68:               
69:               instance.original_values = type_casted_values
70:               instance.instance_variable_set(:@loaded_set, @set)
71:               @set << instance
72: 
73:               @klass.callbacks.execute(:after_materialize, instance)
74: 
75:               return instance
76:               
77:             rescue => e
78:               if e.is_a?(MaterializationError)
79:                 raise e
80:               else
81:                 raise MaterializationError.new("Failed to materialize row: #{values.inspect}\n#{e.display}")
82:               end
83:             end

[Validate]