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.
Files changed (2) hide show
  1. data/lib/dm-xml-adapter.rb +30 -60
  2. metadata +2 -2
@@ -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
- #@@logger.info("Saved mtime, #{file} -> #{mtime}")
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
- #@@logger.info("CACHE INSERT: #{classname} #{id} #{object.inspect}")
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
- # @@logger.info("the hash is: #{hash.inspect}")
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
- #@@logger.info("the hash is: #{hash.inspect}")
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
- @last_used_id[result.class.to_s] = result.key.first
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(result.model.to_s, result.key.first)
102
+ @cache.delete(class_name, key)
117
103
  # also remove from mtimes
118
- @cache.delete_mtime(class_name_to_file(result.model.to_s, result.key.first))
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
- class_name = resource.class.to_s
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
- #@@logger.info("Trying to get all: #{model.to_s}")
165
- directory = classname_to_dir(model.to_s)
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 {|f| f.match(/\.xml$/) }.each do |filename|
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
- #puts "file mtime: #{mtime} cache mtime: #{@cache.get_mtime(filename)}"
177
- if (mtime != nil and cache_mtime != nil)
178
- #puts "comparing! #{mtime < cache_mtime}"
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
- #@@logger.info("CACHE MISS")
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(model.to_s, object.key.first, object)
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 (model.to_s.match(/\:\:/))
210
- modname, clazz = model.to_s.split("::")
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 = model.to_s
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
- @cache.delete(resource.class.to_s, resource.key.first)
272
- @cache.delete_mtime(class_name_to_file(resource.class.to_s, resource.key.first))
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(resource.class.to_s))
277
- FileUtils.mkdir_p(classname_to_dir(resource.class.to_s))
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.571"
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-09 00:00:00 -05:00
12
+ date: 2010-02-10 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency