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,276 @@
1
+
2
+ class #{@element.class_name}
3
+ |
4
+ |if @element.persisted then
5
+ |
6
+ include Xampl::XamplPersistedObject
7
+
8
+ @@default_persister_format = nil
9
+
10
+ def default_persister_format
11
+ @@default_persister_format
12
+ end
13
+ def #{@element.class_name}.default_persister_format
14
+ @@default_persister_format
15
+ end
16
+ def #{@element.class_name}.set_default_persister_format(format)
17
+ @@default_persister_format = format
18
+ end
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
+
27
+ |
28
+ |else
29
+ |
30
+ include Xampl::XamplObject
31
+ |
32
+ |end
33
+ |
34
+ include Xampl::XamplWithSimpleContent
35
+
36
+ @@tag = "#{@element.name}"
37
+ @@ns = "#{@element.namespace}"
38
+ @@ns_tag = "{#{@element.namespace}}#{@element.name}"
39
+ @@module_name = "#{@package_name}"
40
+ @@safe_name = "#{@package_name}_#{@element.attribute_name}"
41
+ @@attributes = [
42
+ |
43
+ |@element.attribute_child.each{ | attribute |
44
+ | if attribute.namespace then
45
+ |
46
+ [ :@#{attribute.name}, "#{attribute.name}", "#{attribute.namespace}" ],
47
+ |
48
+ | else
49
+ |
50
+ [ :@#{attribute.name}, "#{attribute.name}" ],
51
+ |
52
+ | end
53
+ |}
54
+ |
55
+ ]
56
+ |
57
+ |@element.child_element_child.each{ | child_element |
58
+ | element_class_name = @lookup_element[child_element.name].class_name
59
+ | element_package = @lookup_element[child_element.name].package
60
+ |
61
+ include #{element_package}::#{element_class_name}AsChild
62
+ |
63
+ |}
64
+ |
65
+ |if @element.persisted then
66
+ |
67
+
68
+ def #{@element.class_name}.lookup(pid)
69
+ Xampl.lookup(#{@element.class_name}, pid)
70
+ end
71
+
72
+ def #{@element.class_name}.[](pid)
73
+ Xampl.lookup(#{@element.class_name}, pid)
74
+ end
75
+ |
76
+ |end
77
+ |
78
+ |@element.attribute_child.each{ | attribute |
79
+ | if attribute.name == @element.indexed_by_attr and @element.persisted then
80
+ |
81
+
82
+ def #{attribute.name}
83
+ @#{attribute.name}
84
+ end
85
+
86
+ def #{attribute.name}=(v)
87
+ accessed
88
+ # This is kind of optimistic, I think you are in trouble if you do this
89
+ Xampl.auto_uncache(self) if @#{attribute.name}
90
+ @#{attribute.name} = v
91
+ changed
92
+ Xampl.auto_cache(self) if v
93
+ end
94
+ |
95
+ | else
96
+ |
97
+
98
+ def #{attribute.name}
99
+ accessed
100
+ @#{attribute.name}
101
+ end
102
+
103
+ def #{attribute.name}=(v)
104
+ accessed
105
+ changed
106
+ @#{attribute.name} = v
107
+ end
108
+ |
109
+ | end
110
+ |}
111
+ |
112
+ | if @element.indexed_by_attr then
113
+ |
114
+
115
+ def initialize(index=nil)
116
+ @#{@element.indexed_by_attr} = index if index
117
+ super()
118
+ |
119
+ | else
120
+ |
121
+
122
+ def initialize
123
+ super
124
+ |
125
+ |end
126
+ |
127
+ |if 0 < @element.attribute_child.size then
128
+ |
129
+
130
+ |
131
+ |end
132
+ |
133
+ |@element.attribute_child.each{ | attribute |
134
+ |
135
+ @#{attribute.name} = nil if not defined? @#{attribute.name}
136
+ |
137
+ |}
138
+ |
139
+
140
+ init_xampl_object
141
+ |
142
+ |@element.child_element_child.each{ | child_element |
143
+ | element_attribute_name = @lookup_element[child_element.name].attribute_name
144
+ |
145
+ init_#{child_element.element_attribute_name}_as_child
146
+ |
147
+ |}
148
+ |
149
+
150
+ yield(self) if block_given?
151
+ init_hook
152
+
153
+ changed
154
+ end
155
+
156
+ def clear_non_persistent_index_attributes
157
+ |
158
+ |@element.attribute_child.each{ | attribute |
159
+ | unless attribute.name == @element.indexed_by_attr and @element.persisted then
160
+ |
161
+ @#{attribute.name} = nil
162
+ |
163
+ | end
164
+ |}
165
+ |
166
+ end
167
+
168
+ def append_to(other)
169
+ other.add_#{@element.attribute_name}(self)
170
+ end
171
+
172
+ |
173
+ |if @element.persisted then
174
+ |
175
+ def #{@element.class_name}.persisted?
176
+ return :#{@element.indexed_by_attr}
177
+ end
178
+
179
+ def persisted?
180
+ return :#{@element.indexed_by_attr}
181
+ end
182
+
183
+ |
184
+ |else
185
+ |
186
+ def #{@element.class_name}.persisted?
187
+ return nil
188
+ end
189
+
190
+ def persisted?
191
+ return nil
192
+ end
193
+
194
+ |
195
+ |end
196
+ |
197
+ def #{@element.class_name}.tag
198
+ @@tag
199
+ end
200
+
201
+ def #{@element.class_name}.ns
202
+ @@ns
203
+ end
204
+
205
+ def #{@element.class_name}.ns_tag
206
+ @@ns_tag
207
+ end
208
+
209
+ def #{@element.class_name}.safe_name
210
+ @@safe_name
211
+ end
212
+
213
+ def #{@element.class_name}.module_name
214
+ @@module_name
215
+ end
216
+
217
+ def tag
218
+ @@tag
219
+ end
220
+
221
+ def ns
222
+ @@ns
223
+ end
224
+
225
+ def ns_tag
226
+ @@ns_tag
227
+ end
228
+
229
+ def safe_name
230
+ @@safe_name
231
+ end
232
+
233
+ def module_name
234
+ @@module_name
235
+ end
236
+
237
+ def attributes
238
+ @@attributes
239
+ end
240
+ |
241
+ |if @element.indexed_by_attr
242
+ |
243
+
244
+ def indexed_by
245
+ :#{@element.indexed_by_attr}
246
+ end
247
+
248
+ def get_the_index
249
+ @#{@element.indexed_by_attr}
250
+ end
251
+
252
+ def set_the_index(index)
253
+ @#{@element.indexed_by_attr} = index
254
+ end
255
+ |
256
+ |end
257
+ |
258
+
259
+ def substitute_in_visit(visitor)
260
+ return visitor.substitute_in_visit_#{@element.attribute_name}(self) || self
261
+ end
262
+
263
+ def before_visit(visitor)
264
+ visitor.before_visit_#{@element.attribute_name}(self)
265
+ end
266
+
267
+ def visit(visitor)
268
+ visitor.visit_#{@element.attribute_name}(self)
269
+ end
270
+
271
+ def after_visit(visitor)
272
+ visitor.after_visit_#{@element.attribute_name}(self)
273
+ end
274
+
275
+ Xampl::FromXML::register(#{@element.class_name}::tag, #{@element.class_name}::ns_tag, #{@element.class_name})
276
+ end
@@ -0,0 +1,26 @@
1
+ module #{package_name}
2
+
3
+ require "xamplr"
4
+ include Xampl
5
+
6
+ |
7
+ | @required_packages.each_key{ | required_package_name |
8
+ |
9
+ require "#{required_package_name}"
10
+ |
11
+ | }
12
+ |
13
+
14
+ |
15
+ | if @options then
16
+ | @options.resolve_child.each{ | r |
17
+ | if r.namespace and (0 < r.namespace.length) and r.preferred_prefix and (0 < r.preferred_prefix.length) then
18
+ |
19
+ XamplObject.ns_preferred_prefix("#{r.namespace}", "#{r.preferred_prefix}")
20
+ |
21
+ | end
22
+ | }
23
+ | end
24
+ |
25
+ #{place}
26
+ end
@@ -0,0 +1,47 @@
1
+
2
+ ut:
3
+ @rm -rf tmp tmp1 tmp2 ut.results
4
+ @echo "test.rb" >> ut.results
5
+ @ruby -w test.rb | tee -a ut.results
6
+ @echo "test-rollback.rb" >> ut.results
7
+ @ruby -w test-rollback.rb | tee -a ut.results
8
+ @echo "test-deep-change.rb" >> ut.results
9
+ @ruby -w test-deep-change.rb | tee -a ut.results
10
+ @echo "test-cache.rb" >> ut.results
11
+ @ruby -w test-cache.rb | tee -a ut.results
12
+ @echo "test-elements.rb" >> ut.results
13
+ @ruby test-elements.rb | tee -a ut.results
14
+ @echo "test-indexed-array.rb" >> ut.results
15
+ @ruby -w test-indexed-array.rb | tee -a ut.results
16
+ @echo "test-misc.rb" >> ut.results
17
+ @ruby -w test-misc.rb | tee -a ut.results
18
+ @echo "test-names.rb" >> ut.results
19
+ @ruby -w test-names.rb | tee -a ut.results
20
+ @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
21
+ @grep errors ut.results
22
+
23
+ profile:
24
+ #ruby -r rbprof uche3.rb > junk 2> results.profile
25
+ ruby -r rbprof uche.rb > junk 2> results.profile
26
+
27
+ wc:
28
+ @echo "screwing around -------------------------------"
29
+ @wc bench.rb play.rb
30
+ @echo "unit tests ------------------------------------"
31
+ @wc test.rb
32
+ @echo "example ---------------------------------------"
33
+ @wc example.rb
34
+ @echo "xampl itself ----------------------------------"
35
+ @wc from-xml.rb mixins.rb persistence.rb to-xml.rb xampl-object.rb xampl.rb
36
+ @echo "xampl-pp extra---------------------------------"
37
+ @wc xampl-pp/chew.rb xampl-pp/chewMultibyte.rb xampl-pp/chewRexml.rb xampl-pp/chewRexmlPP.rb xampl-pp/dump.rb
38
+ @echo "stuff------------------------------------------"
39
+ @wc xampl-pp/parse-wf.rb xampl-pp/parse.rb xampl-pp/parseR.rb
40
+ @echo "xampl-pp --------------------------------------"
41
+ @wc xampl-pp/saxdemo.rb xampl-pp/saxish.rb xampl-pp/saxishHandler.rb xampl-pp/xampl-pp-dtd.rb xampl-pp/xampl-pp-wf.rb xampl-pp/xampl-pp.rb
42
+ @echo "alternate--------------------------------------"
43
+ @wc xampl-pp/xpp.rb xampl-pp/xppDeluxe.rb xampl-pp/xppIter.rb
44
+
45
+ wc0:
46
+ @wc bench.rb play.rb test.rb example.rb from-xml.rb mixins.rb persistence.rb to-xml.rb xampl-object.rb xampl.rb xampl-pp/chew.rb xampl-pp/chewMultibyte.rb xampl-pp/chewRexml.rb xampl-pp/chewRexmlPP.rb xampl-pp/dump.rb xampl-pp/parse-wf.rb xampl-pp/parse.rb xampl-pp/parseR.rb xampl-pp/saxdemo.rb xampl-pp/saxish.rb xampl-pp/saxishHandler.rb xampl-pp/xampl-pp-dtd.rb xampl-pp/xampl-pp-wf.rb xampl-pp/xampl-pp.rb xampl-pp/xpp.rb xampl-pp/xppDeluxe.rb xampl-pp/xppIter.rb
47
+
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "xamplr"
4
+ include Xampl
5
+
6
+ require "tmp/XamplExample"
7
+ include XamplExample
8
+
9
+ require "benchmark"
10
+ include Benchmark
11
+
12
+ #require 'persister/fsdb'
13
+ require 'wee-cache/cache'
14
+
15
+ class LRUCache < Cache::StorageCache
16
+ def initialize(capacity=20)
17
+ super(Cache::Strategy::LRU.new(capacity))
18
+ end
19
+ end
20
+
21
+ class LRU2Cache < Cache::StorageCache
22
+ def initialize(capacity=20)
23
+ super(Cache::Strategy::LRU2.new(capacity))
24
+ end
25
+ end
26
+
27
+ class LFUCache < Cache::StorageCache
28
+ def initialize(capacity=20)
29
+ super(Cache::Strategy::LFU.new(capacity))
30
+ end
31
+ end
32
+
33
+
34
+ module Bench
35
+
36
+ def Bench.go
37
+ count = 1000
38
+ capacity = 500
39
+
40
+ bm(15) do | x |
41
+ x.report("XamplCache") {
42
+ cache = XamplCache.new(capacity)
43
+
44
+ count.times { | i |
45
+ cache[i] = i
46
+ }
47
+ }
48
+ x.report("XamplCacheLFU") {
49
+ cache = XamplCacheLFU.new(capacity)
50
+
51
+ count.times { | i |
52
+ cache[i] = i
53
+ }
54
+ }
55
+ x.report("LRU") {
56
+ cache = LRUCache.new(capacity)
57
+
58
+ count.times { | i |
59
+ cache[i] = i
60
+ }
61
+ }
62
+ x.report("LRU2") {
63
+ cache = LRU2Cache.new(capacity)
64
+
65
+ count.times { | i |
66
+ cache[i] = i
67
+ }
68
+ }
69
+ x.report("LFU") {
70
+ cache = LFUCache.new(capacity)
71
+
72
+ count.times { | i |
73
+ cache[i] = i
74
+ }
75
+ }
76
+ end
77
+ end
78
+ end
79
+
80
+ Bench.go
@@ -0,0 +1,21 @@
1
+ module BenchScript
2
+
3
+ def BenchScript.build
4
+ return Thing.new{ | bt |
5
+ bt.new_thing("thing") { | t |
6
+ t.new_stuff.kind = "stuff1"
7
+ t.new_description{ | d |
8
+ d.kind = "desc1"
9
+ d << "hello "
10
+ d.new_emph.content = "there"
11
+ d << "! How "
12
+ d.new_emph.content = "are"
13
+ d << " you?"
14
+ }
15
+ }
16
+ }
17
+ end
18
+ end
19
+
20
+
21
+