hutch-xamplr 1.0.5 → 1.1.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 (76) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION.yml +2 -2
  3. data/examples/random-people-shared-addresses/Makefile +2 -2
  4. data/examples/random-people-shared-addresses/batch-load-users.rb +2 -5
  5. data/examples/random-people-shared-addresses/find-mentions.rb +1 -4
  6. data/examples/random-people-shared-addresses/find-people-by-address.rb +1 -4
  7. data/examples/random-people-shared-addresses/optimise.rb +1 -4
  8. data/examples/random-people-shared-addresses/people.rb +0 -15
  9. data/examples/random-people-shared-addresses/query.rb +1 -4
  10. data/examples/random-people-shared-addresses/query2.rb +1 -4
  11. data/examples/random-people-shared-addresses/results.write.BASELINE +298 -0
  12. data/examples/random-people-shared-addresses/results.write.NEW_ATTR_ENCODING +294 -0
  13. data/examples/random-people-shared-addresses/settings.rb +3 -0
  14. data/examples/random-people/batch-load-users.rb +1 -4
  15. data/examples/random-people/optimise.rb +1 -4
  16. data/examples/random-people/people.rb +0 -3
  17. data/examples/random-people/query.rb +1 -5
  18. data/examples/random-people/query2.rb +1 -4
  19. data/examples/random-people/settings.rb +3 -0
  20. data/examples/random-people/what-to-query-on.rb +1 -3
  21. data/examples/read-testing/Makefile +10 -0
  22. data/examples/read-testing/load.rb +65 -0
  23. data/examples/read-testing/read.rb +51 -0
  24. data/examples/read-testing/results.read.BASELINE +6 -0
  25. data/examples/read-testing/results.read.FAST +5 -0
  26. data/examples/read-testing/rrr.rb +87 -0
  27. data/examples/read-testing/settings.rb +2 -0
  28. data/examples/read-testing/xampl-gen.rb +36 -0
  29. data/examples/read-testing/xml/text.xml +8 -0
  30. data/lib/xamplr.rb +10 -1
  31. data/lib/xamplr/exceptions.rb +97 -0
  32. data/lib/xamplr/from-xml-orig.rb +350 -0
  33. data/lib/xamplr/from-xml.rb +272 -183
  34. data/lib/xamplr/handwritten/example.rb +0 -58
  35. data/lib/xamplr/handwritten/hand-example.rb +0 -27
  36. data/lib/xamplr/handwritten/test-handwritten.rb +0 -37
  37. data/lib/xamplr/mixins.rb +10 -48
  38. data/lib/xamplr/persist-to-xml.rb +249 -0
  39. data/lib/xamplr/persistence.rb +44 -412
  40. data/lib/xamplr/persistence.rb.more_thread_safe +0 -13
  41. data/lib/xamplr/persistence.rb.partially_thread_safe +0 -13
  42. data/lib/xamplr/persister.rb +298 -0
  43. data/lib/xamplr/{persister → persisters}/caches.rb +0 -0
  44. data/lib/xamplr/{persister → persisters}/caching.rb +1 -1
  45. data/lib/xamplr/{persister → persisters}/filesystem.rb +4 -5
  46. data/lib/xamplr/{persister → persisters}/in-memory.rb +1 -1
  47. data/lib/xamplr/{persister → persisters}/simple.rb +0 -0
  48. data/lib/xamplr/{persister → persisters}/tokyo-cabinet.rb +53 -15
  49. data/lib/xamplr/simpleTemplate/{input-c.r4 → obsolete/input-c.r4} +0 -0
  50. data/lib/xamplr/simpleTemplate/{play.r6.txt → obsolete/play.r6.txt} +0 -0
  51. data/lib/xamplr/simpleTemplate/{play_more.r6.txt → obsolete/play_more.r6.txt} +0 -0
  52. data/lib/xamplr/simpleTemplate/{test001.r5 → obsolete/test001.r5} +0 -0
  53. data/lib/xamplr/simpleTemplate/{test002.r5 → obsolete/test002.r5} +0 -0
  54. data/lib/xamplr/simpleTemplate/{test003.r5 → obsolete/test003.r5} +0 -0
  55. data/lib/xamplr/templates/child_indexed.template +1 -1
  56. data/lib/xamplr/templates/element_classes.template +1 -1
  57. data/lib/xamplr/templates/element_data.template +0 -39
  58. data/lib/xamplr/templates/element_empty.template +0 -40
  59. data/lib/xamplr/templates/element_mixed.template +0 -41
  60. data/lib/xamplr/templates/element_simple.template +0 -40
  61. data/lib/xamplr/test-support/bench.rb +6 -26
  62. data/lib/xamplr/test-support/test.rb +1 -89
  63. data/lib/xamplr/visitor.rb +0 -778
  64. data/lib/xamplr/visitors.rb +573 -0
  65. data/lib/xamplr/xampl-generator.rb +1 -1
  66. data/lib/xamplr/xampl-hand-generated.rb +0 -85
  67. data/lib/xamplr/xampl-module.rb +36 -0
  68. data/lib/xamplr/xampl-object-internals.rb +6 -0
  69. data/lib/xamplr/xampl-object.rb +10 -341
  70. data/lib/xamplr/xampl-persisted-object.rb +122 -0
  71. data/lib/xamplr/xml-text.rb +117 -0
  72. metadata +53 -18
  73. data/lib/xamplr/persister/subversion.rb +0 -61
  74. data/lib/xamplr/rac.sh +0 -6
  75. data/lib/xamplr/rac_gen.sh +0 -1
  76. data/lib/xamplr/templates/child_indexed.template.000 +0 -87
