dm-xml-adapter 0.574 → 0.575
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|