lafcadio 0.7.3 → 0.7.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,7 @@ module Lafcadio
8
8
  @objects = {}
9
9
  @retrievals_by_type = Hash.new 0
10
10
  @query_count = Hash.new( 0 )
11
+ @next_pk_ids = {}
11
12
  end
12
13
 
13
14
  def commit(db_object)
@@ -53,17 +54,23 @@ module Lafcadio
53
54
  end
54
55
 
55
56
  def get_pk_id_before_committing( db_object )
56
- object_pk_id = db_object.pk_id
57
- unless object_pk_id
58
- maxpk_id = 0
59
- pk_ids = get_objects_by_domain_class( db_object.domain_class ).keys
60
- pk_ids.each { |pk_id|
61
- maxpk_id = pk_id if pk_id > maxpk_id
62
- }
63
- @last_pk_id_inserted = maxpk_id + 1
64
- object_pk_id = @last_pk_id_inserted
57
+ if db_object.pk_id
58
+ db_object.pk_id
59
+ else
60
+ if ( next_pk_id = @next_pk_ids[db_object.domain_class] )
61
+ @last_pk_id_inserted = next_pk_id
62
+ @next_pk_ids[db_object.domain_class] = nil
63
+ next_pk_id
64
+ else
65
+ maxpk_id = 0
66
+ pk_ids = get_objects_by_domain_class( db_object.domain_class ).keys
67
+ pk_ids.each { |pk_id|
68
+ maxpk_id = pk_id if pk_id > maxpk_id
69
+ }
70
+ @last_pk_id_inserted = maxpk_id + 1
71
+ @last_pk_id_inserted
72
+ end
65
73
  end
66
- object_pk_id
67
74
  end
68
75
 
69
76
  def get_objects_by_domain_class( domain_class )
@@ -77,13 +84,21 @@ module Lafcadio
77
84
 
78
85
  def group_query( query )
79
86
  if query.class == Query::Max
80
- if ( query.field_name == 'pk_id' || query.field_name == 'rate' )
81
- query.collect( @objects[query.domain_class].values )
87
+ dobjs_by_pk_id = @objects[query.domain_class]
88
+ if dobjs_by_pk_id
89
+ dobjs = dobjs_by_pk_id.values.sort_by { |dobj|
90
+ dobj.send( query.field_name )
91
+ }
92
+ [ dobjs.last.send( query.field_name ) ]
82
93
  else
83
- raise "Can't handle query with sql '#{ query.to_sql }'"
94
+ [ nil ]
84
95
  end
85
96
  end
86
97
  end
98
+
99
+ def set_next_pk_id( domain_class, npi )
100
+ @next_pk_ids[ domain_class ] = npi
101
+ end
87
102
  end
88
103
 
89
104
  # Externally, the MockObjectStore looks and acts exactly like the ObjectStore,
@@ -47,7 +47,7 @@ module Lafcadio
47
47
  objects = objects.sort_by { |dobj| dobj.pk_id }
48
48
  end
49
49
  if (range = query.limit)
50
- objects = objects[range.first..(range.last - range.first)]
50
+ objects = objects[range]
51
51
  end
52
52
  objects
53
53
  end
@@ -77,10 +77,14 @@ module Lafcadio
77
77
 
78
78
  def group_query( query )
79
79
  if query.class == Query::Max
80
- if ( query.field_name == 'pk_id' || query.field_name == 'rate' )
81
- query.collect( @objects[query.domain_class].values )
80
+ dobjs_by_pk_id = @objects[query.domain_class]
81
+ if dobjs_by_pk_id
82
+ dobjs = dobjs_by_pk_id.values.sort_by { |dobj|
83
+ dobj.send( query.field_name )
84
+ }
85
+ [ dobjs.last.send( query.field_name ) ]
82
86
  else
83
- raise "Can't handle query with sql '#{ query.to_sql }'"
87
+ [ nil ]
84
88
  end
85
89
  end
86
90
  end
@@ -1,5 +1,5 @@
1
1
  require 'date'
2
- require 'lafcadio/dateTime'
2
+ require 'lafcadio/depend'
3
3
  require 'lafcadio/util'
4
4
 
5
5
  module Lafcadio
@@ -113,16 +113,8 @@ module Lafcadio
113
113
  end
114
114
  end
115
115
 
