public
Rubygem
Description: DataMapper - Core
Homepage: http://datamapper.org
Clone URL: git://github.com/sam/dm-core.git
Start of Query::Path fix for modular model names
guyvdb (author)
Thu Apr 24 07:34:08 -0700 2008
commit  e7fd1123bde80bfd44bf9e343a48d961f3d0a828
tree    8c6784e5b38841f7f7425bd7ad64f85ed0b202fa
parent  dea998719e48b4e633beb2e0d41d6e64d9e76eb2
...
47
48
49
50
51
52
53
54
55
 
 
 
 
 
 
56
57
58
 
59
60
61
62
63
64
65
 
 
 
 
 
 
66
67
68
69
70
 
 
 
71
72
73
 
 
74
75
76
77
78
 
 
79
80
81
...
47
48
49
 
 
 
 
 
50
51
52
53
54
55
56
57
58
 
59
60
61
62
 
 
63
 
64
65
66
67
68
69
70
71
 
 
 
72
73
74
75
 
 
76
77
78
79
 
 
 
80
81
82
83
84
0
@@ -47,35 +47,38 @@ module DataMapper
0
 
0
       attr_reader :relationships, :model, :property
0
 
0
- def initialize(repository, relationships, model_name, property_name = nil)
0
- raise ArgumentError, "+repository+ is not a Repository, but was #{repository.class}", caller unless Repository === repository
0
- raise ArgumentError, "+relationships+ is not an Array, but was #{relationships.class}", caller unless Array === relationships
0
- raise ArgumentError, "+model_name+ is not a Symbol, but was #{model_name.class}", caller unless Symbol === model_name
0
- raise ArgumentError, "+property_name+ is not a Symbol, but was #{property_name.class}", caller unless Symbol === property_name || property_name.nil?
0
 
0
+ def initialize(repository, relationships, model, property_name = nil)
0
+ raise ArgumentError, "+repository+ is not a Repository, but was #{repository.class}", caller unless Repository === repository
0
+ raise ArgumentError, "+relationships+ is not an Array, it is a #{relationships.class}", caller unless Array === relationships
0
+ raise ArgumentError, "+model+ is not a DM::Resource, it is a #{model}", caller unless model.ancestors.include?(DataMapper::Resource)
0
+ raise ArgumentError, "+property_name+ is not a Symbol, it is a #{property_name.class}", caller unless Symbol === property_name || property_name.nil?
0
+
0
         @repository = repository
0
         @relationships = relationships
0
- @model = Inflection.classify(model_name.to_s).to_class
0
+ @model = model
0
         @property = @model.properties(@repository.name)[property_name] if property_name
0
       end
0
 
0
- alias_method :_method_missing, :method_missing
0
-
0
       def method_missing(method, *args)
0
- if @model.relationships(@repository.name).has_key?(method)
0
+ if relationship = @model.relationships(@repository.name)[method]
0
+ clazz = if @model == relationship.child_model
0
+ relationship.parent_model
0
+ else
0
+ relationship.child_model
0
+ end
0
           relations = []
0
           relations.concat(@relationships)
0
- relations << @model.relationships(@repository.name)[method]
0
- return DataMapper::Query::Path.new(@repository, relations,method)
0
- end
0
+ relations << relationship #@model.relationships[method]
0
+ return Query::Path.new(@repository, relations,clazz)
0
+ end
0
 
0
- if @model.properties(@repository.name)[method]
0
- @property = @model.properties(@repository.name)[method]
0
+ if @model.properties(@model.repository.name)[method]
0
+ @property = @model.properties(@model.repository.name)[method]
0
           return self
0
         end
0
-
0
- _method_missing(method,args)
0
- end
0
+ super
0
+ end
0
 
0
       # duck type the DM::Query::Path to act like a DM::Property
0
       def field
...
327
328
329
330
331
 
 
 
 
 
 
 
332
 
333
334
335
336
337
 
338
339
340
...
327
328
329
 
 
330
331
332
333
334
335
336
337
338
339
340
341
342
 
343
344
345
346
0
@@ -327,14 +327,20 @@ module DataMapper
0
       end
0
 
0
       def method_missing(method, *args, &block)
0
- if relationship = relationships(repository.name)[method]
0
- return DataMapper::Query::Path.new(repository, [ relationship ],method)
0
+ if relationship = relationships(repository.name)[method]
0
+ clazz = if self == relationship.child_model
0
+ relationship.parent_model
0
+ else
0
+ relationship.child_model
0
+ end
0
+ return DataMapper::Query::Path.new(repository, [relationship],clazz)
0
         end
0
+
0
         if property = properties(repository.name)[method]
0
           return property
0
         end
0
         super
0
- end
0
+ end
0
 
0
     end # module ClassMethods
0
   end # module Resource

Comments

    No one has commented yet.