dm-keeper-adapter 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -57,12 +57,12 @@ module DataMapper::Adapters
57
57
  # @api private
58
58
  def perform_query(query, operand)
59
59
  records = []
60
+ # STDERR.puts "perform_query(query#{query}, operand #{operand})"
60
61
 
61
- case operand
62
- when DataMapper::Query::Conditions::NotOperation
62
+ if operand.is_a? DataMapper::Query::Conditions::NotOperation
63
63
  subject = operand.first.subject
64
64
  value = operand.first.value
65
- when DataMapper::Associations::ManyToOne::Relationship
65
+ elsif operand.subject.is_a? DataMapper::Associations::ManyToOne::Relationship
66
66
  subject = operand.subject.child_key.first
67
67
  value = operand.value[operand.subject.parent_key.first.name]
68
68
  else
@@ -141,6 +141,10 @@ module DataMapper::Adapters
141
141
  model.properties.each do |property|
142
142
  xpath = xpathmap[property.name] || property.name
143
143
  key = property.name.to_s
144
+ if key == "raw"
145
+ record[key] = node.to_s
146
+ next
147
+ end
144
148
  children = node.xpath("./#{xpath}", xmlnamespaces)
145
149
  # $stderr.puts "Property found: #{property.inspect}"
146
150
  case children.size
@@ -162,16 +166,6 @@ module DataMapper::Adapters
162
166
  raise TypeError, "#{property} unsupported"
163
167
  end
164
168
  end
165
- model.relationships.each do |rel|
166
- # $stderr.puts "Rel ? #{rel.inspect}"
167
- children = node.xpath("./#{rel.child_model_name.downcase}")
168
- value = []
169
- while n = children.shift
170
- value << node_to_record(rel.child_model, n)
171
- end
172
- record[rel.name.to_s] = value
173
- # $stderr.puts "#{rel.name} -> #{value.inspect}"
174
- end
175
169
  record
176
170
  end
177
171
  end # class
@@ -3,6 +3,6 @@ require 'dm-core/adapters/abstract_adapter'
3
3
 
4
4
  module DataMapper::Adapters
5
5
  class KeeperAdapter < AbstractAdapter
6
- VERSION = "0.0.2"
6
+ VERSION = "0.0.3"
7
7
  end
8
8
  end
@@ -7,7 +7,12 @@ class Relation
7
7
  end
8
8
  property :target, Integer, :key => true
9
9
  property :sort_position, Integer
10
- has 1, :parent, self
11
- belongs_to :relation, :required => false
12
- belongs_to :relationtree, :required => false
10
+ # workaround for non-working associations
11
+ property :parent, Integer
12
+
13
+ # this is how it should be - how to implement it in the adapter ??
14
+ # has 1, :parent, self
15
+ # belongs_to :relation, :required => false
16
+ # has n, :children, self
17
+ # belongs_to :relationtree, :required => false
13
18
  end
@@ -15,6 +15,32 @@ class Relationtree
15
15
  property :id, Integer, :key => true
16
16
  property :title, String
17
17
  property :description, String
18
- # has n, :relations
19
- property :relations, Csv
18
+ property :raw, String
19
+ # fixme: has n, :relations
20
+
21
+ #
22
+ # Workaround for missing association (see relation.rb)
23
+ # Save relationtree xml in 'raw' and parse it when 'Relationtree#relations' is accessed
24
+ # (should be a DataMapper::Associations::OneToMany::Collection :-/ )
25
+ #
26
+
27
+ def node2relation node, parent = nil
28
+ rel = Relation.new( :target => node["target"] , :sort_position => node["sortPosition"], :parent => (parent) ? parent.target : nil)
29
+ node.element_children.each do |child|
30
+ relchild = node2relation(child, rel)
31
+ end
32
+ rel
33
+ end
34
+
35
+ # convert 'raw' into Relations
36
+ def relations
37
+ retval = []
38
+ require 'nokogiri'
39
+ xml = Nokogiri::XML.parse @raw
40
+ parent = nil
41
+ xml.root.xpath("/relationtree/relation").each do |rel|
42
+ retval << node2relation(rel)
43
+ end
44
+ retval
45
+ end
20
46
  end
@@ -12,7 +12,7 @@ class Get_relationtree_test < Test::Unit::TestCase
12
12
  DataMapper.finalize
13
13
  end
14
14
 
15
- def test_get_relationtree_by_id
15
+ def xtest_get_relationtree_by_id
16
16
  # Access relationtree by id
17
17
  tree = Relationtree.get(1137)
18
18
  assert tree
@@ -22,6 +22,18 @@ class Get_relationtree_test < Test::Unit::TestCase
22
22
  # Access relationtree by name
23
23
  tree = Relationtree.first(:title => "Manager 1.2.1")
24
24
  assert tree
25
+ assert tree.title
26
+ assert tree.description
25
27
  assert_equal 1137, tree.id
28
+ # lazy-load relations
29
+ assert tree.relations
30
+ assert tree.relations.size > 0
31
+ tree.relations.each do |rel|
32
+ # puts rel.inspect
33
+ # puts "Parent #{rel.parent}"
34
+ # puts "Children #{rel.children.size}"
35
+ assert rel.target
36
+ assert rel.sort_position
37
+ end
26
38
  end
27
39
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-keeper-adapter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Klaus K\xC3\xA4mpf"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-27 00:00:00 +02:00
18
+ date: 2011-09-28 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency