dm-xml-adapter 0.571 → 0.572
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 +30 -60
- metadata +2 -2
data/lib/dm-xml-adapter.rb
CHANGED
@@ -9,25 +9,21 @@ require 'tempfile'
|
|
9
9
|
require 'simple_memoize'
|
10
10
|
require 'log4r'
|
11
11
|
|
12
|
-
|
12
|
+
#
|
13
13
|
module DataMapper::Adapters
|
14
14
|
|
15
15
|
class XmlAdapterCache
|
16
16
|
|
17
17
|
def initialize
|
18
|
-
#@@logger = Log4r::Logger.new 'cache'
|
19
|
-
#@@logger.outputters = Log4r::Outputter.stdout
|
20
18
|
@mtimes = Hash.new()
|
21
19
|
@classes = Hash.new()
|
22
20
|
end
|
23
21
|
|
24
22
|
def set_mtime(file, mtime)
|
25
|
-
|
26
|
-
@mtimes[file] = mtime
|
23
|
+
@mtimes[file] = mtime
|
27
24
|
end
|
28
25
|
|
29
26
|
def delete_mtime(file)
|
30
|
-
#@@logger.info("deleting the following mtime: #{file}")
|
31
27
|
@mtimes.delete(file)
|
32
28
|
end
|
33
29
|
|
@@ -36,8 +32,7 @@ module DataMapper::Adapters
|
|
36
32
|
end
|
37
33
|
|
38
34
|
def put(classname, id, object)
|
39
|
-
|
40
|
-
|
35
|
+
|
41
36
|
# check to see if we have a classname entry
|
42
37
|
if (@classes[classname] == nil)
|
43
38
|
@classes[classname] = Hash.new
|
@@ -45,26 +40,18 @@ module DataMapper::Adapters
|
|
45
40
|
|
46
41
|
hash = @classes[classname]
|
47
42
|
hash[id.to_s] = object
|
48
|
-
|
49
|
-
end
|
43
|
+
end
|
50
44
|
|
51
45
|
def delete(classname, id)
|
52
|
-
#@@logger.info("deleted the following from cache: #{classname} #{id.to_s}")
|
53
46
|
hash = @classes[classname]
|
54
|
-
#@@logger.info("the hash is: #{hash.inspect}")
|
55
47
|
unless hash == nil
|
56
48
|
hash.delete(id.to_s)
|
57
49
|
end
|
58
|
-
|
59
|
-
end
|
50
|
+
end
|
60
51
|
|
61
52
|
def get(classname, id)
|
62
|
-
#@@logger.info("CACHE FETCH: #{classname} #{id}")
|
63
|
-
#@@logger.info("Master classes: #{@classes.inspect}")
|
64
53
|
hash = @classes[classname]
|
65
|
-
#@@logger.info("the hash is: #{hash.inspect}")
|
66
54
|
object = hash[id]
|
67
|
-
#@@logger.info("The object is: #{object}")
|
68
55
|
return object
|
69
56
|
end
|
70
57
|
end
|
@@ -81,10 +68,7 @@ module DataMapper::Adapters
|
|
81
68
|
@last_used_id = Hash.new
|
82
69
|
|
83
70
|
@cache = XmlAdapterCache.new
|
84
|
-
|
85
|
-
#@@logger = Log4r::Logger.new 'adapter'
|
86
|
-
#@@logger.outputters = Log4r::Outputter.stdout
|
87
|
-
|
71
|
+
|
88
72
|
end
|
89
73
|
|
90
74
|
def destroy_model_storage(repository, model)
|
@@ -110,12 +94,14 @@ module DataMapper::Adapters
|
|
110
94
|
|
111
95
|
def delete(collection)
|
112
96
|
collection.each do |result|
|
113
|
-
|
97
|
+
key = result.key.first
|
98
|
+
class_name = result.model.to_s
|
99
|
+
@last_used_id[class_name] = key
|
114
100
|
xml_destroy(result)
|
115
101
|
# also remove from cache
|
116
|
-
@cache.delete(
|
102
|
+
@cache.delete(class_name, key)
|
117
103
|
# also remove from mtimes
|
118
|
-
@cache.delete_mtime(class_name_to_file(
|
104
|
+
@cache.delete_mtime(class_name_to_file(class_name, key))
|
119
105
|
end
|
120
106
|
return collection.size
|
121
107
|
end
|
@@ -146,46 +132,34 @@ module DataMapper::Adapters
|
|
146
132
|
# take an objects class and ID and figure
|
147
133
|
# out what file it's in
|
148
134
|
# and then remove that file
|
149
|
-
|
150
|
-
id = resource.key.first
|
151
|
-
file = class_name_to_file(class_name, id)
|
152
|
-
File.unlink(file)
|
135
|
+
File.unlink class_name_to_file(resource.class.to_s, resource.key.first)
|
153
136
|
end
|
154
137
|
|
155
138
|
def filter_result_set(objects, query)
|
156
|
-
#puts "before filter: #{objects.inspect}"
|
157
139
|
result_set = objects.clone
|
158
|
-
result_set = query.filter_records(result_set)
|
159
|
-
#puts "After filter: #{result_set.inspect}"
|
160
140
|
return query.filter_records(result_set)
|
161
141
|
end
|
162
142
|
|
163
143
|
def get_all(model)
|
164
|
-
|
165
|
-
directory = classname_to_dir(
|
144
|
+
model_name = model.to_s
|
145
|
+
directory = classname_to_dir(model_name)
|
166
146
|
if ! File.exists?(directory)
|
167
|
-
#@@logger.error("The directory doesn't exist!")
|
168
147
|
return []
|
169
148
|
end
|
170
149
|
objects = []
|
171
|
-
Dir.entries(directory).select {|
|
150
|
+
Dir.entries(directory).select {|file| file.match(/\.xml$/) }.each do |filename|
|
172
151
|
filename = directory + "/" + filename
|
173
152
|
# see if we have a nice cached version
|
174
153
|
mtime = File.mtime(filename)
|
175
154
|
cache_mtime = @cache.get_mtime(filename)
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
end
|
180
|
-
if (mtime != nil and cache_mtime != nil and mtime == cache_mtime)
|
181
|
-
# we hav ea nice cached object..
|
182
|
-
objects << @cache.get(model.to_s, file_to_id(filename))
|
155
|
+
if (mtime != nil and cache_mtime != nil and mtime == cache_mtime)
|
156
|
+
# we have a nice cached object..
|
157
|
+
objects << @cache.get(model_name, file_to_id(filename))
|
183
158
|
else
|
184
|
-
|
185
|
-
# the file's newer, so we gotta load it up
|
159
|
+
# the file's newer OR older (aha!!), so we gotta load it up
|
186
160
|
object = file_to_object(filename, model)
|
187
161
|
objects << object
|
188
|
-
@cache.put(
|
162
|
+
@cache.put(model_name, object.key.first, object)
|
189
163
|
@cache.set_mtime(filename, File.mtime(filename))
|
190
164
|
end
|
191
165
|
end
|
@@ -204,13 +178,13 @@ module DataMapper::Adapters
|
|
204
178
|
end
|
205
179
|
|
206
180
|
def file_to_object(file, model)
|
207
|
-
|
181
|
+
model_name = model.to_s
|
208
182
|
# allocate new object to receive these fields
|
209
|
-
if (
|
210
|
-
modname, clazz =
|
183
|
+
if (model_name.match(/\:\:/))
|
184
|
+
modname, clazz = model_name.split("::")
|
211
185
|
new_obj = Kernel.const_get(modname).const_get(clazz).new
|
212
186
|
else
|
213
|
-
clazz =
|
187
|
+
clazz = model_name
|
214
188
|
new_obj = Kernel.const_get(clazz).new
|
215
189
|
end
|
216
190
|
|
@@ -268,27 +242,23 @@ module DataMapper::Adapters
|
|
268
242
|
def save(resource)
|
269
243
|
|
270
244
|
# since we're saving, purge the cache
|
271
|
-
|
272
|
-
|
245
|
+
resource_class = resource.class.to_s
|
246
|
+
resource_key = resource.key.first
|
247
|
+
@cache.delete(resource_class, resource_key)
|
248
|
+
@cache.delete_mtime(class_name_to_file(resource_class, resource_key))
|
273
249
|
|
274
|
-
# file = File.join(class_name_to_file(resource.class.to_s, resource.key.first))
|
275
250
|
# see if the directory exists, if it doesn't, we need to create it
|
276
|
-
if ! File.exists?(classname_to_dir(
|
277
|
-
FileUtils.mkdir_p(classname_to_dir(
|
251
|
+
if ! File.exists?(classname_to_dir(resource_class))
|
252
|
+
FileUtils.mkdir_p(classname_to_dir(resource_class))
|
278
253
|
end
|
279
254
|
|
280
|
-
# puts resource.model.properties.inspect
|
281
|
-
|
282
255
|
# set up builder
|
283
256
|
out_string = ""
|
284
257
|
xml = Builder::XmlMarkup.new(:target => out_string, :indent => 1)
|
285
258
|
|
286
259
|
# iterate over the resource and figure out the fields
|
287
|
-
# class_name = resource.model.to_s.gsub(/\:/, "_")
|
288
260
|
xml.tag!("RubyObject", :class => resource.model.to_s) do
|
289
261
|
resource.model.properties.each do |property|
|
290
|
-
#puts "saving prop: #{property.name}"
|
291
|
-
#puts "primitive: #{property.primitive}"
|
292
262
|
value = resource.instance_variable_get("@" + property.name.to_s)
|
293
263
|
# special case for false
|
294
264
|
if property.primitive == TrueClass and value == false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-xml-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.572"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Harding
|
@@ -9,7 +9,7 @@ autorequire: dm-xml-adapter
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-10 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|