hutch-xamplr 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/CHANGES.txt +13 -0
  2. data/VERSION.yml +1 -1
  3. data/examples/random-people/people.rb +2 -2
  4. data/examples/random-people/query.rb +16 -11
  5. data/examples/random-people-shared-addresses/Makefile +16 -0
  6. data/examples/random-people-shared-addresses/batch-load-users.rb +86 -0
  7. data/examples/random-people-shared-addresses/find-mentions.rb +50 -0
  8. data/examples/random-people-shared-addresses/find-people-by-address.rb +110 -0
  9. data/examples/random-people-shared-addresses/optimise.rb +19 -0
  10. data/examples/random-people-shared-addresses/people.rb +50 -0
  11. data/examples/random-people-shared-addresses/query.rb +78 -0
  12. data/examples/random-people-shared-addresses/query2.rb +76 -0
  13. data/examples/random-people-shared-addresses/random-names.csv +10000 -0
  14. data/examples/random-people-shared-addresses/what-to-query-on.rb +82 -0
  15. data/examples/random-people-shared-addresses/xampl-gen.rb +36 -0
  16. data/examples/random-people-shared-addresses/xml/people.xml +14 -0
  17. data/lib/xamplr/TODO +1 -3
  18. data/lib/xamplr/{persister → obsolete}/fsdb.rb +0 -0
  19. data/lib/xamplr/persistence.rb +7 -3
  20. data/lib/xamplr/persister/tokyo-cabinet.rb +70 -7
  21. data/lib/xamplr/templates/element_data.template +29 -21
  22. data/lib/xamplr/templates/element_empty.template +29 -22
  23. data/lib/xamplr/templates/element_mixed.template +31 -24
  24. data/lib/xamplr/templates/element_simple.template +29 -22
  25. data/lib/xamplr/{Makefile → test-support/Makefile} +0 -0
  26. data/lib/xamplr/{bench-cache.rb → test-support/bench-cache.rb} +1 -1
  27. data/lib/xamplr/{bench-script.rb → test-support/bench-script.rb} +0 -0
  28. data/lib/xamplr/{bench.rb → test-support/bench.rb} +0 -0
  29. data/lib/xamplr/{bench2.rb → test-support/bench2.rb} +9 -9
  30. data/lib/xamplr/{test-cache.rb → test-support/test-cache.rb} +0 -0
  31. data/lib/xamplr/{test-data → test-support/test-data}/binding.xml +0 -0
  32. data/lib/xamplr/{test-data → test-support/test-data}/example.xml +0 -0
  33. data/lib/xamplr/{test-data → test-support/test-data}/internationalization-utf8.txt +0 -0
  34. data/lib/xamplr/{test-data → test-support/test-data}/labels.xml +0 -0
  35. data/lib/xamplr/{test-data → test-support/test-data}/labels001.xml +0 -0
  36. data/lib/xamplr/{test-deep-change.rb → test-support/test-deep-change.rb} +0 -0
  37. data/lib/xamplr/{test-elements.rb → test-support/test-elements.rb} +0 -0
  38. data/lib/xamplr/{test-indexed-array.rb → test-support/test-indexed-array.rb} +0 -0
  39. data/lib/xamplr/{test-misc.rb → test-support/test-misc.rb} +0 -0
  40. data/lib/xamplr/{test-names.rb → test-support/test-names.rb} +0 -0
  41. data/lib/xamplr/{test-rollback.rb → test-support/test-rollback.rb} +0 -0
  42. data/lib/xamplr/{test.rb → test-support/test.rb} +74 -74
  43. data/lib/xamplr/to-ruby.rb +19 -15
  44. data/lib/xamplr/to-xml.rb +5 -4
  45. data/lib/xamplr/visitor.rb +6 -2
  46. data/lib/xamplr/xampl-object.rb +4 -9
  47. metadata +43 -25
  48. data/lib/xamplr/BUGS +0 -3
  49. data/lib/xamplr/CHANGES +0 -16
  50. data/lib/xamplr/REQUIREMENTS +0 -2
  51. data/lib/xamplr/sqlite/sqlite-play.rb +0 -14
@@ -4,7 +4,7 @@
4
4
  |if @element.persisted then
5
5
  |
6
6
  include Xampl::XamplPersistedObject
7
-
7
+
8
8
  @@default_persister_format = nil
9
9
 
10
10
  def default_persister_format
