dm-xml-adapter 0.571 → 0.572

Sign up to get free protection for your applications and to get access to all the features.
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