xamplr 1.2.0

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 (142) hide show
  1. data/CHANGES.txt +13 -0
  2. data/LICENSE +3 -0
  3. data/README.rdoc +26 -0
  4. data/README.rdoc.orig +118 -0
  5. data/Rakefile +85 -0
  6. data/VERSION.yml +4 -0
  7. data/examples/random-people-shared-addresses/Makefile +16 -0
  8. data/examples/random-people-shared-addresses/batch-load-users.rb +83 -0
  9. data/examples/random-people-shared-addresses/find-mentions.rb +47 -0
  10. data/examples/random-people-shared-addresses/find-people-by-address.rb +104 -0
  11. data/examples/random-people-shared-addresses/optimise.rb +16 -0
  12. data/examples/random-people-shared-addresses/people.rb +35 -0
  13. data/examples/random-people-shared-addresses/query.rb +75 -0
  14. data/examples/random-people-shared-addresses/query2.rb +73 -0
  15. data/examples/random-people-shared-addresses/random-names.csv +10000 -0
  16. data/examples/random-people-shared-addresses/settings.rb +3 -0
  17. data/examples/random-people-shared-addresses/what-to-query-on.rb +82 -0
  18. data/examples/random-people-shared-addresses/xampl-gen.rb +36 -0
  19. data/examples/random-people-shared-addresses/xml/people.xml +14 -0
  20. data/examples/random-people/Makefile +16 -0
  21. data/examples/random-people/batch-load-users.rb +61 -0
  22. data/examples/random-people/optimise.rb +16 -0
  23. data/examples/random-people/people.rb +22 -0
  24. data/examples/random-people/query.rb +73 -0
  25. data/examples/random-people/query2.rb +73 -0
  26. data/examples/random-people/random-names.csv +10000 -0
  27. data/examples/random-people/rawtc.rb +91 -0
  28. data/examples/random-people/settings.rb +3 -0
  29. data/examples/random-people/what-to-query-on.rb +80 -0
  30. data/examples/random-people/xampl-gen.rb +36 -0
  31. data/examples/random-people/xml/people.xml +11 -0
  32. data/examples/read-testing/Makefile +10 -0
  33. data/examples/read-testing/load.rb +65 -0
  34. data/examples/read-testing/read.rb +51 -0
  35. data/examples/read-testing/rrr.rb +87 -0
  36. data/examples/read-testing/settings.rb +2 -0
  37. data/examples/read-testing/xampl-gen.rb +36 -0
  38. data/examples/read-testing/xml/text.xml +8 -0
  39. data/examples/tokyo-cabinet-experimental/expt-query.rb +42 -0
  40. data/examples/tokyo-cabinet-experimental/expt-query2.rb +42 -0
  41. data/examples/tokyo-cabinet-experimental/expt-query3.rb +41 -0
  42. data/examples/tokyo-cabinet-experimental/expt-reader.rb +32 -0
  43. data/examples/tokyo-cabinet-experimental/expt.rb +61 -0
  44. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +36 -0
  45. data/examples/tokyo-cabinet-experimental/xml/tcx.xml +6 -0
  46. data/lib/xampl-generator.rb +3 -0
  47. data/lib/xampl.rb +3 -0
  48. data/lib/xamplr-generator.rb +10 -0
  49. data/lib/xamplr.rb +37 -0
  50. data/lib/xamplr/README-POSSIBLE-PROBLEMS +5 -0
  51. data/lib/xamplr/TODO +1 -0
  52. data/lib/xamplr/exceptions.rb +97 -0
  53. data/lib/xamplr/from-xml-orig.rb +350 -0
  54. data/lib/xamplr/from-xml.rb +439 -0
  55. data/lib/xamplr/gen-elements.xml +6230 -0
  56. data/lib/xamplr/gen.elements.xml +108 -0
  57. data/lib/xamplr/generate-elements.rb +15 -0
  58. data/lib/xamplr/generator.rb +5 -0
  59. data/lib/xamplr/graphml-out.rb +470 -0
  60. data/lib/xamplr/handwritten/example.rb +698 -0
  61. data/lib/xamplr/handwritten/hand-example.rb +533 -0
  62. data/lib/xamplr/handwritten/test-handwritten.rb +873 -0
  63. data/lib/xamplr/indexed-array.rb +115 -0
  64. data/lib/xamplr/mixins.rb +397 -0
  65. data/lib/xamplr/my.gen.elements.xml +461 -0
  66. data/lib/xamplr/notifications.rb +57 -0
  67. data/lib/xamplr/obsolete/fsdb.rb +62 -0
  68. data/lib/xamplr/persist-to-xml.rb +249 -0
  69. data/lib/xamplr/persistence.rb +522 -0
  70. data/lib/xamplr/persistence.rb.more_thread_safe +771 -0
  71. data/lib/xamplr/persistence.rb.partially_thread_safe +763 -0
  72. data/lib/xamplr/persister.rb +310 -0
  73. data/lib/xamplr/persisters/caches.rb +186 -0
  74. data/lib/xamplr/persisters/caching.rb +172 -0
  75. data/lib/xamplr/persisters/filesystem.rb +60 -0
  76. data/lib/xamplr/persisters/in-memory.rb +180 -0
  77. data/lib/xamplr/persisters/simple.rb +59 -0
  78. data/lib/xamplr/persisters/tokyo-cabinet.rb +641 -0
  79. data/lib/xamplr/simpleTemplate/danger.rx +4 -0
  80. data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +35 -0
  81. data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +12 -0
  82. data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +20 -0
  83. data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +8 -0
  84. data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +13 -0
  85. data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +37 -0
  86. data/lib/xamplr/simpleTemplate/old/r6.000.rb +122 -0
  87. data/lib/xamplr/simpleTemplate/old/r6.001.rb +145 -0
  88. data/lib/xamplr/simpleTemplate/play.r6 +12 -0
  89. data/lib/xamplr/simpleTemplate/play_more.r6 +20 -0
  90. data/lib/xamplr/simpleTemplate/play_noblanks.r6 +21 -0
  91. data/lib/xamplr/simpleTemplate/playq.r6 +16 -0
  92. data/lib/xamplr/simpleTemplate/r6.rb +87 -0
  93. data/lib/xamplr/simpleTemplate/simple-template.rb +75 -0
  94. data/lib/xamplr/templates/child.template +47 -0
  95. data/lib/xamplr/templates/child_indexed.template +89 -0
  96. data/lib/xamplr/templates/child_modules.template +5 -0
  97. data/lib/xamplr/templates/element_classes.template +11 -0
  98. data/lib/xamplr/templates/element_data.template +282 -0
  99. data/lib/xamplr/templates/element_empty.template +285 -0
  100. data/lib/xamplr/templates/element_mixed.template +277 -0
  101. data/lib/xamplr/templates/element_simple.template +276 -0
  102. data/lib/xamplr/templates/package.template +26 -0
  103. data/lib/xamplr/test-support/Makefile +47 -0
  104. data/lib/xamplr/test-support/bench-cache.rb +80 -0
  105. data/lib/xamplr/test-support/bench-script.rb +21 -0
  106. data/lib/xamplr/test-support/bench.rb +116 -0
  107. data/lib/xamplr/test-support/bench2.rb +132 -0
  108. data/lib/xamplr/test-support/test-cache.rb +147 -0
  109. data/lib/xamplr/test-support/test-data/binding.xml +7 -0
  110. data/lib/xamplr/test-support/test-data/example.xml +14 -0
  111. data/lib/xamplr/test-support/test-data/internationalization-utf8.txt +1 -0
  112. data/lib/xamplr/test-support/test-data/labels.xml +37 -0
  113. data/lib/xamplr/test-support/test-data/labels001.xml +38 -0
  114. data/lib/xamplr/test-support/test-deep-change.rb +135 -0
  115. data/lib/xamplr/test-support/test-elements.rb +109 -0
  116. data/lib/xamplr/test-support/test-indexed-array.rb +169 -0
  117. data/lib/xamplr/test-support/test-misc.rb +73 -0
  118. data/lib/xamplr/test-support/test-names.rb +67 -0
  119. data/lib/xamplr/test-support/test-rollback.rb +106 -0
  120. data/lib/xamplr/test-support/test.rb +1504 -0
  121. data/lib/xamplr/to-ruby.rb +220 -0
  122. data/lib/xamplr/to-xml.rb +158 -0
  123. data/lib/xamplr/version.rb +67 -0
  124. data/lib/xamplr/visitor.rb +140 -0
  125. data/lib/xamplr/visitors.rb +573 -0
  126. data/lib/xamplr/xampl-generator.rb +533 -0
  127. data/lib/xamplr/xampl-hand-generated.rb +1535 -0
  128. data/lib/xamplr/xampl-module.rb +36 -0
  129. data/lib/xamplr/xampl-object-internals.rb +6 -0
  130. data/lib/xamplr/xampl-object.rb +202 -0
  131. data/lib/xamplr/xampl-persisted-object.rb +122 -0
  132. data/lib/xamplr/xml-text.rb +117 -0
  133. data/lib/xamplr/xml/document.xml +7 -0
  134. data/lib/xamplr/xml/elements.xml +101 -0
  135. data/lib/xamplr/xml/elements000.xml +73 -0
  136. data/lib/xamplr/xml/example.xml +23 -0
  137. data/lib/xamplr/xml/options.xml +12 -0
  138. data/lib/xamplr/xml/uche.xml +38 -0
  139. data/lib/xamplr/yEd-sample.graphml +300 -0
  140. data/test/test_helper.rb +10 -0
  141. data/test/xamplr_test.rb +7 -0
  142. metadata +245 -0