@@ -17,6 +17,13 @@
17
17
  @@default_persister_format = format
18
18
  end
19
19
 
20
+ def #{@element.class_name}.find_by_query
21
+ things = Xampl.find_xampl do | q |
22
+ q.add_condition('class', :equals, self.name)
23
+ yield(q)
24
+ end
25
+ end
26
+
20
27
  |
21
28
  |else
22
29
  |
@@ -25,7 +32,7 @@
25
32
  |end
26
33
  |
27
34
  include Xampl::XamplWithMixedContent
28
-
35
+
29
36
  @@tag = "#{@element.name}"
30
37
  @@ns = "#{@element.namespace}"
31
38
  @@ns_tag = "{#{@element.namespace}}#{@element.name}"
@@ -59,7 +66,7 @@
59
66
  |
60
67
 
61
68
  @@to_yaml_properties = [ "@#{@element.indexed_by_attr}" ]
62
- @@to_yaml_properties_all = [
69
+ @@to_yaml_properties_all = [
63
70
 
64
71
  |
65
72
  |else
@@ -68,7 +75,7 @@
68
75
  @@to_yaml_properties = [
69
76
  |
70
77
  | end
71
- |
78
+ |
72
79
  |@element.attribute_child.each{ | attribute |
73
80
  |
74
81
  "@#{attribute.name}",
@@ -76,8 +83,8 @@
76
83
  |}
77
84
  |
78
85
  "@children"
79
- ]
80
-
86
+ ]
87
+
81
88
  def to_yaml_properties
82
89
  |
83
90
  |if @element.persisted then
@@ -152,7 +159,7 @@
152
159
  |
153
160
  | else
154
161
  |
155
-
162
+
156
163
  def initialize
157
164
  super
158
165
  |
@@ -187,7 +194,7 @@
187
194
 
188
195
  changed
189
196
  end
190
-
197
+
191
198
  def clear_non_persistent_index_attributes
192
199
  |
193
200
  |@element.attribute_child.each{ | attribute |
@@ -199,11 +206,11 @@
199
206
  |}
200
207
  |
201
208
  end
202
-
209
+
203
210
  def append_to(other)
204
211
  other.add_#{@element.attribute_name}(self)
205
212
  end
206
-
213
+
207
214
  |
208
215
  |if @element.persisted then
209
216
  |
@@ -232,11 +239,11 @@
232
239
  def #{@element.class_name}.tag
233
240
  @@tag
234
241
  end
235
-
242
+
236
243
  def #{@element.class_name}.ns
237
244
  @@ns
238
245
  end
239
-
246
+
240
247
  def #{@element.class_name}.ns_tag
241
248
  @@ns_tag
242
249
  end
@@ -244,19 +251,19 @@
244
251
  def #{@element.class_name}.safe_name
245
252
  @@safe_name
246
253
  end
247
-
254
+
248
255
  def #{@element.class_name}.module_name
249
256
  @@module_name
250
257
  end
251
-
258
+
252
259
  def tag
253
260
  @@tag
254
261
  end
255
-
262
+
256
263
  def ns
257
264
  @@ns
258
265
  end
259
-
266
+
260
267
  def ns_tag
261
268
  @@ns_tag
262
269
  end
@@ -264,11 +271,11 @@
264
271
  def safe_name
265
272
  @@safe_name
266
273
  end
267
-
274
+
268
275
  def module_name
269
276
  @@module_name
270
277
  end
271
-
278
+
272
279
  def attributes
273
280
  @@attributes
274
281
  end
@@ -279,30 +286,30 @@
279
286
  def indexed_by
280
287
  :#{@element.indexed_by_attr}
281
288
  end
282
-
289
+
283
290
  def get_the_index
284
291
  @#{@element.indexed_by_attr}
285
292
  end
286
-
293
+
287
294
  def set_the_index(index)
288
295
  @#{@element.indexed_by_attr} = index
289
296
  end
290
297
  |
291
298
  |end
292
299
  |
293
-
300
+
294
301
  def substitute_in_visit(visitor)
295
302
  return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
296
303
  end
297
-
304
+
298
305
  def before_visit(visitor)
299
306
  visitor.before_visit_#{@element.attribute_name}(self)
300
307
  end
301
-
308
+
302
309
  def visit(visitor)
303
310
  visitor.visit_#{@element.attribute_name}(self)
304
311
  end
305
-
312
+
306
313
  def after_visit(visitor)
307
314
  visitor.after_visit_#{@element.attribute_name}(self)
308
315
  end
@@ -4,7 +4,7 @@
4
4
  |if @element.persisted then
5
5
  |
6
6
  include Xampl::XamplPersistedObject
7
-
7
+
8
8
  @@default_persister_format = nil
9
9
 
10
10
  def default_persister_format
@@ -17,6 +17,13 @@
17
17
  @@default_persister_format = format
18
18
  end
19
19
 
20
+ def #{@element.class_name}.find_by_query
21
+ things = Xampl.find_xampl do | q |
22
+ q.add_condition('class', :equals, self.name)
23
+ yield(q)
24
+ end
25
+ end
26
+
20
27
  |
21
28
  |else
22
29
  |
@@ -25,7 +32,7 @@
25
32
  |end
26
33
  |
27
34
  include Xampl::XamplWithSimpleContent
28
-
35
+
29
36
  @@tag = "#{@element.name}"
30
37
  @@ns = "#{@element.namespace}"
31
38
  @@ns_tag = "{#{@element.namespace}}#{@element.name}"
@@ -59,7 +66,7 @@
59
66
  |
60
67
 
61
68
  @@to_yaml_properties = [ "@#{@element.indexed_by_attr}" ]
62
- @@to_yaml_properties_all = [
69
+ @@to_yaml_properties_all = [
63
70
  |
64
71
  |else
65
72
  |
@@ -75,7 +82,7 @@
75
82
  |}
76
83
  |
77
84
  "@_content"
78
- ]
85
+ ]
79
86
 
