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,91 @@
1
+
2
+ require 'fileutils'
3
+ require 'fastercsv'
4
+ require 'tokyocabinet'
5
+
6
+ module RawTokyoCabinet
7
+ include TokyoCabinet
8
+
9
+ def RawTokyoCabinet.note_errors(msg="TokyoCabinet Error:: %s\n")
10
+ result = yield
11
+
12
+ rmsg = nil
13
+ unless result then
14
+ rmsg = sprintf(msg, @tc_db.errmsg(@tc_db.ecode))
15
+ STDERR.printf(rmsg)
16
+ caller(0).each do |trace|
17
+ STDERR.puts(trace)
18
+ end
19
+ end
20
+ return rmsg
21
+ end
22
+
23
+ start_at = Time.now
24
+
25
+ arr_of_arrs = FasterCSV.read("random-names.csv")
26
+
27
+ parsed_at = Time.now
28
+
29
+ @tc_db = TDB.new
30
+ RawTokyoCabinet.note_errors("TC:: tuning error: %s\n") do
31
+ @tc_db.tune(-1, -1, -1, TDB::TDEFLATE)
32
+ end
33
+
34
+ FileUtils.mkdir_p('repo/raw') unless File.exist?('repo/raw')
35
+
36
+ 10.times do | iter |
37
+ RawTokyoCabinet.note_errors("TC:: open error: %s\n") do
38
+ @tc_db.open('repo/raw/repo.tct', TDB::OWRITER | TDB::OCREAT | TDB::OLCKNB ) #TDB::OTSYNC slows it down by almost 50 times
39
+ end
40
+
41
+ # Don't care if there are errors (in fact, if the index exists a failure is the expected thing)
42
+ %w{ surname city state email }.each do | index_name |
43
+ @tc_db.setindex(index_name, TDB::ITLEXICAL | TDB::ITKEEP)
44
+ end
45
+
46
+ $tc_time = 0
47
+ record_count = @tc_db.rnum()
48
+
49
+ inner_start = Time.now
50
+
51
+ arr_of_arrs.each_with_index do | row, i |
52
+
53
+ # indexes = {
54
+ # 'surname' => row[1],
55
+ # 'city' => row[3],
56
+ # 'state' => row[4],
57
+ # 'email' => row[6]
58
+ # }
59
+
60
+ data = {
61
+ 'given_name' => row[0],
62
+ 'surname' => row[1],
63
+ 'street_address' => row[2],
64
+ 'city' => row[3],
65
+ 'state' => row[4],
66
+ 'postal_code' => row[5],
67
+ 'email' => row[6],
68
+ 'phone' => row[7]
69
+ }
70
+
71
+ RawTokyoCabinet.note_errors("TC:: write error: %s\n") do
72
+ start = Time.now
73
+ @tc_db.put("person-#{ record_count + i }", data)
74
+ $tc_time += Time.now - start
75
+ end
76
+
77
+ end
78
+
79
+ final_count = @tc_db.rnum
80
+
81
+ RawTokyoCabinet.note_errors("TC:: close error: %s\n") do
82
+ @tc_db.close
83
+ end
84
+
85
+ processed_at = Time.now
86
+
87
+ p "parsed in #{ parsed_at - start_at }, processed in: #{ processed_at - parsed_at }"
88
+ p "starting at #{ record_count } records, now with: #{ final_count }"
89
+ end
90
+
91
+ end
@@ -0,0 +1,3 @@
1
+ Xampl.set_default_persister_kind(:tokyo_cabinet)
2
+ Xampl.set_default_persister_format(:xml_format)
3
+ #Xampl.set_default_persister_format(:ruby_format)
@@ -0,0 +1,80 @@
1
+ $LOAD_PATH.unshift("xampl_generated_code")
2
+
3
+ require 'set'
4
+ require 'fastercsv'
5
+ require 'RandomPeople'
6
+ require 'people'
7
+ require 'settings'
8
+
9
+ module RandomPeople
10
+ arr_of_arrs = FasterCSV.read("random-names.csv")
11
+
12
+ surnames = Set.new
13
+ cities = Set.new
14
+ states = Set.new
15
+ email_domains = Set.new
16
+
17
+ arr_of_arrs.each do | row |
18
+ surname = row[1]
19
+ city = row[3]
20
+ state = row[4]
21
+
22
+ surnames << surname
23
+ cities << city
24
+ states << state
25
+
26
+ email = row[6]
27
+ domain = email.split("@")
28
+ if 2 == domain.size then
29
+ email_domains << domain[1]
30
+ end
31
+
32
+ end
33
+
34
+ puts "surnames: #{ surnames.size }"
35
+ puts "cities: #{ cities.size }"
36
+ puts "states: #{ states.size }"
37
+ puts "email_domains: #{ email_domains.size }"
38
+
39
+ puts "STATES:"
40
+ puts states.to_a.sort.inspect
41
+
42
+ puts "EMAIL DOMAINS:"
43
+ puts email_domains.to_a.sort.inspect
44
+
45
+ #GivenName,Surname,StreetAddress,City,State,ZipCode,EmailAddress,TelephoneNumber
46
+ #<people pid='' xmlns="http://xampl.com/people">
47
+ # <person pid=''
48
+ # given-name=''
49
+ # surname=''
50
+ # street-address=''
51
+ # city=''
52
+ # state=''
53
+ # postal-code=''
54
+ # email=''
55
+ # phone=''/>
56
+ #</people>
57
+
58
+ # Xampl.transaction("random-people") do
59
+ #
60
+ # people = People.new('people')
61
+ #
62
+ # arr_of_arrs.each_with_index do | row, i |
63
+ # person = people.new_person("person-#{ i }")
64
+ # person.given_name = row[0]
65
+ # person.surname = row[1]
66
+ # person.street_address = row[2]
67
+ # person.city = row[3]
68
+ # person.state = row[4]
69
+ # person.postal_code = row[5]
70
+ # person.email = row[6]
71
+ # person.phone = row[7]
72
+ # end
73
+ # end
74
+ #
75
+ # processed_at = Time.now
76
+ #
77
+ # p counts
78
+ # p "parsed in #{ parsed_at - start_at }, counted in: #{ counted_at - parsed_at }, processed in: #{ processed_at - counted_at }"
79
+
80
+ end
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby -w -I..
2
+
3
+ if $0 == __FILE__ then
4
+
5
+ class File
6
+ def File.sjoin(*args)
7
+ File.join(args.select{ | o | o })
8
+ end
9
+ end
10
+
11
+ require 'xamplr-generator'
12
+
13
+ include XamplGenerator
14
+ include Xampl
15
+
16
+ Xampl.transaction("setup", :in_memory) do
17
+ directory = File.sjoin(".", "xampl_generated_code")
18
+
19
+ options = Xampl.make(Options) do |options|
20
+ options.new_index_attribute("pid").persisted = true
21
+ options.new_index_attribute("id")
22
+
23
+ options.resolve("http://xampl.com/people", "RandomPeople", "p")
24
+ end
25
+
26
+ filenames = Dir.glob("./xml/**/*.xml")
27
+
28
+ generator = Generator.new
29
+ generator.go(:options => options,
30
+ :filenames => filenames,
31
+ :directory => directory)
32
+
33
+ #puts generator.print_elements("./generated-elements.xml")
34
+ exit!
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ <people pid='' xmlns="http://xampl.com/people">
2
+ <person pid=''
3
+ given-name=''
4
+ surname=''
5
+ street-address=''
6
+ city=''
7
+ state=''
8
+ postal-code=''
9
+ email=''
10
+ phone=''/>
11
+ </people>
@@ -0,0 +1,10 @@
1
+
2
+ nope:
3
+
4
+ read:
5
+ time ruby read.rb
6
+
7
+ load:
8
+ rm -rf repo
9
+ time ruby load.rb
10
+
@@ -0,0 +1,65 @@
1
+ $LOAD_PATH.unshift("xampl_generated_code")
2
+
3
+ require 'rubygems'
4
+ require 'Perf'
5
+ require 'settings'
6
+
7
+ module Perf
8
+
9
+ count = 0
10
+ root = nil
11
+ $total_lines = 0
12
+
13
+ srand( 12345 )
14
+
15
+ def Perf.make_text(count)
16
+ lines = 1 + rand(10)
17
+ $total_lines += lines
18
+
19
+ s = ""
20
+ lines.times do | i |
21
+ s << "this is a line for count: #{ count }, #{ i } of #{ lines } with scary stuff: <>&'\" ..."
22
+ end
23
+ return s
24
+ end
25
+
26
+
27
+ #<root pid=''
28
+ # xmlns="http://xampl.com/performance">
29
+ # <text pid=''
30
+ # size=''
31
+ # stuff=''>
32
+ # actual text
33
+ # </text>
34
+ #</root>
35
+
36
+ start_at = Time.now
37
+
38
+ 1.times do | outer |
39
+ Xampl.transaction("random-people") do
40
+ unless root then
41
+ root = Root.new('root')
42
+ end
43
+
44
+ 10000.times do | iter |
45
+
46
+ count += 1
47
+
48
+ text = root.new_text("text-#{ count }")
49
+ text.stuff = "---<>&\"'---"
50
+ text.content = make_text(count)
51
+
52
+ # puts "#{File.basename(__FILE__)}:#{__LINE__} #{ text.pp_xml }"
53
+
54
+ end
55
+ end
56
+
57
+ puts "transaction #{ outer } ending... #{ Time.now - start_at } seconds"
58
+ # puts "#{File.basename(__FILE__)}:#{__LINE__} #{ root.pp_xml }"
59
+ end
60
+
61
+ done_at = Time.now
62
+
63
+ p "loaded #{ count }, total lines: #{ $total_lines }, in #{ done_at - start_at }"
64
+
65
+ end
@@ -0,0 +1,51 @@
1
+ require 'rubygems'
2
+ require 'xampl_generated_code/Perf'
3
+ require 'settings'
4
+
5
+ module Perf
6
+
7
+ count = 0
8
+ root = nil
9
+ $total_lines = 0
10
+
11
+ #<root pid=''
12
+ # xmlns="http://xampl.com/performance">
13
+ # <text pid=''
14
+ # size=''
15
+ # stuff=''>
16
+ # actual text
17
+ # </text>
18
+ #</root>
19
+
20
+ start_at = Time.now
21
+
22
+ Xampl.transaction("random-people") do
23
+ root = Root['root']
24
+ end
25
+ root_at = Time.now
26
+ puts "#{File.basename(__FILE__)}:#{__LINE__} Root read in #{ root_at - start_at}"
27
+
28
+ root.text.each do | text |
29
+ count += 1
30
+ end
31
+
32
+ #puts root.pp_xml
33
+
34
+ looped_at = Time.now
35
+ puts "#{File.basename(__FILE__)}:#{__LINE__} looped over #{ count } text in #{ looped_at - root_at } NO LOADING"
36
+
37
+ count = 0
38
+ total_lines = 0
39
+
40
+ root.text.each do | text |
41
+ content = text.content
42
+ # puts "#{File.basename(__FILE__)}:#{__LINE__} content: [[#{ content }]]"
43
+ total_lines += content.length() if content
44
+ count += 1
45
+ end
46
+
47
+ done_at = Time.now
48
+
49
+ puts "loaded #{ count }, total lines: #{ total_lines }, in #{ done_at - looped_at } seconds, total time: #{ done_at - start_at } seconds"
50
+
51
+ end
@@ -0,0 +1,87 @@
1
+ require 'rubygems'
2
+ require 'libxml'
3
+
4
+ xml = %Q{
5
+ <root pid='aaaaa'
6
+ xmlns:x="http://xampl.com/extra"
7
+ xmlns="http://xampl.com/performance">
8
+ <text pid='bbbb'
9
+ x:size='ccccc'
10
+ stuff='ddddd'>
11
+ actual text &quot; well?
12
+ actual text &quot; well?
13
+ actual text &quot; well?
14
+ actual text &quot; well?
15
+ xxxxx <![CDATA[ <>"'& ]]> xxxxx
16
+ </text>
17
+ <nothing/>
18
+ <x:blob v='blob value'/>
19
+ </root>
20
+ }
21
+
22
+ reader = LibXML::XML::Reader.string(xml,
23
+ :options => LibXML::XML::Parser::Options::NOENT |
24
+ LibXML::XML::Parser::Options::NONET |
25
+ LibXML::XML::Parser::Options::NOCDATA |
26
+ LibXML::XML::Parser::Options::DTDATTR |
27
+ LibXML::XML::Parser::Options::NSCLEAN |
28
+ LibXML::XML::Parser::Options::COMPACT)
29
+
30
+ while reader.read do
31
+ # puts reader.node_type
32
+ # puts "line: #{ reader.line_number }, column: #{ reader.column_number }"
33
+
34
+ case reader.node_type
35
+ # when LibXML::XML::Reader::TYPE_ATTRIBUTE
36
+ # puts "attribute"
37
+ when LibXML::XML::Reader::TYPE_DOCUMENT
38
+ puts "DOCUMENT"
39
+ when LibXML::XML::Reader::TYPE_ELEMENT
40
+ attribute_count = reader.attribute_count
41
+ puts "element #{ reader.local_name }, ns: #{ reader.namespace_uri }, #attributes: #{ attribute_count }, depth: #{ reader.depth }"
42
+ if reader.has_attributes? then
43
+ reader.move_to_first_attribute
44
+ attribute_count.times do | i |
45
+ next if reader.namespace_declaration?
46
+ puts " attr[#{ i }]:: lname: #{ reader.local_name }, ns: #{ reader.namespace_uri } ---> #{ reader.value }"
47
+ reader.move_to_next_attribute
48
+ end
49
+ end
50
+
51
+ when LibXML::XML::Reader::TYPE_END_ELEMENT
52
+ puts "END ELEMENT"
53
+ when LibXML::XML::Reader::TYPE_TEXT
54
+ puts "TEXT [[#{ reader.read_string }]]"
55
+ when LibXML::XML::Reader::TYPE_CDATA
56
+ puts "CDATA [[#{ reader.read_string }]]"
57
+ when LibXML::XML::Reader::TYPE_SIGNIFICANT_WHITESPACE
58
+ puts "SIGNIFICANT white space [[#{ reader.read_string }]]"
59
+ when LibXML::XML::Reader::TYPE_ENTITY_REFERENCE
60
+ puts "entity ref"
61
+ when LibXML::XML::Reader::TYPE_WHITESPACE
62
+ puts "whitespace"
63
+ when LibXML::XML::Reader::TYPE_PROCESSING_INSTRUCTION
64
+ puts "processing instruction"
65
+ when LibXML::XML::Reader::TYPE_COMMENT
66
+ puts "comment"
67
+ when LibXML::XML::Reader::TYPE_DOCUMENT_TYPE
68
+ puts "doc type"
69
+
70
+ when LibXML::XML::Reader::TYPE_XML_DECLARATION
71
+ puts "xml decl"
72
+ when LibXML::XML::Reader::TYPE_NONE
73
+ puts "NONE!!"
74
+ when LibXML::XML::Reader::TYPE_NOTATION
75
+ puts "notifiation"
76
+ when LibXML::XML::Reader::TYPE_DOCUMENT_FRAGMENT
77
+ puts "doc fragment"
78
+ when LibXML::XML::Reader::TYPE_ENTITY
79
+ puts "entity"
80
+ when LibXML::XML::Reader::TYPE_END_ENTITY
81
+ puts "
82
+ end entity"
83
+ else
84
+ puts "UNKNOWN: #{reader.node_type}"
85
+ end
86
+
87
+ end