dm-xml-adapter 0.584 → 0.587
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dm-xml-adapter.rb +22 -24
- data/spec/dm-xml-adapter_spec.rb +14 -2
- metadata +8 -38
data/lib/dm-xml-adapter.rb
CHANGED
@@ -7,8 +7,7 @@ require 'pp'
|
|
7
7
|
gem 'libxml-ruby', '>= 0.8.3'
|
8
8
|
require 'xml'
|
9
9
|
require 'tempfile'
|
10
|
-
require '
|
11
|
-
require 'log4r'
|
10
|
+
require 'logger'
|
12
11
|
|
13
12
|
# http://redcorundum.blogspot.com/2006/05/kernelqualifiedconstget.html
|
14
13
|
module Kernel
|
@@ -56,7 +55,6 @@ module DataMapper::Adapters
|
|
56
55
|
|
57
56
|
def put(classname, id, object)
|
58
57
|
# check to see if we have a classname entry
|
59
|
-
#puts "putting a cache entry of id: #{id}"
|
60
58
|
if (@classes[classname] == nil)
|
61
59
|
@classes[classname] = Hash.new
|
62
60
|
end
|
@@ -73,25 +71,33 @@ module DataMapper::Adapters
|
|
73
71
|
end
|
74
72
|
|
75
73
|
def get(classname, id)
|
76
|
-
#puts "getting a cache entry for id: #{id}"
|
77
74
|
hash = @classes[classname]
|
78
75
|
return hash[id]
|
79
76
|
end
|
80
77
|
end
|
81
78
|
|
82
79
|
class XmlAdapter < AbstractAdapter
|
83
|
-
|
84
|
-
|
80
|
+
|
81
|
+
def loglevel=(loglevel)
|
82
|
+
@options[:loglevel] = loglevel
|
83
|
+
@logger.level = loglevel
|
84
|
+
end
|
85
|
+
|
86
|
+
def logger=(logger)
|
87
|
+
@options[:logger] = logger
|
88
|
+
@logger = logger
|
85
89
|
end
|
86
90
|
|
87
91
|
def initialize(name, options)
|
88
92
|
super
|
89
93
|
|
90
|
-
|
91
|
-
@options = Hash.new
|
92
|
-
@options[:directory] = options[:directory]
|
94
|
+
@options = options
|
93
95
|
@options[:directory] ||= './db'
|
94
|
-
|
96
|
+
@options[:loglevel] ||= Logger::FATAL
|
97
|
+
@options[:logger] ||= Logger.new(STDERR)
|
98
|
+
@logger = @options[:logger]
|
99
|
+
@logger.level = @options[:loglevel]
|
100
|
+
@logger.debug("DM-XML-Adapter Initialized!")
|
95
101
|
@last_used_id = Hash.new
|
96
102
|
|
97
103
|
@cache = XmlAdapterCache.new
|
@@ -100,10 +106,12 @@ module DataMapper::Adapters
|
|
100
106
|
|
101
107
|
def destroy_model_storage(model)
|
102
108
|
FileUtils.rm_rf(classname_to_dir(model.to_s))
|
109
|
+
@logger.debug("Removing model storage for #{model}")
|
103
110
|
end
|
104
111
|
|
105
112
|
def create_model_storage(model)
|
106
113
|
FileUtils.mkdir_p(classname_to_dir(model.to_s))
|
114
|
+
@logger.debug("Creating model storage for: #{model}")
|
107
115
|
end
|
108
116
|
|
109
117
|
def create(resources)
|
@@ -111,7 +119,6 @@ module DataMapper::Adapters
|
|
111
119
|
resources.each do |resource|
|
112
120
|
id = find_free_id_for(resources.first.class.to_s)
|
113
121
|
# find name of key attribute
|
114
|
-
#puts "we are creating a new resource with id: #{id}"
|
115
122
|
resource.attributes[key] = id
|
116
123
|
resource.instance_variable_set("@" + key.to_s, id)
|
117
124
|
save(resource)
|
@@ -124,6 +131,7 @@ module DataMapper::Adapters
|
|
124
131
|
class_name = result.model.to_s
|
125
132
|
@last_used_id[class_name] = key
|
126
133
|
xml_destroy(result)
|
134
|
+
@logger.debug("Destroying #{result}")
|
127
135
|
# also remove from cache
|
128
136
|
@cache.delete(class_name, key)
|
129
137
|
# also remove from mtimes
|
@@ -142,6 +150,7 @@ module DataMapper::Adapters
|
|
142
150
|
# first member is Property object
|
143
151
|
# second member is the value
|
144
152
|
obj.instance_variable_set("@" + attrib[0].name.to_s, attrib[1])
|
153
|
+
@logger.debug("Updating instance variable #{attrib[0].name.to_s} to #{attrib[1]}")
|
145
154
|
end
|
146
155
|
save(obj)
|
147
156
|
end
|
@@ -168,6 +177,7 @@ module DataMapper::Adapters
|
|
168
177
|
|
169
178
|
def get_all(model)
|
170
179
|
model_name = model.to_s
|
180
|
+
@logger.debug("Getting all for model #{model_name}")
|
171
181
|
directory = classname_to_dir(model_name)
|
172
182
|
if ! File.exists?(directory)
|
173
183
|
return []
|
@@ -250,9 +260,7 @@ module DataMapper::Adapters
|
|
250
260
|
# if there are no entries in the directory
|
251
261
|
# or the directory doesn't exist
|
252
262
|
# we need to create it...
|
253
|
-
#puts "trying to find a free id for #{class_name}"
|
254
263
|
if ! File.exists?(classname_to_dir(class_name))
|
255
|
-
#puts "the directory doesn't exist"
|
256
264
|
# default ID
|
257
265
|
return 1
|
258
266
|
end
|
@@ -263,13 +271,10 @@ module DataMapper::Adapters
|
|
263
271
|
id = @last_used_id[class_name] || 1
|
264
272
|
while true do
|
265
273
|
filename = File.join(directory.path, id.to_s + ".xml")
|
266
|
-
#puts "checking for the existence of #{filename}"
|
267
274
|
if ! File.exists?(filename)
|
268
275
|
@last_used_id[class_name] = id
|
269
|
-
#puts "found free id: #{id}"
|
270
276
|
return id
|
271
277
|
end
|
272
|
-
#puts "the file existed..."
|
273
278
|
id += 1
|
274
279
|
end
|
275
280
|
end
|
@@ -278,7 +283,6 @@ module DataMapper::Adapters
|
|
278
283
|
# since we're saving, purge the cache
|
279
284
|
resource_class = resource.class.to_s
|
280
285
|
resource_key = resource.key.first
|
281
|
-
#puts "the key of the oject we are saving: #{resource_key}"
|
282
286
|
@cache.delete(resource_class, resource_key)
|
283
287
|
@cache.delete_mtime(class_name_to_file(resource_class, resource_key))
|
284
288
|
|
@@ -307,14 +311,12 @@ module DataMapper::Adapters
|
|
307
311
|
end
|
308
312
|
end
|
309
313
|
|
310
|
-
#puts "the key is now: #{resource_key}"
|
311
314
|
xmlfile = File.new(class_name_to_file(resource_class, resource_key), "w")
|
312
|
-
#puts "saving to #{xmlfile.path}"
|
313
315
|
tempfile = Tempfile.new("dm-xml-adapter", Dir.tmpdir())
|
314
316
|
tempfile.puts out_string
|
315
|
-
#puts "the content is: #{out_string}"
|
316
317
|
tempfile.close
|
317
318
|
FileUtils.mv(tempfile.path,xmlfile.path)
|
319
|
+
@logger.debug("Saved to: #{xmlfile.path}")
|
318
320
|
return xmlfile
|
319
321
|
|
320
322
|
end
|
@@ -328,10 +330,6 @@ module DataMapper::Adapters
|
|
328
330
|
return File.join(classname_to_dir(class_name), id.to_s + ".xml")
|
329
331
|
end
|
330
332
|
|
331
|
-
#memoize(:file_to_id)
|
332
|
-
#memoize(:classname_to_dir)
|
333
|
-
#memoize(:class_name_to_file)
|
334
|
-
|
335
333
|
end
|
336
334
|
end
|
337
335
|
|
data/spec/dm-xml-adapter_spec.rb
CHANGED
@@ -4,8 +4,6 @@ require 'pathname'
|
|
4
4
|
require 'dm-migrations'
|
5
5
|
require Pathname(__FILE__).dirname.expand_path + 'spec_helper'
|
6
6
|
|
7
|
-
DataMapper::Adapters::XmlAdapter.threads = 2
|
8
|
-
|
9
7
|
describe DataMapper::Adapters::XmlAdapter do
|
10
8
|
before(:each) do
|
11
9
|
@adapter = DataMapper.setup(:default, {:adapter => 'xml', :directory => 'db'})
|
@@ -174,6 +172,20 @@ describe DataMapper::Adapters::XmlAdapter do
|
|
174
172
|
end
|
175
173
|
end
|
176
174
|
|
175
|
+
describe "logging support" do
|
176
|
+
it "should work with logging" do
|
177
|
+
@adapter.loglevel = Logger::DEBUG
|
178
|
+
@adapter.logger = Logger.new("/dev/null")
|
179
|
+
XMLTest::User.create(:name => "contentking", :content => "cool")
|
180
|
+
XMLTest::User.all.size.should == 1
|
181
|
+
DataMapper.repository.adapter.loglevel = Logger::DEBUG
|
182
|
+
DataMapper.repository.adapter.logger = Logger.new(STDOUT)
|
183
|
+
XMLTest::User.create(:name => "contentking", :content => "cool")
|
184
|
+
XMLTest::User.all.size.should == 2
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
|
177
189
|
end
|
178
190
|
|
179
191
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-xml-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 1181
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 587
|
9
|
+
version: "0.587"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Joshua Harding
|
@@ -14,8 +14,7 @@ autorequire: dm-xml-adapter
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
18
|
-
default_executable:
|
17
|
+
date: 2012-02-12 00:00:00 Z
|
19
18
|
dependencies:
|
20
19
|
- !ruby/object:Gem::Dependency
|
21
20
|
name: libxml-ruby
|
@@ -46,7 +45,7 @@ dependencies:
|
|
46
45
|
type: :runtime
|
47
46
|
version_requirements: *id002
|
48
47
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
48
|
+
name: dm-core
|
50
49
|
prerelease: false
|
51
50
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
@@ -60,7 +59,7 @@ dependencies:
|
|
60
59
|
type: :runtime
|
61
60
|
version_requirements: *id003
|
62
61
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
62
|
+
name: dm-migrations
|
64
63
|
prerelease: false
|
65
64
|
requirement: &id004 !ruby/object:Gem::Requirement
|
66
65
|
none: false
|
@@ -73,34 +72,6 @@ dependencies:
|
|
73
72
|
version: "0"
|
74
73
|
type: :runtime
|
75
74
|
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: dm-core
|
78
|
-
prerelease: false
|
79
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
|
-
requirements:
|
82
|
-
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
hash: 3
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
version: "0"
|
88
|
-
type: :runtime
|
89
|
-
version_requirements: *id005
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
name: dm-migrations
|
92
|
-
prerelease: false
|
93
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
|
-
requirements:
|
96
|
-
- - ">="
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
hash: 3
|
99
|
-
segments:
|
100
|
-
- 0
|
101
|
-
version: "0"
|
102
|
-
type: :runtime
|
103
|
-
version_requirements: *id006
|
104
75
|
description:
|
105
76
|
email: josh@statewidesoftware.com
|
106
77
|
executables: []
|
@@ -115,7 +86,6 @@ files:
|
|
115
86
|
- spec/dm-xml-adapter_spec.rb
|
116
87
|
- spec/spec_helper.rb
|
117
88
|
- README
|
118
|
-
has_rdoc: true
|
119
89
|
homepage:
|
120
90
|
licenses: []
|
121
91
|
|
@@ -145,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
115
|
requirements: []
|
146
116
|
|
147
117
|
rubyforge_project:
|
148
|
-
rubygems_version: 1.
|
118
|
+
rubygems_version: 1.8.6
|
149
119
|
signing_key:
|
150
120
|
specification_version: 3
|
151
121
|
summary: a XML adapter for DataMapper. this adapter allows you to use DataMapper with XML files as a backing store.
|