80
87
  def to_yaml_properties
81
88
  |
@@ -151,7 +158,7 @@
151
158
  |
152
159
  | else
153
160
  |
154
-
161
+
155
162
  def initialize
156
163
  super
157
164
  |
@@ -185,7 +192,7 @@
185
192
 
186
193
  changed
187
194
  end
188
-
195
+
189
196
  def clear_non_persistent_index_attributes
190
197
  |
191
198
  |@element.attribute_child.each{ | attribute |
@@ -197,11 +204,11 @@
197
204
  |}
198
205
  |
199
206
  end
200
-
207
+
201
208
  def append_to(other)
202
209
  other.add_#{@element.attribute_name}(self)
203
210
  end
204
-
211
+
205
212
  |
206
213
  |if @element.persisted then
207
214
  |
@@ -230,11 +237,11 @@
230
237
  def #{@element.class_name}.tag
231
238
  @@tag
232
239
  end
233
-
240
+
234
241
  def #{@element.class_name}.ns
235
242
  @@ns
236
243
  end
237
-
244
+
238
245
  def #{@element.class_name}.ns_tag
239
246
  @@ns_tag
240
247
  end
@@ -242,19 +249,19 @@
242
249
  def #{@element.class_name}.safe_name
243
250
  @@safe_name
244
251
  end
245
-
252
+
246
253
  def #{@element.class_name}.module_name
247
254
  @@module_name
248
255
  end
249
-
256
+
250
257
  def tag
251
258
  @@tag
252
259
  end
253
-
260
+
254
261
  def ns
255
262
  @@ns
256
263
  end
257
-
264
+
258
265
  def ns_tag
259
266
  @@ns_tag
260
267
  end
@@ -262,11 +269,11 @@
262
269
  def safe_name
263
270
  @@safe_name
264
271
  end
265
-
272
+
266
273
  def module_name
267
274
  @@module_name
268
275
  end
269
-
276
+
270
277
  def attributes
271
278
  @@attributes
272
279
  end
@@ -277,30 +284,30 @@
277
284
  def indexed_by
278
285
  :#{@element.indexed_by_attr}
279
286
  end
280
-
287
+
281
288
  def get_the_index
282
289
  @#{@element.indexed_by_attr}
283
290
  end
284
-
291
+
285
292
  def set_the_index(index)
286
293
  @#{@element.indexed_by_attr} = index
287
294
  end
288
295
  |
289
296
  |end
290
297
  |
291
-
298
+
292
299
  def substitute_in_visit(visitor)
293
300
  return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
294
301
  end
295
-
302
+
296
303
  def before_visit(visitor)
297
304
  visitor.before_visit_#{@element.attribute_name}(self)
298
305
  end
299
-
306
+
300
307
  def visit(visitor)
