datamapper 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +20 -1
- data/environment.rb +5 -3
- data/lib/data_mapper.rb +42 -23
- data/lib/data_mapper/adapters/data_object_adapter.rb +76 -73
- data/lib/data_mapper/adapters/mysql_adapter.rb +15 -1
- data/lib/data_mapper/adapters/postgresql_adapter.rb +1 -1
- data/lib/data_mapper/adapters/sql/commands/load_command.rb +242 -28
- data/lib/data_mapper/adapters/sql/mappings/column.rb +18 -1
- data/lib/data_mapper/adapters/sql/mappings/table.rb +20 -32
- data/lib/data_mapper/adapters/sql/quoting.rb +40 -7
- data/lib/data_mapper/adapters/sqlite3_adapter.rb +7 -1
- data/lib/data_mapper/associations/has_and_belongs_to_many_association.rb +6 -1
- data/lib/data_mapper/associations/has_many_association.rb +1 -1
- data/lib/data_mapper/context.rb +4 -2
- data/lib/data_mapper/database.rb +2 -12
- data/lib/data_mapper/support/active_record_impersonation.rb +1 -1
- data/lib/data_mapper/support/blank.rb +2 -2
- data/lib/data_mapper/support/serialization.rb +60 -4
- data/lib/data_mapper/support/string.rb +24 -2
- data/lib/data_mapper/validations/validation_errors.rb +6 -3
- data/performance.rb +20 -5
- data/plugins/dataobjects/Rakefile +2 -0
- data/plugins/dataobjects/do.rb +18 -8
- data/plugins/dataobjects/do_mysql.rb +57 -24
- data/plugins/dataobjects/do_postgres.rb +3 -7
- data/plugins/dataobjects/do_sqlite3.rb +18 -17
- data/plugins/dataobjects/swig_mysql/Makefile +146 -0
- data/plugins/dataobjects/swig_mysql/extconf.rb +13 -1
- data/plugins/dataobjects/swig_mysql/mkmf.log +24 -0
- data/plugins/dataobjects/swig_mysql/mysql_c.bundle +0 -0
- data/plugins/dataobjects/swig_mysql/mysql_c.c +303 -2501
- data/plugins/dataobjects/swig_mysql/mysql_c.i +63 -4
- data/plugins/dataobjects/swig_mysql/mysql_c.o +0 -0
- data/profile_data_mapper.rb +4 -4
- data/rakefile.rb +13 -7
- data/spec/acts_as_tree_spec.rb +2 -0
- data/spec/associations_spec.rb +12 -0
- data/spec/attributes_spec.rb +2 -0
- data/spec/base_spec.rb +2 -0
- data/spec/callbacks_spec.rb +2 -0
- data/spec/can_has_sphinx.rb +0 -1
- data/spec/coersion_spec.rb +10 -3
- data/spec/column_spec.rb +23 -0
- data/spec/conditions_spec.rb +18 -18
- data/spec/count_command_spec.rb +2 -0
- data/spec/dataobjects_spec.rb +26 -0
- data/spec/delete_command_spec.rb +2 -0
- data/spec/embedded_value_spec.rb +2 -0
- data/spec/fixtures/people.yaml +1 -1
- data/spec/fixtures/posts.yaml +3 -0
- data/spec/legacy_spec.rb +2 -0
- data/spec/load_command_spec.rb +28 -2
- data/spec/magic_columns_spec.rb +2 -0
- data/spec/models/person.rb +1 -1
- data/spec/models/post.rb +8 -0
- data/spec/query_spec.rb +2 -0
- data/spec/save_command_spec.rb +2 -0
- data/spec/schema_spec.rb +2 -0
- data/spec/serialization_spec.rb +58 -0
- data/spec/single_table_inheritance_spec.rb +2 -0
- data/spec/symbolic_operators_spec.rb +2 -0
- data/spec/validates_confirmation_of_spec.rb +2 -0
- data/spec/validates_format_of_spec.rb +2 -0
- data/spec/validates_length_of_spec.rb +2 -0
- data/spec/validates_uniqueness_of_spec.rb +2 -0
- data/spec/validations_spec.rb +2 -0
- data/tasks/fixtures.rb +15 -10
- metadata +10 -13
- data/lib/data_mapper/adapters/sql/commands/conditions.rb +0 -130
- data/lib/data_mapper/adapters/sql/commands/loader.rb +0 -99
- data/plugins/dataobjects/swig_mysql/do_mysql.bundle +0 -0
- data/spec/conversions_to_yaml_spec.rb +0 -17
data/spec/magic_columns_spec.rb
CHANGED
data/spec/models/person.rb
CHANGED
data/spec/models/post.rb
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
class Post < DataMapper::Base
|
2
2
|
property :title, :string
|
3
3
|
property :created_at, :datetime
|
4
|
+
|
5
|
+
def next
|
6
|
+
Post.first(:created_at.gte => self.created_at, :id.gt => self.id, :order => "created_at, id")
|
7
|
+
end
|
8
|
+
|
9
|
+
def previous
|
10
|
+
Post.first(:created_at.lte => self.created_at, :id.lt => self.id, :order => "created_at DESC, id DESC")
|
11
|
+
end
|
4
12
|
end
|
data/spec/query_spec.rb
CHANGED
data/spec/save_command_spec.rb
CHANGED
data/spec/schema_spec.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe DataMapper::Support::Serialization do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
fixtures(:animals)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should serialize to YAML" do
|
10
|
+
Animal.first(:name => 'Frog').to_yaml.should == <<-EOS.margin
|
11
|
+
---
|
12
|
+
id: 1
|
13
|
+
name: Frog
|
14
|
+
notes: I am a Frog!
|
15
|
+
|
16
|
+
EOS
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should serialize to XML" do
|
20
|
+
Animal.first(:name => 'Frog').to_xml.should == <<-EOS.compress_lines(false)
|
21
|
+
<animal id="1">
|
22
|
+
<name>Frog</name>
|
23
|
+
<notes>I am a Frog!</notes>
|
24
|
+
</animal>
|
25
|
+
EOS
|
26
|
+
|
27
|
+
san_diego_zoo = Zoo.first(:name => 'San Diego')
|
28
|
+
san_diego_zoo.to_xml.should == <<-EOS.compress_lines(false)
|
29
|
+
<zoo id="2">
|
30
|
+
<name>San Diego</name>
|
31
|
+
<notes/>
|
32
|
+
<updated_at>#{san_diego_zoo.updated_at}</updated_at>
|
33
|
+
</zoo>
|
34
|
+
EOS
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should serialize to JSON" do
|
38
|
+
|
39
|
+
Animal.first(:name => 'Frog').to_json.should == <<-EOS.compress_lines
|
40
|
+
{
|
41
|
+
"id": 1,
|
42
|
+
"name": "Frog",
|
43
|
+
"notes": "I am a Frog!"
|
44
|
+
}
|
45
|
+
EOS
|
46
|
+
|
47
|
+
san_diego_zoo = Zoo.first(:name => 'San Diego')
|
48
|
+
san_diego_zoo.to_json.should == <<-EOS.compress_lines
|
49
|
+
{
|
50
|
+
"id": 2,
|
51
|
+
"name": "San Diego",
|
52
|
+
"notes": null,
|
53
|
+
"updated_at": #{san_diego_zoo.updated_at.to_json}
|
54
|
+
}
|
55
|
+
EOS
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/spec/validations_spec.rb
CHANGED
data/tasks/fixtures.rb
CHANGED
@@ -5,35 +5,40 @@ namespace :dm do
|
|
5
5
|
def fixtures_path
|
6
6
|
return ENV['FIXTURE_PATH'] if ENV['FIXTURE_PATH']
|
7
7
|
|
8
|
-
%w(db dev schema spec).find do |parent|
|
9
|
-
|
10
|
-
File.exists?(test_for_dir) ? test_for_dir : nil
|
8
|
+
fixture_path = %w(db dev schema spec).find do |parent|
|
9
|
+
File.exists?("#{DM_APP_ROOT}/#{parent}/fixtures")
|
11
10
|
end
|
11
|
+
|
12
|
+
raise "Fixtures path not found." unless fixture_path
|
13
|
+
|
14
|
+
"#{DM_APP_ROOT}/#{fixture_path}/fixtures"
|
12
15
|
end
|
13
16
|
|
14
17
|
desc 'Dump database fixtures'
|
15
18
|
task :dump do
|
19
|
+
ENV['AUTO_MIGRATE'] = 'false'
|
20
|
+
Rake::Task['environment'].invoke
|
16
21
|
directory fixtures_path
|
17
|
-
puts DataMapper::Base.subclasses.join("\n")
|
18
22
|
DataMapper::Base.subclasses.each do |table|
|
19
23
|
puts "Dumping #{table}"
|
20
|
-
File.open( "#{fixtures_path}/#{table.to_s
|
21
|
-
|
24
|
+
File.open( "#{fixtures_path}/#{Inflector.underscore(table.to_s)}.yml", "w+") do |file|
|
25
|
+
file.write YAML::dump(table.all)
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
25
29
|
|
26
30
|
desc 'Load database fixtures'
|
27
31
|
task :load do
|
32
|
+
Rake::Task['environment'].invoke
|
28
33
|
directory fixtures_path
|
29
34
|
DataMapper::Base.subclasses.each do |table|
|
30
|
-
file_name = "#{fixtures_path}/#{table.to_s
|
35
|
+
file_name = "#{fixtures_path}/#{Inflector.underscore(table.to_s)}.yml"
|
31
36
|
next unless File.exists?( file_name )
|
32
37
|
puts "Loading #{table}"
|
33
38
|
table.delete_all
|
34
|
-
File.open( file_name, "r") do |
|
35
|
-
YAML::load(
|
36
|
-
table.create
|
39
|
+
File.open( file_name, "r") do |file|
|
40
|
+
YAML::load(file).each do |attributes|
|
41
|
+
table.create(attributes)
|
37
42
|
end
|
38
43
|
end
|
39
44
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: datamapper
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.2.1
|
7
|
+
date: 2007-11-02 00:00:00 -05:00
|
8
8
|
summary: An Object/Relational Mapper for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -43,9 +43,7 @@ files:
|
|
43
43
|
- lib/data_mapper/adapters/mysql_adapter.rb
|
44
44
|
- lib/data_mapper/adapters/postgresql_adapter.rb
|
45
45
|
- lib/data_mapper/adapters/sql/coersion.rb
|
46
|
-
- lib/data_mapper/adapters/sql/commands/conditions.rb
|
47
46
|
- lib/data_mapper/adapters/sql/commands/load_command.rb
|
48
|
-
- lib/data_mapper/adapters/sql/commands/loader.rb
|
49
47
|
- lib/data_mapper/adapters/sql/mappings/associations_set.rb
|
50
48
|
- lib/data_mapper/adapters/sql/mappings/column.rb
|
51
49
|
- lib/data_mapper/adapters/sql/mappings/schema.rb
|
@@ -92,9 +90,10 @@ files:
|
|
92
90
|
- spec/callbacks_spec.rb
|
93
91
|
- spec/can_has_sphinx.rb
|
94
92
|
- spec/coersion_spec.rb
|
93
|
+
- spec/column_spec.rb
|
95
94
|
- spec/conditions_spec.rb
|
96
|
-
- spec/conversions_to_yaml_spec.rb
|
97
95
|
- spec/count_command_spec.rb
|
96
|
+
- spec/dataobjects_spec.rb
|
98
97
|
- spec/delete_command_spec.rb
|
99
98
|
- spec/embedded_value_spec.rb
|
100
99
|
- spec/legacy_spec.rb
|
@@ -114,6 +113,7 @@ files:
|
|
114
113
|
- spec/query_spec.rb
|
115
114
|
- spec/save_command_spec.rb
|
116
115
|
- spec/schema_spec.rb
|
116
|
+
- spec/serialization_spec.rb
|
117
117
|
- spec/single_table_inheritance_spec.rb
|
118
118
|
- spec/spec_helper.rb
|
119
119
|
- spec/symbolic_operators_spec.rb
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- spec/fixtures/exhibits.yaml
|
128
128
|
- spec/fixtures/fruit.yaml
|
129
129
|
- spec/fixtures/people.yaml
|
130
|
+
- spec/fixtures/posts.yaml
|
130
131
|
- spec/fixtures/zoos.yaml
|
131
132
|
- tasks/drivers.rb
|
132
133
|
- tasks/fixtures.rb
|
@@ -155,10 +156,13 @@ files:
|
|
155
156
|
- plugins/dataobjects/spec/do_spec.rb
|
156
157
|
- plugins/dataobjects/spec/spec_helper.rb
|
157
158
|
- plugins/dataobjects/swig_mysql
|
158
|
-
- plugins/dataobjects/swig_mysql/do_mysql.bundle
|
159
159
|
- plugins/dataobjects/swig_mysql/extconf.rb
|
160
|
+
- plugins/dataobjects/swig_mysql/Makefile
|
161
|
+
- plugins/dataobjects/swig_mysql/mkmf.log
|
162
|
+
- plugins/dataobjects/swig_mysql/mysql_c.bundle
|
160
163
|
- plugins/dataobjects/swig_mysql/mysql_c.c
|
161
164
|
- plugins/dataobjects/swig_mysql/mysql_c.i
|
165
|
+
- plugins/dataobjects/swig_mysql/mysql_c.o
|
162
166
|
- plugins/dataobjects/swig_mysql/mysql_supp.i
|
163
167
|
- plugins/dataobjects/swig_postgres
|
164
168
|
- plugins/dataobjects/swig_postgres/extconf.rb
|
@@ -193,9 +197,7 @@ extra_rdoc_files:
|
|
193
197
|
- lib/data_mapper/adapters/mysql_adapter.rb
|
194
198
|
- lib/data_mapper/adapters/postgresql_adapter.rb
|
195
199
|
- lib/data_mapper/adapters/sql/coersion.rb
|
196
|
-
- lib/data_mapper/adapters/sql/commands/conditions.rb
|
197
200
|
- lib/data_mapper/adapters/sql/commands/load_command.rb
|
198
|
-
- lib/data_mapper/adapters/sql/commands/loader.rb
|
199
201
|
- lib/data_mapper/adapters/sql/mappings/associations_set.rb
|
200
202
|
- lib/data_mapper/adapters/sql/mappings/column.rb
|
201
203
|
- lib/data_mapper/adapters/sql/mappings/schema.rb
|
@@ -237,21 +239,16 @@ extra_rdoc_files:
|
|
237
239
|
- lib/data_mapper.rb
|
238
240
|
- tasks/drivers.rb
|
239
241
|
- tasks/fixtures.rb
|
240
|
-
- plugins/can_has_sphinx
|
241
242
|
- plugins/can_has_sphinx/init.rb
|
242
243
|
- plugins/can_has_sphinx/install.rb
|
243
|
-
- plugins/can_has_sphinx/lib
|
244
244
|
- plugins/can_has_sphinx/lib/acts_as_sphinx.rb
|
245
245
|
- plugins/can_has_sphinx/lib/sphinx.rb
|
246
246
|
- plugins/can_has_sphinx/LICENSE
|
247
247
|
- plugins/can_has_sphinx/Rakefile
|
248
248
|
- plugins/can_has_sphinx/README
|
249
249
|
- plugins/can_has_sphinx/REVISION
|
250
|
-
- plugins/can_has_sphinx/scripts
|
251
250
|
- plugins/can_has_sphinx/scripts/sphinx.sh
|
252
|
-
- plugins/can_has_sphinx/tasks
|
253
251
|
- plugins/can_has_sphinx/tasks/acts_as_sphinx_tasks.rake
|
254
|
-
- plugins/dataobjects
|
255
252
|
- plugins/dataobjects/do.rb
|
256
253
|
- plugins/dataobjects/do_mysql.rb
|
257
254
|
- plugins/dataobjects/do_postgres.rb
|
@@ -1,130 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Adapters
|
3
|
-
module Sql
|
4
|
-
module Commands
|
5
|
-
|
6
|
-
class Conditions
|
7
|
-
|
8
|
-
def initialize(adapter, loader, conditions_hash)
|
9
|
-
@adapter, @loader = adapter, loader
|
10
|
-
@conditions = parse_conditions(conditions_hash)
|
11
|
-
end
|
12
|
-
|
13
|
-
def empty?
|
14
|
-
@conditions.empty?
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_parameterized_sql
|
18
|
-
sql = []
|
19
|
-
parameters = []
|
20
|
-
|
21
|
-
@conditions.each do |condition|
|
22
|
-
case condition
|
23
|
-
when String then sql << condition
|
24
|
-
when Array then
|
25
|
-
sql << condition.shift
|
26
|
-
parameters += condition
|
27
|
-
else
|
28
|
-
raise "Unable to parse condition: #{condition.inspect}" if condition
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
parameters.unshift("(#{sql.join(') AND (')})")
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
class ConditionsError < StandardError
|
38
|
-
|
39
|
-
attr_reader :inner_error
|
40
|
-
|
41
|
-
def initialize(clause, value, inner_error)
|
42
|
-
@clause, @value, @inner_error = clause, value, inner_error
|
43
|
-
end
|
44
|
-
|
45
|
-
def message
|
46
|
-
"Conditions (:clause => #{@clause.inspect}, :value => #{@value.inspect}) failed: #{@inner_error}"
|
47
|
-
end
|
48
|
-
|
49
|
-
def backtrace
|
50
|
-
@inner_error.backtrace
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
def expression_to_sql(clause, value, collector)
|
56
|
-
qualify_columns = @loader.qualify_columns?
|
57
|
-
|
58
|
-
case clause
|
59
|
-
when Symbol::Operator then
|
60
|
-
operator = case clause.type
|
61
|
-
when :gt then '>'
|
62
|
-
when :gte then '>='
|
63
|
-
when :lt then '<'
|
64
|
-
when :lte then '<='
|
65
|
-
when :not then inequality_operator(value)
|
66
|
-
when :eql then equality_operator(value)
|
67
|
-
when :like then equality_operator(value, 'LIKE')
|
68
|
-
when :in then equality_operator(value)
|
69
|
-
else raise ArgumentError.new('Operator type not supported')
|
70
|
-
end
|
71
|
-
collector << ["#{primary_class_table[clause].to_sql(qualify_columns)} #{operator} ?", value]
|
72
|
-
when Symbol then
|
73
|
-
collector << ["#{primary_class_table[clause].to_sql(qualify_columns)} #{equality_operator(value)} ?", value]
|
74
|
-
when String then
|
75
|
-
collector << [clause, value]
|
76
|
-
when Mappings::Column then
|
77
|
-
collector << ["#{clause.to_sql(qualify_columns)} #{equality_operator(value)} ?", value]
|
78
|
-
else raise "CAN HAS CRASH? #{clause.inspect}"
|
79
|
-
end
|
80
|
-
rescue => e
|
81
|
-
raise ConditionsError.new(clause, value, e)
|
82
|
-
end
|
83
|
-
|
84
|
-
def equality_operator(value, default = '=')
|
85
|
-
case value
|
86
|
-
when NilClass then 'IS'
|
87
|
-
when Array then 'IN'
|
88
|
-
else default
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def inequality_operator(value, default = '<>')
|
93
|
-
case value
|
94
|
-
when NilClass then 'IS NOT'
|
95
|
-
when Array then 'NOT IN'
|
96
|
-
else default
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def parse_conditions(conditions_hash)
|
101
|
-
collection = []
|
102
|
-
|
103
|
-
case x = conditions_hash.delete(:conditions)
|
104
|
-
when Array then
|
105
|
-
clause = x.shift
|
106
|
-
expression_to_sql(clause, x, collection)
|
107
|
-
when Hash then
|
108
|
-
x.each_pair do |key,value|
|
109
|
-
expression_to_sql(key, value, collection)
|
110
|
-
end
|
111
|
-
else
|
112
|
-
raise "Unable to parse conditions: #{x.inspect}" if x
|
113
|
-
end
|
114
|
-
|
115
|
-
conditions_hash.each_pair do |key,value|
|
116
|
-
expression_to_sql(key, value, collection)
|
117
|
-
end
|
118
|
-
|
119
|
-
collection
|
120
|
-
end
|
121
|
-
|
122
|
-
def primary_class_table
|
123
|
-
@primary_class_table || (@primary_class_table = @loader.send(:primary_class_table))
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Adapters
|
3
|
-
module Sql
|
4
|
-
module Commands
|
5
|
-
|
6
|
-
class Loader
|
7
|
-
|
8
|
-
def initialize(load_command, klass)
|
9
|
-
@load_command, @klass = load_command, klass
|
10
|
-
@columns = {}
|
11
|
-
@key = nil
|
12
|
-
@key_index = nil
|
13
|
-
@type_override_present = false
|
14
|
-
@type_override_index = nil
|
15
|
-
@type_override = nil
|
16
|
-
@session = load_command.session
|
17
|
-
@reload = load_command.reload?
|
18
|
-
@set = []
|
19
|
-
end
|
20
|
-
|
21
|
-
def add_column(column, index)
|
22
|
-
if column.key?
|
23
|
-
@key = column
|
24
|
-
@key_index = index
|
25
|
-
end
|
26
|
-
|
27
|
-
if column.type == :class
|
28
|
-
@type_override_present = true
|
29
|
-
@type_override_index = index
|
30
|
-
@type_override = column
|
31
|
-
end
|
32
|
-
|
33
|
-
@columns[index] = column
|
34
|
-
|
35
|
-
self
|
36
|
-
end
|
37
|
-
|
38
|
-
def materialize(values)
|
39
|
-
|
40
|
-
instance_id = @key.type_cast_value(values[@key_index])
|
41
|
-
instance = if @type_override_present
|
42
|
-
create_instance(instance_id, @type_override.type_cast_value(values[@type_override_index]))
|
43
|
-
else
|
44
|
-
create_instance(instance_id)
|
45
|
-
end
|
46
|
-
|
47
|
-
@klass.callbacks.execute(:before_materialize, instance)
|
48
|
-
|
49
|
-
original_hashes = instance.original_hashes
|
50
|
-
|
51
|
-
@columns.each_pair do |index, column|
|
52
|
-
# This may be a little confusing, but we're
|
53
|
-
# setting both the original-hash value, and the
|
54
|
-
# instance-variable through method chaining to avoid
|
55
|
-
# lots of extra short-lived local variables.
|
56
|
-
original_hashes[column.name] = instance.instance_variable_set(
|
57
|
-
column.instance_variable_name,
|
58
|
-
column.type_cast_value(values[index])
|
59
|
-
).hash
|
60
|
-
end
|
61
|
-
|
62
|
-
instance.instance_variable_set(:@loaded_set, @set)
|
63
|
-
@set << instance
|
64
|
-
|
65
|
-
@klass.callbacks.execute(:after_materialize, instance)
|
66
|
-
|
67
|
-
return instance
|
68
|
-
end
|
69
|
-
|
70
|
-
def loaded_set
|
71
|
-
@set
|
72
|
-
end
|
73
|
-
|
74
|
-
private
|
75
|
-
|
76
|
-
def create_instance(instance_id, instance_type = @klass)
|
77
|
-
instance = @session.identity_map.get(@klass, instance_id)
|
78
|
-
|
79
|
-
if instance.nil? || @reload
|
80
|
-
instance = instance_type.new() if instance.nil?
|
81
|
-
instance.instance_variable_set(:@__key, instance_id)
|
82
|
-
instance.instance_variable_set(:@new_record, false)
|
83
|
-
@session.identity_map.set(instance)
|
84
|
-
elsif instance.new_record?
|
85
|
-
instance.instance_variable_set(:@__key, instance_id)
|
86
|
-
instance.instance_variable_set(:@new_record, false)
|
87
|
-
end
|
88
|
-
|
89
|
-
instance.session = @session
|
90
|
-
|
91
|
-
return instance
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
end # module Commands
|
97
|
-
end # module Sql
|
98
|
-
end # module Adapters
|
99
|
-
end # module DataMapper
|