116
- # IntegerField represents an integer.
117
- class IntegerField < ObjectField
118
- def value_from_sql(string) #:nodoc:
119
- value = super
120
- value ? value.to_i : nil
121
- end
122
- end
123
-
124
- # A TextField is expected to contain a string value.
125
- class TextField < ObjectField
116
+ # A StringField is expected to contain a string value.
117
+ class StringField < ObjectField
126
118
  def value_for_sql(value) #:nodoc:
127
119
  if value
128
120
  value = value.gsub(/(\\?')/) { |m| m.length == 1 ? "''" : m }
@@ -134,6 +126,14 @@ module Lafcadio
134
126
  end
135
127
  end
136
128
 
129
+ # IntegerField represents an integer.
130
+ class IntegerField < ObjectField
131
+ def value_from_sql(string) #:nodoc:
132
+ value = super
133
+ value ? value.to_i : nil
134
+ end
135
+ end
136
+
137
137
  # BlobField stores a string value and expects to store its value in a BLOB
138
138
  # field in the database.
139
139
  class BlobField < ObjectField
@@ -269,30 +269,97 @@ module Lafcadio
269
269
  dbi_value ? dbi_value.to_time : nil
270
270
  end
271
271
  end
272
-
273
- # DecimalField represents a decimal value.
274
- class DecimalField < ObjectField
272
+
273
+ # A DomainObjectField is used to link from one domain class to another.
274
+ class DomainObjectField < ObjectField
275
+ def self.auto_name( linked_type )
276
+ linked_type.name =~ /::/
277
+ ( $' || linked_type.name ).camel_case_to_underscore
278
+ end
279
+
275
280
  def self.instantiate_with_parameters( domain_class, parameters ) #:nodoc:
276
- self.new( domain_class, parameters['name'] )
281
+ linked_type = parameters['linked_type']
282
+ instance = self.new(
283
+ domain_class, linked_type,
284
+ parameters['name'] || auto_name( linked_type ),
285
+ parameters['delete_cascade']
286
+ )
287
+ if parameters['db_field_name']
288
+ instance.db_field_name = parameters['db_field_name']
289
+ end
290
+ instance
277
291
  end
278
292
 
279
- def self.value_type #:nodoc:
280
- Numeric
293
+ def self.instantiation_parameters( fieldElt ) #:nodoc:
294
+ parameters = super( fieldElt )
295
+ linked_typeStr = fieldElt.attributes['linked_type']
296
+ linked_type = DomainObject.get_domain_class_from_string( linked_typeStr )
297
+ parameters['linked_type'] = linked_type
298
+ parameters['delete_cascade'] = fieldElt.attributes['delete_cascade'] == 'y'
299
+ parameters
281
300
  end
282
301
 
283
- def process_before_verify(value) #:nodoc:
284
- value = super value
285
- value != nil && value != '' ? value.to_f : nil
302
+ attr_reader :linked_type
303
+ attr_accessor :delete_cascade
304
+
305
+ # [domain_class] The domain class that this field belongs to.
306
+ # [linked_type] The domain class that this field points to.
307
+ # [name] The name of this field.
308
+ # [delete_cascade] If this is true, deleting the domain object that is
309
+ # linked to will cause this domain object to be deleted
310
+ # as well.
311
+ def initialize( domain_class, linked_type, name = nil,
312
+ delete_cascade = false )
313
+ name = self.class.auto_name( linked_type ) unless name
314
+ super( domain_class, name )
315
+ ( @linked_type, @delete_cascade ) = linked_type, delete_cascade
286
316
  end
287
317
 
288
- def value_from_sql(string, lookupLink = true) #:nodoc:
289
- string != nil ? string.to_f : nil
318
+ def value_from_sql(string) #:nodoc:
319
+ string != nil ? DomainObjectProxy.new(@linked_type, string.to_i) : nil
320
+ end
321
+
322
+ def value_for_sql(value) #:nodoc:
323
+ if !value
324
+ "null"
325
+ elsif value.pk_id
326
+ value.pk_id
327
+ else
328
+ raise( DomainObjectInitError, "Can't commit #{name} without pk_id",
329
+ caller )
330
+ end
331
+ end
332
+
333
+ def verify_non_nil(value, pk_id) #:nodoc:
334
+ super
335
+ if @linked_type != @domain_class && pk_id
336
+ subsetDomainObjectField = @linked_type.class_fields.find { |field|
337
+ field.class == SubsetDomainObjectField && field.subset_field == @name
338
+ }
339
+ if subsetDomainObjectField
340
+ verify_subset_link_field( subsetDomainObjectField, pk_id )
341
+ end
342
+ end
343
+ end
344
+
345
+ def verify_subset_link_field( subsetDomainObjectField, pk_id )
346
+ begin
347
+ prevObj = ObjectStore.get_object_store.get( domain_class, pk_id )
348
+ prevObjLinkedTo = prevObj.send(name)
349
+ possiblyMyObj = prevObjLinkedTo.send(subsetDomainObjectField.name)
350
+ if possiblyMyObj && possiblyMyObj.pk_id == pk_id
351
+ cantChangeMsg = "You can't change that."
352
+ raise FieldValueError, cantChangeMsg, caller
353
+ end
354
+ rescue DomainObjectNotFoundError
355
+ # no previous value, so nothing to check for
356
+ end
290
357
  end
291
358
  end
292
359
 
293
360
  # EmailField takes a text value that is expected to be formatted as a single
294
361
  # valid email address.
295
- class EmailField < TextField
362
+ class EmailField < StringField
296
363
  # Is +address+ a valid email address?
297
364
  def self.valid_address(address)
298
365
  address =~ /^[^ @]+@[^ \.]+\.[^ ,]+$/
@@ -327,7 +394,7 @@ module Lafcadio
327
394
  # If you're defining the field in Ruby, you can simply pass in an array of
328
395
  # enums as the +enums+ argument.
329
396
  #
330
- class EnumField < TextField
397
+ class EnumField < StringField
331
398
  def self.instantiate_with_parameters( domain_class, parameters ) #:nodoc:
332
399
  self.new( domain_class, parameters['name'], parameters['enums'] )
333
400
  end
@@ -388,90 +455,23 @@ module Lafcadio
388
455
  class FieldValueError < RuntimeError #:nodoc:
389
456
  end
390
457
 
391
- # A LinkField is used to link from one domain class to another.
392
- class LinkField < ObjectField
393
- def self.auto_name( linked_type )
394
- linked_type.name =~ /::/
395
- ( $' || linked_type.name ).camel_case_to_underscore
396
- end
397
-
458
+ # FloatField represents a decimal value.
459
+ class FloatField < ObjectField
398
460
  def self.instantiate_with_parameters( domain_class, parameters ) #:nodoc:
399
- linked_type = parameters['linked_type']
400
- instance = self.new(
401
- domain_class, linked_type,
402
- parameters['name'] || auto_name( linked_type ),
403
- parameters['delete_cascade']
404
- )
405
- if parameters['db_field_name']
406
- instance.db_field_name = parameters['db_field_name']
407
- end
408
- instance
409
- end
410
-
411
- def self.instantiation_parameters( fieldElt ) #:nodoc:
412
- parameters = super( fieldElt )
413
- linked_typeStr = fieldElt.attributes['linked_type']
414
- linked_type = DomainObject.get_domain_class_from_string( linked_typeStr )
415
- parameters['linked_type'] = linked_type
416
- parameters['delete_cascade'] = fieldElt.attributes['delete_cascade'] == 'y'
417
- parameters
418
- end
419
-
420
- attr_reader :linked_type
421
- attr_accessor :delete_cascade
422
-
423
- # [domain_class] The domain class that this field belongs to.
424
- # [linked_type] The domain class that this field points to.
425
- # [name] The name of this field.
426
- # [delete_cascade] If this is true, deleting the domain object that is
427
- # linked to will cause this domain object to be deleted
428
- # as well.
429
- def initialize( domain_class, linked_type, name = nil,
430
- delete_cascade = false )
431
- name = self.class.auto_name( linked_type ) unless name
432
- super( domain_class, name )
433
- ( @linked_type, @delete_cascade ) = linked_type, delete_cascade
434
- end
435
-
436
- def value_from_sql(string) #:nodoc:
437
- string != nil ? DomainObjectProxy.new(@linked_type, string.to_i) : nil
461
+ self.new( domain_class, parameters['name'] )
438
462
  end
439
463
 
440
- def value_for_sql(value) #:nodoc:
441
- if !value
442
- "null"
443
- elsif value.pk_id
444
- value.pk_id
445
- else
446
- raise( DomainObjectInitError, "Can't commit #{name} without pk_id",
447
- caller )
448
- end
464
+ def self.value_type #:nodoc:
465
+ Numeric
449
466
  end
450
467
 
451
- def verify_non_nil(value, pk_id) #:nodoc:
452
- super
453
- if @linked_type != @domain_class && pk_id
454
- subsetLinkField = @linked_type.class_fields.find { |field|
455
- field.class == SubsetLinkField && field.subset_field == @name
456
- }
457
- if subsetLinkField
458
- verify_subset_link_field( subsetLinkField, pk_id )
459
- end
460
- end
468
+ def process_before_verify(value) #:nodoc:
469
+ value = super value
470
+ value != nil && value != '' ? value.to_f : nil
461
471
  end
462
472
 
463
- def verify_subset_link_field( subsetLinkField, pk_id )
464
- begin
465
- prevObj = ObjectStore.get_object_store.get( domain_class, pk_id )
466
- prevObjLinkedTo = prevObj.send(name)
467
- possiblyMyObj = prevObjLinkedTo.send(subsetLinkField.name)
468
- if possiblyMyObj && possiblyMyObj.pk_id == pk_id
469
- cantChangeMsg = "You can't change that."
470
- raise FieldValueError, cantChangeMsg, caller
471
- end
472
- rescue DomainObjectNotFoundError
473
- # no previous value, so nothing to check for
474
- end
473
+ def value_from_sql(string, lookupLink = true) #:nodoc:
474
+ string != nil ? string.to_f : nil
475
475
  end
476
476
  end
477
477
 
@@ -499,11 +499,11 @@ module Lafcadio
499
499
  # postal code.
500
500
  class StateField < EnumField
501
501
  def initialize( domain_class, name = "state" )
502
- super( domain_class, name, UsStates.states )
502
+ super( domain_class, name, UsCommerce::UsStates.states )
503
503
  end
504
504
  end
505
505
 
506
- class SubsetLinkField < LinkField #:nodoc:
506
+ class SubsetDomainObjectField < DomainObjectField #:nodoc:
507
507
  def self.instantiate_with_parameters( domain_class, parameters )
508
508
  self.new( domain_class, parameters['linked_type'],
509
509
  parameters['subset_field'], parameters['name'] )
@@ -1,5 +1,5 @@
1
1
  require 'date'
2
- require 'lafcadio/dateTime'
2
+ require 'lafcadio/depend'
3
3
  require 'lafcadio/util'
4
4
 
5
5
  module Lafcadio
@@ -113,16 +113,8 @@ module Lafcadio
113
113
  end
114
114
  end
115
115
 
116
- # IntegerField represents an integer.
117
- class IntegerField < ObjectField
118
- def value_from_sql(string) #:nodoc:
119
- value = super
120
- value ? value.to_i : nil
121
- end
122
- end
123
-
124
- # A TextField is expected to contain a string value.
125
- class TextField < ObjectField
116
+ # A StringField is expected to contain a string value.
117
+ class StringField < ObjectField
126
118
  def value_for_sql(value) #:nodoc:
127
119
  if value
128
120
  value = value.gsub(/(\\?')/) { |m| m.length == 1 ? "''" : m }
@@ -134,6 +126,14 @@ module Lafcadio
134
126
  end
135
127
  end
136
128
 
129
+ # IntegerField represents an integer.
130
+ class IntegerField < ObjectField
131
+ def value_from_sql(string) #:nodoc:
132
+ value = super
133
+ value ? value.to_i : nil
134
+ end
135
+ end
136
+
137
137
  # BlobField stores a string value and expects to store its value in a BLOB
138
138
  # field in the database.
139
139
  class BlobField < ObjectField
@@ -269,30 +269,97 @@ module Lafcadio
269
269
  dbi_value ? dbi_value.to_time : nil
270
270
  end
271
271
  end
272
-
273
- # DecimalField represents a decimal value.
274
- class DecimalField < ObjectField
272
+
273
+ # A DomainObjectField is used to link from one domain class to another.
274
+ class DomainObjectField < ObjectField
275
+ def self.auto_name( linked_type )
276
+ linked_type.name =~ /::/
277
+ ( $' || linked_type.name ).camel_case_to_underscore
278
+ end
279
+
275
280
  def self.instantiate_with_parameters( domain_class, parameters ) #:nodoc:
276
- self.new( domain_class, parameters['name'] )
281
+ linked_type = parameters['linked_type']
282
+ instance = self.new(
283
+ domain_class, linked_type,
284
+ parameters['name'] || auto_name( linked_type ),
285
+ parameters['delete_cascade']
286
+ )
287
+ if parameters['db_field_name']
288
+ instance.db_field_name = parameters['db_field_name']
289
+ end
290
+ instance
277
291
  end
278
292
 
279
- def self.value_type #:nodoc:
280
- Numeric
293
+ def self.instantiation_parameters( fieldElt ) #:nodoc:
294
+ parameters = super( fieldElt )
295
+ linked_typeStr = fieldElt.attributes['linked_type']
296
+ linked_type = DomainObject.get_domain_class_from_string( linked_typeStr )
297
+ parameters['linked_type'] = linked_type
298
+ parameters['delete_cascade'] = fieldElt.attributes['delete_cascade'] == 'y'
299
+ parameters
281
300
  end
282
301
 
283
- def process_before_verify(value) #:nodoc:
284
- value = super value
285
- value != nil && value != '' ? value.to_f : nil
302
+ attr_reader :linked_type
303
+ attr_accessor :delete_cascade
304
+
305
+ # [domain_class] The domain class that this field belongs to.
306
+ # [linked_type] The domain class that this field points to.
307
+ # [name] The name of this field.
308
+ # [delete_cascade] If this is true, deleting the domain object that is
309
+ # linked to will cause this domain object to be deleted
310
+ # as well.
311
+ def initialize( domain_class, linked_type, name = nil,
312
+ delete_cascade = false )
313
+ name = self.class.auto_name( linked_type ) unless name
314
+ super( domain_class, name )
315
+ ( @linked_type, @delete_cascade ) = linked_type, delete_cascade
286
316
  end
287
317
 
288
- def value_from_sql(string, lookupLink = true) #:nodoc:
289
- string != nil ? string.to_f : nil
318
+ def value_from_sql(string) #:nodoc:
319
+ string != nil ? DomainObjectProxy.new(@linked_type, string.to_i) : nil
320
+ end
321
+
322
+ def value_for_sql(value) #:nodoc:
323
+ if !value
324
+ "null"
325
+ elsif value.pk_id
326
+ value.pk_id
327
+ else
328
+ raise( DomainObjectInitError, "Can't commit #{name} without pk_id",
329
+ caller )
330
+ end
331
+ end
332
+
333
+ def verify_non_nil(value, pk_id) #:nodoc:
334
+ super
335
+ if @linked_type != @domain_class && pk_id
336
+ subsetDomainObjectField = @linked_type.class_fields.find { |field|
337
+ field.class == SubsetDomainObjectField && field.subset_field == @name
338
+ }
339
+ if subsetDomainObjectField
340
+ verify_subset_link_field( subsetDomainObjectField, pk_id )
341
+ end
342
+ end
343
+ end
344
+
345
+ def verify_subset_link_field( subsetDomainObjectField, pk_id )
346
+ begin
347
+ prevObj = ObjectStore.get_object_store.get( domain_class, pk_id )
348
+ prevObjLinkedTo = prevObj.send(name)
349
+ possiblyMyObj = prevObjLinkedTo.send(subsetDomainObjectField.name)
350
+ if possiblyMyObj && possiblyMyObj.pk_id == pk_id
351
+ cantChangeMsg = "You can't change that."
352
+ raise FieldValueError, cantChangeMsg, caller
353
+ end
354
+ rescue DomainObjectNotFoundError
355
+ # no previous value, so nothing to check for
356
+ end
290
357
  end
291
358
  end
292
359
 
293
360
  # EmailField takes a text value that is expected to be formatted as a single
294
361
  # valid email address.
295
- class EmailField < TextField
362
+ class EmailField < StringField
296
363
  # Is +address+ a valid email address?
297
364
  def self.valid_address(address)
298
365
  address =~ /^[^ @]+@[^ \.]+\.[^ ,]+$/
@@ -327,7 +394,7 @@ module Lafcadio
327
394
  # If you're defining the field in Ruby, you can simply pass in an array of
328
395
  # enums as the +enums+ argument.
329
396
  #
330
- class EnumField < TextField
397
+ class EnumField < StringField
331
398
  def self.instantiate_with_parameters( domain_class, parameters ) #:nodoc:
332
399
  self.new( domain_class, parameters['name'], parameters['enums'] )
333
400
  end
@@ -388,87 +455,23 @@ module Lafcadio
388
455
  class FieldValueError < RuntimeError #:nodoc:
389
456
  end
390
457
 
391
- # A LinkField is used to link from one domain class to another.
392
- class LinkField < ObjectField
458
+ # FloatField represents a decimal value.
459
+ class FloatField < ObjectField
393
460
  def self.instantiate_with_parameters( domain_class, parameters ) #:nodoc:
394
- instance = self.new(
395
- domain_class, parameters['linked_type'], parameters['name'],
396
- parameters['delete_cascade']
397
- )
398
- if parameters['db_field_name']
399
- instance.db_field_name = parameters['db_field_name']
400
- end
401
- instance
402
- end
403
-
404
- def self.instantiation_parameters( fieldElt ) #:nodoc:
405
- parameters = super( fieldElt )
406
- linked_typeStr = fieldElt.attributes['linked_type']
407
- linked_type = DomainObject.get_domain_class_from_string( linked_typeStr )
408
- parameters['linked_type'] = linked_type
409
- parameters['delete_cascade'] = fieldElt.attributes['delete_cascade'] == 'y'
410
- parameters
411
- end
412
-
413
- attr_reader :linked_type
414
- attr_accessor :delete_cascade
415
-
416
- # [domain_class] The domain class that this field belongs to.
417
- # [linked_type] The domain class that this field points to.
418
- # [name] The name of this field.
419
- # [delete_cascade] If this is true, deleting the domain object that is
420
- # linked to will cause this domain object to be deleted
421
- # as well.
422
- def initialize( domain_class, linked_type, name = nil,
423
- delete_cascade = false )
424
- unless name
425
- linked_type.name =~ /::/
426
- name = $' || linked_type.name
427
- name = name.camel_case_to_underscore
428
- end
429
- super( domain_class, name )
430
- ( @linked_type, @delete_cascade ) = linked_type, delete_cascade
431
- end
432
-
433
- def value_from_sql(string) #:nodoc:
434
- string != nil ? DomainObjectProxy.new(@linked_type, string.to_i) : nil
461
+ self.new( domain_class, parameters['name'] )
435
462
  end
436
463
 
437
- def value_for_sql(value) #:nodoc:
438
- if !value
439
- "null"
440
- elsif value.pk_id
441
- value.pk_id
442
- else
443
- raise( DomainObjectInitError, "Can't commit #{name} without pk_id",
444
- caller )
445
- end
464
+ def self.value_type #:nodoc:
465
+ Numeric
446
466
  end
447
467
 
448
- def verify_non_nil(value, pk_id) #:nodoc:
449
- super
450
- if @linked_type != @domain_class && pk_id
451
- subsetLinkField = @linked_type.class_fields.find { |field|
452
- field.class == SubsetLinkField && field.subset_field == @name
453
- }
454
- if subsetLinkField
455
- verify_subset_link_field( subsetLinkField, pk_id )
456
- end
457
- end
468
+ def process_before_verify(value) #:nodoc:
469
+ value = super value
470
+ value != nil && value != '' ? value.to_f : nil
458
471
  end
459
472
 
460
- def verify_subset_link_field( subsetLinkField, pk_id )
461
- begin
462
- prevObj = ObjectStore.get_object_store.get( domain_class, pk_id )
463
- prevObjLinkedTo = prevObj.send(name)
464
- possiblyMyObj = prevObjLinkedTo.send(subsetLinkField.name)
465
- if possiblyMyObj && possiblyMyObj.pk_id == pk_id
466
- cantChangeMsg = "You can't change that."
467
- raise FieldValueError, cantChangeMsg, caller
468
- end
469
- rescue DomainObjectNotFoundError
470
- # no previous value, so nothing to check for
471
- end
473
+ def value_from_sql(string, lookupLink = true) #:nodoc:
474
+ string != nil ? string.to_f : nil
472
475
  end
473
476
  end
474
477
 
@@ -500,7 +503,7 @@ module Lafcadio
500
503
  end
501
504
  end
502
505
 
503
- class SubsetLinkField < LinkField #:nodoc:
506
+ class SubsetDomainObjectField < DomainObjectField #:nodoc:
504
507
  def self.instantiate_with_parameters( domain_class, parameters )
505
508
  self.new( domain_class, parameters['linked_type'],
506
509
  parameters['subset_field'], parameters['name'] )