@@ -0,0 +1,38 @@
1
+ <labels>
2
+ <label id="tse"
3
+ added="2003-06-20">
4
+ <name>Thomas Eliot</name>
5
+ <address>
6
+ <street>3 Prufrock Lane</street>
7
+ <city>Stamford</city>
8
+ <state>CT</state>
9
+ </address>
10
+ <quote>
11
+ <emph>Midwinter Spring</emph>
12
+ is its own season
13
+ </quote>
14
+ </label>
15
+ <label id="ep"
16
+ added="2003-06-10">
17
+ <name>Ezra Pound</name>
18
+ <address>
19
+ <street>45 Usura Place</street>
20
+ <city>Hailey</city>
21
+ <state>ID</state>
22
+ </address>
23
+ <quote>
24
+ What thou lovest well<emph>remains</emph>, the rest is
25
+ <emph>dross</emph>
26
+ </quote>
27
+ </label>
28
+ <!-- Throw in 10,000 more records just like this -->
29
+ <label id="lh"
30
+ added="2004-11-01">
31
+ <name>Langston Hughes</name>
32
+ <address>
33
+ <street>10 Bridge Tunnel</street>
34
+ <city>Harlem</city>
35
+ <state>NY</state>
36
+ </address>
37
+ </label>
38
+ </labels>
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env ruby -w -I..
2
+
3
+ require "test/unit"
4
+ require "xamplr-generator"
5
+
6
+ include XamplGenerator
7
+ include Xampl
8
+
9
+ class TestRollback < Test::Unit::TestCase
10
+
11
+ xml = %Q{
12
+ <sack pid='white'>
13
+ <bag mark='one'>
14
+ <thing info='something'>hello</thing>
15
+ <stuff id='my stuff'>blah</stuff>
16
+ <bag/>
17
+ </bag>
18
+ <sack pid='black'/>
19
+ </sack>
20
+ }
21
+
22
+ Generator.new.go(:strings => [ xml ],
23
+ :directory => "step7")
24
+
25
+ require "step7/XamplAdHoc"
26
+ include XamplAdHoc
27
+
28
+ def test_change
29
+ pname = "test_change"
30
+ Xampl.transaction(pname, :in_memory){
31
+ sack1 = Sack.new
32
+ sack1.pid = "sack1"
33
+
34
+ sack2 = sack1.new_sack("sack2"){ | sack |
35
+ sack.new_bag{ | bag |
36
+ bag.new_thing{ | thing |
37
+ thing.info = "thing in sack2"
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ #assert_equal(0, Xampl.count_changed)
44
+
45
+ Xampl.transaction(pname){
46
+ sack2 = Sack["sack2"]
47
+ sack2.bag[0].thing[0].info = "changed value"
48
+ }
49
+
50
+ #assert_equal(0, Xampl.count_changed)
51
+ Xampl.transaction(pname){
52
+ Xampl.rollback
53
+ }
54
+
55
+ Xampl.transaction(pname){
56
+ sack1 = Sack["sack1"]
57
+ assert_equal("changed value", sack1.sack[0].bag[0].thing[0].info)
58
+ }
59
+
60
+ end
61
+
62
+ def test_change_in_fs
63
+ pname = "test_deep_change_in_fs" << Time.now.strftime("%Y%m%d-%H%M-%S") << rand.to_s
64
+ Xampl.transaction(pname, :filesystem){
65
+ sack1 = Sack.new
66
+ sack1.pid = "sack1"
67
+
68
+ sack2 = sack1.new_sack("sack2"){ | sack |
69
+ sack.new_bag{ | bag |
70
+ bag.new_thing{ | thing |
71
+ thing.info = "thing in sack2"
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ #assert_equal(0, Xampl.count_changed)
78
+
79
+ Xampl.transaction(pname){
80
+ sack2 = Sack["sack2"]
81
+ sack2.bag[0].thing[0].info = "changed value"
82
+
83
+ assert_equal(1, Xampl.count_changed)
84
+ Xampl.persister.put_changed
85
+ }
86
+
87
+ #assert_equal(0, Xampl.count_changed)
88
+
89
+ Xampl.transaction(pname){
90
+ Xampl.rollback
91
+ }
92
+
93
+ Xampl.transaction(pname){
94
+ sack1 = Sack["sack1"]
95
+ assert_equal("changed value", sack1.sack[0].bag[0].thing[0].info)
96
+ }
97
+
98
+ end
99
+
100
+ def test_change_out_of_persister
101
+ pname = "test_change_out_of_persister"
102
+
103
+ sack2 = nil
104
+
105
+ Xampl.transaction(pname, :in_memory){
106
+ sack1 = Sack.new
107
+ sack1.pid = "sack1"
108
+
109
+ sack2 = sack1.new_sack("sack2"){ | sack |
110
+ sack.new_bag{ | bag |
111
+ bag.new_thing{ | thing |
112
+ thing.info = "thing in sack2"
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ assert_raise(UnmanagedChange){
119
+ sack2.bag[0].thing[0].info = "this is a very bad idea"
120
+ }
121
+ puts sack2.pp_xml
122
+
123
+ Xampl.transaction(pname){
124
+ Xampl.rollback
125
+ }
126
+
127
+ sack2a = nil
128
+ Xampl.transaction(pname){
129
+ sack2a = Sack["sack2"]
130
+ sack2a.bag[0].new_thing.info = "change the sack"
131
+ }
132
+ puts sack2a.pp_xml
133
+ end
134
+
135
+ end
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ # NOTE: There will be many warnings with this test because we actually do
5
+ # redefined a ton of stuff
6
+ #
7
+
8
+ require "test/unit"
9
+ require "xamplr-generator"
10
+
11
+ include XamplGenerator
12
+ include Xampl
13
+
14
+ class TestXampl < Test::Unit::TestCase
15
+
16
+ def setup
17
+ Xampl.disable_all_persisters
18
+ FromXML.reset_registry
19
+ end
20
+
21
+ def test_predefined_element_info_1
22
+ options = Xampl.make(Options) { | options |
23
+ options.new_index_attribute("name")
24
+ options.new_index_attribute("id")
25
+ options.new_index_attribute("pid").persisted = true
26
+
27
+ options.new_resolve{ | resolver |
28
+ resolver.pkg = "XamplExample2"
29
+ resolver.namespace="http://xampl.com/example"
30
+ }
31
+ options.new_resolve{ | resolver |
32
+ resolver.pkg = "XamplExamplePlay2"
33
+ resolver.namespace="http://xampl.com/example/play"
34
+ }
35
+ }
36
+
37
+ elements = Xampl.make(Elements) { | elements |
38
+ elements.pid = "http://xampl.com/example"
39
+ elements.new_element("thing"){ | element |
40
+ element.kind = 'mixed'
41
+ element.indexed_by_attr = 'info'
42
+ element.persisted = true
43
+ element.class_name = "MyKindOfThing"
44
+ }
45
+ }
46
+
47
+ generator = Generator.new(options, elements)
48
+
49
+ generator.comprehend_from_files(["./xml/example.xml"])
50
+ generator.generate_to_directory("./tmp/")
51
+
52
+ require "tmp/XamplExample2"
53
+
54
+ thing = XamplExample2::MyKindOfThing.new
55
+ assert(thing.persist_required)
56
+ assert(thing.has_mixed_content)
57
+ assert_equal(:info, thing.indexed_by)
58
+
59
+ thing2 = thing.new_thing("two")
60
+ assert(thing2)
61
+ end
62
+
63
+ def test_predefined_element_info_2
64
+ options = Xampl.make(Options) { | options |
65
+ options.new_index_attribute("name")
66
+ options.new_index_attribute("id")
67
+ options.new_index_attribute("pid").persisted = true
68
+
69
+ options.new_resolve{ | resolver |
70
+ resolver.pkg = "XamplExample2"
71
+ resolver.namespace="http://xampl.com/example"
72
+ }
73
+ options.new_resolve{ | resolver |
74
+ resolver.pkg = "XamplExamplePlay2"
75
+ resolver.namespace="http://xampl.com/example/play"
76
+ }
77
+ }
78
+
79
+ elements = Xampl.make(Elements) { | elements |
80
+ elements.pid = "http://xampl.com/example"
81
+ elements.new_element("thing"){ | element |
82
+ element.kind = 'mixed'
83
+ element.indexed_by_attr = 'info'
84
+ element.persisted = true
85
+ element.class_name = "MyKindOfThing"
86
+ element.attribute_name = "my_thing"
87
+ }
88
+ }
89
+
90
+ generator = Generator.new(options, elements)
91
+
92
+ generator.comprehend_from_files(["./xml/example.xml"])
93
+ generator.generate_to_directory("./tmp2/")
94
+
95
+ require "tmp2/XamplExample2"
96
+ #include XamplExample2
97
+
98
+ thing = XamplExample2::MyKindOfThing.new
99
+ assert(thing.persist_required)
100
+ assert(thing.has_mixed_content)
101
+ assert_equal(:info, thing.indexed_by)
102
+
103
+ thing2 = thing.new_my_thing("two")
104
+ assert(thing2)
105
+ end
106
+
107
+ end
108
+
109
+
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "test/unit"
4
+ #require "rubygems"
5
+ #require_gem "arrayfields"
6
+ #require "arrayfields-local"
7
+ require "indexed-array"
8
+
9
+ class TestXampl < Test::Unit::TestCase
10
+
11
+ def xtest_dummy_fieldarray
12
+ ia = []
13
+ ia.fields = []
14
+
15
+ ia << 0 << 1 << 2
16
+
17
+ ia["three"] = 3
18
+ ia["four"] = 4
19
+ ia["five"] = 5
20
+
21
+ assert_equal(0, ia[0])
22
+ assert_equal(1, ia[1])
23
+ assert_equal(2, ia[2])
24
+ assert_equal(3, ia[3])
25
+ assert_equal(4, ia[4])
26
+ assert_equal(5, ia[5])
27
+
28
+ assert_equal(3, ia["three"])
29
+ assert_equal(4, ia["four"])
30
+ assert_equal(5, ia["five"])
31
+
32
+ ia["four"] = 44
33
+
34
+ assert_equal(44, ia["four"])
35
+ assert_equal(44, ia[4])
36
+
37
+ end
38
+
39
+ def test_remove
40
+ ia = IndexedArray.new
41
+
42
+ ia["one"] = 1
43
+ ia["two"] = 2
44
+ ia["three"] = 3
45
+
46
+ assert_equal(1, ia["one"])
47
+ assert_equal(2, ia["two"])
48
+ assert_equal(3, ia["three"])
49
+
50
+ ia.delete_at("one")
51
+
52
+ assert_equal(2, ia["two"])
53
+ assert_equal(3, ia["three"])
54
+
55
+ assert_equal(2, ia.size)
56
+ assert_equal(2, ia[0])
57
+ assert_equal(3, ia[1])
58
+ end
59
+
60
+ def xtest_remove_fieldarray
61
+ ia = []
62
+ ia.fields = []
63
+
64
+ ia["one"] = 1
65
+ ia["two"] = 2
66
+ ia["three"] = 3
67
+
68
+ assert_equal(1, ia["one"])
69
+ assert_equal(2, ia["two"])
70
+ assert_equal(3, ia["three"])
71
+
72
+ ia.delete_at("one")
73
+
74
+ assert_equal(2, ia["two"])
75
+ assert_equal(3, ia["three"])
76
+
77
+ assert_equal(2, ia.size)
78
+ assert_equal(2, ia[0])
79
+ assert_equal(3, ia[1])
80
+ end
81
+
82
+ def test_two
83
+ a = IndexedArray.new
84
+ b = IndexedArray.new
85
+
86
+ a["one"] = 1
87
+ a["two"] = 2
88
+ a["three"] = 3
89
+
90
+ # a.each_pair { | k, v |
91
+ # puts "a:: k: #{k}, v: #{v}"
92
+ # }
93
+ # a.dump("a")
94
+ # b.each_pair { | k, v |
95
+ # puts "b:: k: #{k}, v: #{v}"
96
+ # }
97
+ # b.dump("b")
98
+
99
+
100
+ b["three"] = 300
101
+ b["two"] = 200
102
+ b["one"] = 100
103
+
104
+ assert_equal(1, a["one"])
105
+ assert_equal(2, a["two"])
106
+ assert_equal(3, a["three"])
107
+
108
+ assert_equal(1, a[0])
109
+ assert_equal(2, a[1])
110
+ assert_equal(3, a[2])
111
+
112
+ assert_equal(300, b["three"])
113
+ assert_equal(200, b["two"])
114
+ assert_equal(100, b["one"])
115
+ assert_equal(300, b[0]) ### returns 100 here
116
+ assert_equal(200, b[1])
117
+ assert_equal(100, b[2])
118
+
119
+ # a.dump("a")
120
+ # b.dump("b")
121
+
122
+ end
123
+
124
+ def xtest_two_fieldarray
125
+ a = []
126
+ a.fields = []
127
+
128
+ b = []
129
+ b.fields = []
130
+
131
+ a["one"] = 1
132
+ a["two"] = 2
133
+ a["three"] = 3
134
+
135
+ # a.each_pair { | k, v |
136
+ # puts "a:: k: #{k}, v: #{v}"
137
+ # }
138
+ # a.dump("a")
139
+ # b.each_pair { | k, v |
140
+ # puts "b:: k: #{k}, v: #{v}"
141
+ # }
142
+ # b.dump("b")
143
+
144
+
145
+ b["three"] = 300
146
+ b["two"] = 200
147
+ b["one"] = 100
148
+
149
+ assert_equal(1, a["one"])
150
+ assert_equal(2, a["two"])
151
+ assert_equal(3, a["three"])
152
+
153
+ assert_equal(1, a[0])
154
+ assert_equal(2, a[1])
155
+ assert_equal(3, a[2])
156
+
157
+ assert_equal(300, b["three"])
158
+ assert_equal(200, b["two"])
159
+ assert_equal(100, b["one"])
160
+ assert_equal(300, b[0]) ### returns 100 here
161
+ assert_equal(200, b[1])
162
+ assert_equal(100, b[2])
163
+
164
+ # a.dump("a")
165
+ # b.dump("b")
166
+
167
+ end
168
+
169
+ end