@@ -0,0 +1,122 @@
1
+ module Xampl
2
+
3
+ module XamplPersistedObject
4
+ include XamplObject
5
+
6
+ attr_reader :persister
7
+ attr_accessor :load_needed
8
+
9
+ def persist_required
10
+ return true
11
+ end
12
+
13
+ def accessed
14
+ raise XamplIsInvalid.new(self) if invalid
15
+ # TODO -- why do I need to get rid of this line, alternatively, why
16
+ # is this next line even there? Well, because accessed is now called
17
+ # differently. But???
18
+ #raise NoActivePersister unless @persister
19
+
20
+ if @load_needed and @persister then
21
+ raise NoActivePersister.new unless @persister
22
+
23
+ if nil == Xampl.persister then
24
+ #raise UnmanagedChange.new(self)
25
+ if not @persister.syncing then
26
+ Xampl.read_only(@persister) do
27
+ Xampl.lazy_load(self)
28
+ end
29
+ else
30
+ puts "LOAD NEEDED(2): REFUSED (persister: #{@persister.name})"
31
+ puts " pid: #{self.get_the_index} #{self}"
32
+ caller(0).each { | trace | puts " #{trace}"}
33
+ end
34
+ elsif Xampl.persister != @persister then
35
+ raise MixedPersisters.new(@persister, self)
36
+ elsif Xampl.persister == @persister then
37
+ if not @persister.syncing then
38
+ Xampl.lazy_load(self)
39
+ else
40
+ puts "LOAD NEEDED(3): REFUSED (persister: #{@persister.name})"
41
+ puts " pid: #{self.get_the_index} #{self}"
42
+ caller(0).each { | trace | puts " #{trace}"}
43
+ end
44
+ else
45
+ puts "LOAD NEEDED(4): REFUSED (persister: #{@persister.name})"
46
+ puts " pid: #{self.get_the_index} #{self}"
47
+ caller(0).each { | trace | puts " #{trace}"}
48
+ end
49
+ else
50
+ puts "LOAD NEEDED(5): REFUSED (persister: #{@persister})" if @load_needed
51
+ puts " pid: #{self.get_the_index} #{self}" if @load_needed
52
+ caller(0).each { | trace | puts " #{trace}"} if @load_needed
53
+ end
54
+ end
55
+
56
+ def changed
57
+ #puts "CHANGED: is_changed #{@is_changed} xampl #{self}"
58
+ unless Xampl.persister then
59
+ raise UnmanagedChange.new(self)
60
+ end
61
+ if @persister then
62
+ if Xampl.persister != @persister then
63
+ raise UnmanagedChange.new(self)
64
+ end
65
+ if @persister.block_changes then
66
+ raise BlockedChange.new(self)
67
+ end
68
+ end
69
+ unless @is_changed then
70
+ @is_changed = true
71
+ if @persister then
72
+ @persister.has_changed self
73
+ end
74
+ end
75
+ end
76
+
77
+ def force_load
78
+ @load_needed = true
79
+ @is_changed = false
80
+ @persister.has_not_changed(self) if @persister
81
+ self.clear_non_persistent_index_attributes
82
+ methods = self.methods.grep(/init_.*_as_child/)
83
+ methods.each do |method_name|
84
+ self.send(method_name)
85
+ end
86
+ @children = []
87
+ end
88
+
89
+ def reset_contents
90
+ self.clear_non_persistent_index_attributes
91
+ self.methods.grep(/init_.*_as_child/).each do |method_name|
92
+ self.send(method_name)
93
+ end
94
+ @children = []
95
+ end
96
+
97
+ def introduce_persister(persister)
98
+ #accessed
99
+ if @persister and (@persister != persister) then
100
+ raise AlreadyKnownToPersister.new(self, persister)
101
+ end
102
+ @persister = persister
103
+ return true
104
+ end
105
+
106
+ def init_xampl_object
107
+ super
108
+ @persister = nil
109
+ @load_needed = false
110
+ if (Xampl.persister and Xampl.persister.automatic) then
111
+ Xampl.persister.introduce(self)
112
+ else
113
+ introduce_persister(nil)
114
+ end
115
+ end
116
+
117
+ def describe_yourself
118
+ nil
119
+ end
120
+ end
121
+
122
+ end
@@ -0,0 +1,117 @@
1
+ module Xampl
2
+
3
+ class XMLText
4
+ attr_accessor :namespaces, :prefix_ns_map, :ns, :first_text, :text
5
+
6
+ def initialize
7
+ @namespaces = []
8
+ @prefix_ns_map = {}
9
+ @first_text = nil
10
+ @text = nil
11
+ @ns = nil
12
+ end
13
+
14
+ def start_element(pp, depth)
15
+ @namespaces = {}
16
+ @namespaces[pp.namespace] = pp.namespace
17
+
18
+ depth += 1
19
+
20
+ if @first_text then
21
+ @text << "<" << pp.qname
22
+
23
+ pp.attributeCount.times do |i|
24
+ @text << " " << pp.attributeQName(i) << "='" << pp.attributeValue(i) << "'"
25
+
26
+ prefix = pp.attributePrefix(i)
27
+ if prefix then
28
+ @prefix_ns_map[prefix] = pp.attributeNamespace(i)
29
+ end
30
+ end
31
+ else
32
+ @first_text = "<" << pp.qname
33
+
34
+ pp.attributeCount.times do |i|
35
+ @first_text << " " << pp.attributeQName(i) << "='" << pp.attributeValue(i) << "'"
36
+
37
+ prefix = pp.attributePrefix(i)
38
+ if prefix then
39
+ @prefix_ns_map[prefix] = pp.attributeNamespace(i)
40
+ end
41
+ end
42
+ @text = ""
43
+ end
44
+
45
+ prefix = pp.prefix
46
+ if prefix then
47
+ @prefix_ns_map[prefix] = pp.namespace
48
+ end
49
+
50
+ if @ns != pp.namespace then
51
+ @text << " xmlns='" << pp.namespace << "'"
52
+ end
53
+
54
+ @text << ">"
55
+
56
+ return depth
57
+ end
58
+
59
+ def end_element(pp, depth)
60
+ depth -= 1
61
+
62
+ @text << "</"
63
+ @text << pp.prefix << ":" if pp.prefix
64
+ @text << pp.name << ">"
65
+
66
+ return depth
67
+ end
68
+
69
+ def to_s
70
+ @text
71
+ end
72
+
73
+ def to_xml(xml_printer=nil)
74
+ @text
75
+ end
76
+
77
+ def build(pp)
78
+ @namespaces = {}
79
+ @first_text = nil
80
+ @text = nil
81
+
82
+ depth = start_element(pp, 0)
83
+
84
+ while true
85
+ raise XamplException.new("unexpected end of document") if pp.endDocument?
86
+
87
+ case pp.nextEvent
88
+ when Xampl_PP::START_DOCUMENT
89
+ raise XamplException.new("unexpected start of document")
90
+ when Xampl_PP::END_DOCUMENT
91
+ raise XamplException.new("unexpected end of document")
92
+ when Xampl_PP::START_ELEMENT
93
+ depth = start_element(pp, depth)
94
+ when Xampl_PP::END_ELEMENT
95
+ depth = end_element(pp, depth)
96
+ break if depth <= 0
97
+ when Xampl_PP::TEXT, Xampl_PP::CDATA_SECTION, Xampl_PP::ENTITY_REF
98
+ @text << pp.text
99
+ #when Xampl_PP::IGNORABLE_WHITESPACE
100
+ #when Xampl_PP::PROCESSING_INSTRUCTION
101
+ #when Xampl_PP::COMMENT
102
+ #when Xampl_PP::DOCTYPE
103
+ end
104
+ end
105
+
106
+ @namespaces = @namespaces.keys
107
+
108
+ @prefix_ns_map.sort.each do |prefix, ns|
109
+ @first_text << " xmlns:" << prefix << "='" << ns << "'"
110
+ end
111
+ @first_text << @text
112
+ @text = @first_text
113
+ @first_text = nil
114
+ end
115
+ end
116
+
117
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hutch-xamplr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Hutchison
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-27 00:00:00 -07:00
12
+ date: 2009-05-04 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,16 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: libxml-ruby
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.3
34
+ version:
25
35
  description:
