dm-xml-adapter 0.574 → 0.575
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/lib/dm-xml-adapter.rb +16 -18
- metadata +21 -35
data/lib/dm-xml-adapter.rb
CHANGED
@@ -9,7 +9,8 @@ require 'tempfile'
|
|
9
9
|
require 'simple_memoize'
|
10
10
|
require 'log4r'
|
11
11
|
|
12
|
-
#
|
12
|
+
# the XML adapter is an adapter for DataMapper that allows you to store
|
13
|
+
# data in XML files. beware, it's not transactionally safe.
|
13
14
|
module DataMapper::Adapters
|
14
15
|
|
15
16
|
class XmlAdapterCache
|
@@ -31,8 +32,7 @@ module DataMapper::Adapters
|
|
31
32
|
return @mtimes[file]
|
32
33
|
end
|
33
34
|
|
34
|
-
def put(classname, id, object)
|
35
|
-
|
35
|
+
def put(classname, id, object)
|
36
36
|
# check to see if we have a classname entry
|
37
37
|
if (@classes[classname] == nil)
|
38
38
|
@classes[classname] = Hash.new
|
@@ -51,8 +51,7 @@ module DataMapper::Adapters
|
|
51
51
|
|
52
52
|
def get(classname, id)
|
53
53
|
hash = @classes[classname]
|
54
|
-
|
55
|
-
return object
|
54
|
+
return hash[id]
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
@@ -80,10 +79,9 @@ module DataMapper::Adapters
|
|
80
79
|
end
|
81
80
|
|
82
81
|
def create(resources)
|
83
|
-
class_name = resources.first.class.to_s
|
84
82
|
key = resources.first.model.key.first.name
|
85
83
|
resources.each do |resource|
|
86
|
-
id = find_free_id_for(
|
84
|
+
id = find_free_id_for(resources.first.class.to_s)
|
87
85
|
# find name of key attribute
|
88
86
|
resource.attributes[key] = id
|
89
87
|
resource.instance_variable_set("@" + key.to_s, id)
|
@@ -145,9 +143,9 @@ module DataMapper::Adapters
|
|
145
143
|
if ! File.exists?(directory)
|
146
144
|
return []
|
147
145
|
end
|
146
|
+
|
148
147
|
objects = []
|
149
|
-
Dir
|
150
|
-
filename = directory + "/" + filename
|
148
|
+
Dir[directory + "/*.xml"].each do |filename|
|
151
149
|
# see if we have a nice cached version
|
152
150
|
mtime = File.mtime(filename)
|
153
151
|
cache_mtime = @cache.get_mtime(filename)
|
@@ -179,12 +177,11 @@ module DataMapper::Adapters
|
|
179
177
|
def file_to_object(file, model)
|
180
178
|
model_name = model.to_s
|
181
179
|
# allocate new object to receive these fields
|
182
|
-
if (model_name.match(
|
183
|
-
modname, clazz =
|
180
|
+
if (model_name.match(/(.*)\:\:(.*)/))
|
181
|
+
modname, clazz = [$1, $2]
|
184
182
|
new_obj = Kernel.const_get(modname).const_get(clazz).new
|
185
183
|
else
|
186
|
-
|
187
|
-
new_obj = Kernel.const_get(clazz).new
|
184
|
+
new_obj = Kernel.const_get(model_name).new
|
188
185
|
end
|
189
186
|
|
190
187
|
# iterate over children
|
@@ -253,19 +250,20 @@ module DataMapper::Adapters
|
|
253
250
|
# iterate over the resource and figure out the fields
|
254
251
|
xml.tag!("RubyObject", :class => resource.model.to_s) do
|
255
252
|
resource.model.properties.each do |property|
|
256
|
-
|
253
|
+
property_name = property.name.to_s
|
254
|
+
value = resource.instance_variable_get("@" + property_name)
|
257
255
|
# special case for false
|
258
256
|
if property.primitive == TrueClass and value == false
|
259
|
-
xml.tag!(
|
257
|
+
xml.tag!(property_name, false, :class => FalseClass.to_s)
|
260
258
|
elsif (property.primitive == BigDecimal and value != nil)
|
261
|
-
xml.tag!(
|
259
|
+
xml.tag!(property_name, value.to_s("F"), :class => BigDecimal)
|
262
260
|
elsif (value != nil)
|
263
|
-
xml.tag!(
|
261
|
+
xml.tag!(property_name, value, :class => property.primitive)
|
264
262
|
end
|
265
263
|
end
|
266
264
|
end
|
267
265
|
|
268
|
-
xmlfile = File.new(class_name_to_file(
|
266
|
+
xmlfile = File.new(class_name_to_file(resource_class, resource_key), "w")
|
269
267
|
tempfile = Tempfile.new("dm-xml-adapter", Dir.tmpdir())
|
270
268
|
tempfile.puts out_string
|
271
269
|
tempfile.close
|
metadata
CHANGED
@@ -1,11 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-xml-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 0
|
7
|
-
- 574
|
8
|
-
version: "0.574"
|
4
|
+
version: "0.575"
|
9
5
|
platform: ruby
|
10
6
|
authors:
|
11
7
|
- Joshua Harding
|
@@ -13,57 +9,49 @@ autorequire: dm-xml-adapter
|
|
13
9
|
bindir: bin
|
14
10
|
cert_chain: []
|
15
11
|
|
16
|
-
date: 2010-03-
|
12
|
+
date: 2010-03-16 00:00:00 -04:00
|
17
13
|
default_executable:
|
18
14
|
dependencies:
|
19
15
|
- !ruby/object:Gem::Dependency
|
20
16
|
name: libxml-ruby
|
21
|
-
|
22
|
-
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
20
|
requirements:
|
24
21
|
- - ">="
|
25
22
|
- !ruby/object:Gem::Version
|
26
|
-
segments:
|
27
|
-
- 0
|
28
23
|
version: "0"
|
29
|
-
|
30
|
-
version_requirements: *id001
|
24
|
+
version:
|
31
25
|
- !ruby/object:Gem::Dependency
|
32
26
|
name: builder
|
33
|
-
|
34
|
-
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
35
30
|
requirements:
|
36
31
|
- - ">="
|
37
32
|
- !ruby/object:Gem::Version
|
38
|
-
segments:
|
39
|
-
- 0
|
40
33
|
version: "0"
|
41
|
-
|
42
|
-
version_requirements: *id002
|
34
|
+
version:
|
43
35
|
- !ruby/object:Gem::Dependency
|
44
36
|
name: simple_memoize
|
45
|
-
|
46
|
-
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
47
40
|
requirements:
|
48
41
|
- - ">="
|
49
42
|
- !ruby/object:Gem::Version
|
50
|
-
segments:
|
51
|
-
- 0
|
52
43
|
version: "0"
|
53
|
-
|
54
|
-
version_requirements: *id003
|
44
|
+
version:
|
55
45
|
- !ruby/object:Gem::Dependency
|
56
46
|
name: log4r
|
57
|
-
|
58
|
-
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
50
|
requirements:
|
60
51
|
- - ">="
|
61
52
|
- !ruby/object:Gem::Version
|
62
|
-
segments:
|
63
|
-
- 0
|
64
53
|
version: "0"
|
65
|
-
|
66
|
-
version_requirements: *id004
|
54
|
+
version:
|
67
55
|
description:
|
68
56
|
email: josh@statewidesoftware.com
|
69
57
|
executables: []
|
@@ -91,20 +79,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
79
|
requirements:
|
92
80
|
- - ">="
|
93
81
|
- !ruby/object:Gem::Version
|
94
|
-
segments:
|
95
|
-
- 0
|
96
82
|
version: "0"
|
83
|
+
version:
|
97
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
85
|
requirements:
|
99
86
|
- - ">="
|
100
87
|
- !ruby/object:Gem::Version
|
101
|
-
segments:
|
102
|
-
- 0
|
103
88
|
version: "0"
|
89
|
+
version:
|
104
90
|
requirements: []
|
105
91
|
|
106
92
|
rubyforge_project:
|
107
|
-
rubygems_version: 1.3.
|
93
|
+
rubygems_version: 1.3.5
|
108
94
|
signing_key:
|
109
95
|
specification_version: 3
|
110
96
|
summary: a XML adapter for DataMapper. this adapter allows you to use DataMapper with XML files as a backing store.
|