301
308
  visitor.visit_#{@element.attribute_name}(self)
302
309
  end
303
-
310
+
304
311
  def after_visit(visitor)
305
312
  visitor.after_visit_#{@element.attribute_name}(self)
306
313
  end
File without changes
@@ -9,7 +9,7 @@ include XamplExample
9
9
  require "benchmark"
10
10
  include Benchmark
11
11
 
12
- require 'persister/fsdb'
12
+ #require 'persister/fsdb'
13
13
  require 'wee-cache/cache'
14
14
 
15
15
  class LRUCache < Cache::StorageCache
File without changes
@@ -9,7 +9,7 @@ include XamplExample
9
9
  require "benchmark"
10
10
  include Benchmark
11
11
 
12
- require 'persister/fsdb'
12
+ #require 'persister/fsdb'
13
13
 
14
14
  module Bench
15
15
 
@@ -32,10 +32,10 @@ module Bench
32
32
  Xampl.enable_persister("bench2_no_rollback_filesystem", :filesystem)
33
33
  writes += Bench.no_rollbacks(count_things, count)
34
34
  }
35
- x.report("fsdb") {
36
- Xampl.enable_persister("bench2_no_rollback_fsdb", :fsdb)
37
- Bench.no_rollbacks(count_things, count)
38
- }
35
+ # x.report("fsdb") {
36
+ # Xampl.enable_persister("bench2_no_rollback_fsdb", :fsdb)
37
+ # Bench.no_rollbacks(count_things, count)
38
+ # }
39
39
  end
40
40
  puts " writes: #{writes}"
41
41
 
@@ -54,10 +54,10 @@ module Bench
54
54
  Xampl.enable_persister("bench2_rollback_filesystem", :filesystem)
55
55
  writes += Bench.rollbacks(count_things, count)
56
56
  }
57
- x.report("fsdb") {
58
- Xampl.enable_persister("bench2_rollback_fsdb", :fsdb)
59
- Bench.rollbacks(count_things, count)
60
- }
57
+ # x.report("fsdb") {
58
+ # Xampl.enable_persister("bench2_rollback_fsdb", :fsdb)
59
+ # Bench.rollbacks(count_things, count)
60
+ # }
61
61
  end
62
62
  puts " writes: #{writes}"
63
63
  end
@@ -1455,80 +1455,80 @@ class TestXampl < Test::Unit::TestCase
1455
1455
  pp_xml = root.pp_xml
1456
1456
  end
1457
1457
 