26
36
  email: hutch@recursive.ca
27
37
  executables: []
@@ -46,6 +56,9 @@ files:
46
56
  - examples/random-people-shared-addresses/query.rb
47
57
  - examples/random-people-shared-addresses/query2.rb
48
58
  - examples/random-people-shared-addresses/random-names.csv
59
+ - examples/random-people-shared-addresses/results.write.BASELINE
60
+ - examples/random-people-shared-addresses/results.write.NEW_ATTR_ENCODING
61
+ - examples/random-people-shared-addresses/settings.rb
49
62
  - examples/random-people-shared-addresses/what-to-query-on.rb
50
63
  - examples/random-people-shared-addresses/xampl-gen.rb
51
64
  - examples/random-people-shared-addresses/xml/people.xml
@@ -57,9 +70,19 @@ files:
57
70
  - examples/random-people/query2.rb
58
71
  - examples/random-people/random-names.csv
59
72
  - examples/random-people/rawtc.rb
73
+ - examples/random-people/settings.rb
60
74
  - examples/random-people/what-to-query-on.rb
61
75
  - examples/random-people/xampl-gen.rb
62
76
  - examples/random-people/xml/people.xml
77
+ - examples/read-testing/Makefile
78
+ - examples/read-testing/load.rb
79
+ - examples/read-testing/read.rb
80
+ - examples/read-testing/results.read.BASELINE
81
+ - examples/read-testing/results.read.FAST
82
+ - examples/read-testing/rrr.rb
83
+ - examples/read-testing/settings.rb
84
+ - examples/read-testing/xampl-gen.rb
85
+ - examples/read-testing/xml/text.xml
63
86
  - examples/tokyo-cabinet-experimental/expt-query.rb