1458
- def test_fsdb_extension_persistence_basics
1459
- require 'persister/fsdb'
1460
- stuff = Stuff.new
1461
- thing = Thing.new
1462
- thing << stuff
1463
-
1464
- thing.pid = "thing"
1465
-
1466
- assert_xampl_exception(:name_required){
1467
- Xampl.enable_persister(nil, :fsdb)
1468
- }
1469
-
1470
- pname = "test_fsdb_extension_persistence_basics" << Time.now.strftime("%Y%m%d-%H%M-%S") << rand.to_s
1471
- Xampl.enable_persister(pname, :fsdb)
1472
-
1473
- stuff = Stuff.new
1474
- thing = Thing.new
1475
- thing.pid = "thing"
1476
- thing << stuff
1477
-
1478
- assert_nil(Xampl.lookup(Thing, "thing"))
1479
-
1480
- assert(nil == thing.persister)
1481
- assert(thing.is_changed)
1482
- assert_equal(0, Xampl.count_changed)
1483
-
1484
- Xampl.introduce_to_persister(thing)
1485
-
1486
- assert(thing.persister)
1487
- assert_equal(1, Xampl.count_changed)
1488
- assert_same(thing, Xampl.lookup(Thing, "thing"), "cannot lookup new stuff")
1489
-
1490
- #Xampl.print_stats
1491
-
1492
- assert_equal(1, Xampl.count_changed)
1493
- writes = Xampl.sync
1494
- assert_equal(1, writes)
1495
- assert_equal(0, Xampl.count_changed)
1496
- assert(Xampl.lookup(Thing, "thing"))
1497
-
1498
- thing2 = Xampl.lookup(Thing, "thing")
1499
- assert_same(thing, thing2, "cannot lookup cached stuff")
1500
-
1501
- Xampl.clear_cache
1502
-
1503
- found = Xampl.lookup(Thing, "thing")
1504
- assert_not_same(thing, found)
1505
- assert(thing === found)
1506
-
1507
- Xampl.clear_cache
1508
-
1509
- # now, changing thing will affect the DB -- VERY SUBTLE POSSIBLIITY OF BUG!
1510
- thing.new_stuff
1511
- assert_equal(2, thing.stuff.size)
1512
- assert_equal(1, found.stuff.size)
1513
-
1514
- writes = Xampl.sync
1515
-
1516
- assert_equal(2, thing.stuff.size)
1517
- assert_equal(1, found.stuff.size)
1518
-
1519
- found2 = Xampl.lookup(Thing, "thing")
1520
-
1521
- assert_equal(2, thing.stuff.size)
1522
- assert_equal(1, found.stuff.size)
1523
- assert_equal(2, found2.stuff.size)
1524
-
1525
- assert(!(found === found2))
1526
- assert(thing === found2)
1527
-
1528
- assert_not_equal(found, found2)
1529
-
1530
- #Xampl.print_stats
1531
- end
1458
+ # def test_fsdb_extension_persistence_basics
1459
+ # require 'persister/fsdb'
1460
+ # stuff = Stuff.new
1461
+ # thing = Thing.new
1462
+ # thing << stuff
1463
+ #
1464
+ # thing.pid = "thing"
1465
+ #
1466
+ # assert_xampl_exception(:name_required){
1467
+ # Xampl.enable_persister(nil, :fsdb)
1468
+ # }
1469
+ #
1470
+ # pname = "test_fsdb_extension_persistence_basics" << Time.now.strftime("%Y%m%d-%H%M-%S") << rand.to_s
1471
+ # Xampl.enable_persister(pname, :fsdb)
1472
+ #
1473
+ # stuff = Stuff.new
1474
+ # thing = Thing.new
1475
+ # thing.pid = "thing"
1476
+ # thing << stuff
1477
+ #
1478
+ # assert_nil(Xampl.lookup(Thing, "thing"))
1479
+ #
1480
+ # assert(nil == thing.persister)
1481
+ # assert(thing.is_changed)
1482
+ # assert_equal(0, Xampl.count_changed)
1483
+ #
1484
+ # Xampl.introduce_to_persister(thing)
1485
+ #
1486
+ # assert(thing.persister)
1487
+ # assert_equal(1, Xampl.count_changed)
1488
+ # assert_same(thing, Xampl.lookup(Thing, "thing"), "cannot lookup new stuff")
1489
+ #
1490
+ # #Xampl.print_stats
1491
+ #
1492
+ # assert_equal(1, Xampl.count_changed)
1493
+ # writes = Xampl.sync
1494
+ # assert_equal(1, writes)
1495
+ # assert_equal(0, Xampl.count_changed)
1496
+ # assert(Xampl.lookup(Thing, "thing"))
1497
+ #
1498
+ # thing2 = Xampl.lookup(Thing, "thing")
1499
+ # assert_same(thing, thing2, "cannot lookup cached stuff")
1500
+ #
1501
+ # Xampl.clear_cache
1502
+ #
1503
+ # found = Xampl.lookup(Thing, "thing")
1504
+ # assert_not_same(thing, found)
1505
+ # assert(thing === found)
1506
+ #
1507
+ # Xampl.clear_cache
1508
+ #
1509
+ # # now, changing thing will affect the DB -- VERY SUBTLE POSSIBLIITY OF BUG!
1510
+ # thing.new_stuff
1511
+ # assert_equal(2, thing.stuff.size)
1512
+ # assert_equal(1, found.stuff.size)
1513
+ #
1514
+ # writes = Xampl.sync
1515
+ #
1516
+ # assert_equal(2, thing.stuff.size)
1517
+ # assert_equal(1, found.stuff.size)
1518
+ #
1519
+ # found2 = Xampl.lookup(Thing, "thing")
1520
+ #
1521
+ # assert_equal(2, thing.stuff.size)
1522
+ # assert_equal(1, found.stuff.size)
1523
+ # assert_equal(2, found2.stuff.size)
1524
+ #
1525
+ # assert(!(found === found2))
1526
+ # assert(thing === found2)
1527
+ #
1528
+ # assert_not_equal(found, found2)
1529
+ #
1530
+ # #Xampl.print_stats
1531
+ # end
1532
1532
 
1533
1533
  def test_simple_extension_persistence_basics
1534
1534
  stuff = Stuff.new