64
87
  - examples/tokyo-cabinet-experimental/expt-query2.rb
65
88
  - examples/tokyo-cabinet-experimental/expt-query3.rb
@@ -73,6 +96,8 @@ files:
73
96
  - lib/xamplr.rb
74
97
  - lib/xamplr/README-POSSIBLE-PROBLEMS
75
98
  - lib/xamplr/TODO
99
+ - lib/xamplr/exceptions.rb
100
+ - lib/xamplr/from-xml-orig.rb
76
101
  - lib/xamplr/from-xml.rb
77
102
  - lib/xamplr/gen-elements.xml
78
103
  - lib/xamplr/gen.elements.xml
@@ -86,36 +111,34 @@ files:
86
111
  - lib/xamplr/my.gen.elements.xml
87
112
  - lib/xamplr/notifications.rb
88
113
  - lib/xamplr/obsolete/fsdb.rb
114
+ - lib/xamplr/persist-to-xml.rb
89
115
  - lib/xamplr/persistence.rb
90
116
  - lib/xamplr/persistence.rb.more_thread_safe
91
117
  - lib/xamplr/persistence.rb.partially_thread_safe
92
- - lib/xamplr/persister/caches.rb
93
- - lib/xamplr/persister/caching.rb
94
- - lib/xamplr/persister/filesystem.rb
95
- - lib/xamplr/persister/in-memory.rb
96
- - lib/xamplr/persister/simple.rb
97
- - lib/xamplr/persister/subversion.rb
98
- - lib/xamplr/persister/tokyo-cabinet.rb
99
- - lib/xamplr/rac.sh
100
- - lib/xamplr/rac_gen.sh
118
+ - lib/xamplr/persister.rb
119
+ - lib/xamplr/persisters/caches.rb
120
+ - lib/xamplr/persisters/caching.rb
121
+ - lib/xamplr/persisters/filesystem.rb
122
+ - lib/xamplr/persisters/in-memory.rb
123
+ - lib/xamplr/persisters/simple.rb
124
+ - lib/xamplr/persisters/tokyo-cabinet.rb
101
125
  - lib/xamplr/simpleTemplate/danger.rx
102
- - lib/xamplr/simpleTemplate/input-c.r4
126
+ - lib/xamplr/simpleTemplate/obsolete/input-c.r4
127
+ - lib/xamplr/simpleTemplate/obsolete/play.r6.txt
128
+ - lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt
129
+ - lib/xamplr/simpleTemplate/obsolete/test001.r5
130
+ - lib/xamplr/simpleTemplate/obsolete/test002.r5
131
+ - lib/xamplr/simpleTemplate/obsolete/test003.r5
103
132
  - lib/xamplr/simpleTemplate/old/r6.000.rb
104
133
  - lib/xamplr/simpleTemplate/old/r6.001.rb
105
134
  - lib/xamplr/simpleTemplate/play.r6
106
- - lib/xamplr/simpleTemplate/play.r6.txt
107
135
  - lib/xamplr/simpleTemplate/play_more.r6
108
- - lib/xamplr/simpleTemplate/play_more.r6.txt
109
136
  - lib/xamplr/simpleTemplate/play_noblanks.r6
110
137
  - lib/xamplr/simpleTemplate/playq.r6
111
138
  - lib/xamplr/simpleTemplate/r6.rb
112
139
  - lib/xamplr/simpleTemplate/simple-template.rb
113
- - lib/xamplr/simpleTemplate/test001.r5
114
- - lib/xamplr/simpleTemplate/test002.r5
115
- - lib/xamplr/simpleTemplate/test003.r5
116
140
  - lib/xamplr/templates/child.template
117
141
  - lib/xamplr/templates/child_indexed.template
118
- - lib/xamplr/templates/child_indexed.template.000
119
142
  - lib/xamplr/templates/child_modules.template
120
143
  - lib/xamplr/templates/element_classes.template
121
144
  - lib/xamplr/templates/element_data.template
@@ -145,9 +168,14 @@ files:
145
168
  - lib/xamplr/to-xml.rb
146
169
  - lib/xamplr/version.rb
147
170
  - lib/xamplr/visitor.rb
171
+ - lib/xamplr/visitors.rb
148
172
  - lib/xamplr/xampl-generator.rb
149
173
  - lib/xamplr/xampl-hand-generated.rb
174
+ - lib/xamplr/xampl-module.rb
175
+ - lib/xamplr/xampl-object-internals.rb
150
176
  - lib/xamplr/xampl-object.rb
177
+ - lib/xamplr/xampl-persisted-object.rb
178
+ - lib/xamplr/xml-text.rb
151
179
  - lib/xamplr/xml/document.xml
152
180
  - lib/xamplr/xml/elements.xml
153
181
  - lib/xamplr/xml/elements000.xml
@@ -191,6 +219,7 @@ test_files:
191
219
  - examples/random-people/query.rb
192
220
  - examples/random-people/query2.rb
193
221
  - examples/random-people/rawtc.rb
222
+ - examples/random-people/settings.rb
194
223
  - examples/random-people/what-to-query-on.rb
195
224
  - examples/random-people/xampl-gen.rb
196
225
  - examples/random-people-shared-addresses/batch-load-users.rb
@@ -200,8 +229,14 @@ test_files:
200
229
  - examples/random-people-shared-addresses/people.rb
201
230
  - examples/random-people-shared-addresses/query.rb
202
231
  - examples/random-people-shared-addresses/query2.rb
232
+ - examples/random-people-shared-addresses/settings.rb
203
233
  - examples/random-people-shared-addresses/what-to-query-on.rb
204
234
  - examples/random-people-shared-addresses/xampl-gen.rb
235
+ - examples/read-testing/load.rb
236
+ - examples/read-testing/read.rb
237
+ - examples/read-testing/rrr.rb
238
+ - examples/read-testing/settings.rb
239
+ - examples/read-testing/xampl-gen.rb
205
240
  - examples/tokyo-cabinet-experimental/expt-query.rb
206
241
  - examples/tokyo-cabinet-experimental/expt-query2.rb
207
242
  - examples/tokyo-cabinet-experimental/expt-query3.rb
@@ -1,61 +0,0 @@
1
- module Xampl
2
-
3
- require 'xamplr/version'
4
-
5
- require "fileutils"
6
- require "xamplr/persister/caching"
7
-
8
- class SubversionPersister < AbstractCachingPersister
9
-
10
- def initialize(name=nil, format=nil, root=File.join(".", "repo"))
11
- super(root, name, format)
12
- end
13
-
14
- def SubversionPersister.kind
15
- :subversion
16
- end
17
-
18
- def kind
19
- SubversionPersister.kind
20
- end
21
-
22
- def version(stream)
23
- catch(:refuse_to_version) do
24
- Version.new(@repo_name, @repo_root).make(stream)
25
- end
26
- end
27
-
28
-
29
- def write(xampl)
30
- #raise XamplException.new(:no_index_so_no_persist) unless xampl.get_the_index or xampl.ignore_when_no_index
31
- raise XamplException.new("no_index_so_no_persist [#{xampl.class.name}]") unless xampl.get_the_index or xampl.ignore_when_no_index
32
- return unless xampl.get_the_index
33
-
34
- place = File.join(@root_dir, xampl.class.name.split("::"))
35
-
36
- FileUtils.mkdir_p(place) unless File.exist?(place)
37
-
38
- place = File.join(place, xampl.get_the_index)
39
-
40
- representation = represent(xampl)
41
- if representation then
42
- File.open(place, "w"){ | out |
43
- out.puts representation
44
- }
45
- @write_count = @write_count + 1
46
- end
47
- xampl.changes_accepted
48
- return true
49
- end
50
-
51
- def read_representation(klass, pid)
52
- place = File.join(@root_dir, klass.name.split("::"), pid)
53
-
54
- return nil unless File.exist?(place)
55
- return File.read(place)
56
- end
57
- end
58
-
59
- Xampl.register_persister_kind(SubversionPersister)
60
- end
61
-