xamplr 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/CHANGES.txt ADDED
@@ -0,0 +1,13 @@
1
+
2
+ 2009-04-16 (version 1.0.2)
3
+
4
+ -- if tag starts with a number, prefix it with an 'x' (e.g. 0abc --> x0abc).
5
+ The problem arose if a tag like <0abc> was used in an xml file
6
+ used to generate xampl code. In that case, the 'attribute
7
+ names' associated with the tag would be based on '_abc'. The
8
+ change makes the attribute names be based on x0abc. The choice
9
+ of 'x' is arbitrary, but we can't have a leading digit, and
10
+ the '_' could fail to distinguish certain elements (e.g. 0abc
11
+ and 1abc would both be based on '_abc').
12
+
13
+
data/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ Copyright (c) 2009 Bob Hutchison
2
+
3
+ see COPYING
data/README.rdoc ADDED
@@ -0,0 +1,26 @@
1
+ = xamplr
2
+
3
+ xamplr is a set of software tools that supports development of ruby applications.
4
+
5
+ Features:
6
+ - supports Domain Driven Design in Ruby
7
+ - persistence ignornace
8
+ - clusters, entities, 'regular' objects, and repositories (corresponding approximately to DDD's aggregates, entities, value objects, and repositories)
9
+ - different peristence techniques including filesystem (XML format) and Tokyo Cabinet
10
+ - transaction support
11
+ - querying
12
+ - fast development, fast execution
13
+ - has been in use in commercial software since 2004, a Java version has been in use since 1998.
14
+
15
+ Anti-Features:
16
+ - absymal lack of documentation. If you are brave and willing to wade through (old) blog entries, you might try looking at:
17
+
18
+ http://recursive.ca/hutch/category/software/tools-i-use/xampl/
19
+
20
+ License: For the moment it is AGPLv3 (see COPYING). An alternative license
21
+ may be negotiated, contact me. In the near future this license will be
22
+ relaxed.
23
+
24
+ == Copyright
25
+
26
+ Copyright (c) 2009 Bob Hutchison. See LICENSE and COPYING for details.
data/README.rdoc.orig ADDED
@@ -0,0 +1,118 @@
1
+ = xamplr
2
+
3
+ xamplr is a tool for developing Ruby programs, the ruby implementation
4
+ of xampl. It facilitates the 'M' part of an MVC architecture. It
5
+ is meant to be very easy to use, supportive of idiomatic Ruby usage,
6
+ and mostly invisible.
7
+
8
+ With it's current lack of documentation it will be hard to get going
9
+ with xampl. I am working on documentation that will be appearing
10
+ over the next little while, in the meantime if you are willing to
11
+ wade through a blog, you might try looking at:
12
+
13
+ http://recursive.ca/hutch/category/software/tools-i-use/xampl/
14
+
15
+ Features:
16
+ - pure Ruby, no libraries required except those shipped with Ruby 1.8.2
17
+ - uses XML to declaratively describe a class structure
18
+ - uses a collection of example XML documents, no schema are required
19
+ - supports arbitrary object graphs, not just XML-like trees
20
+ - Ruby idiomatic facilities to navigate the object structures (e.g. named
21
+ arrays, hash, iterator support, uses blocks, etc.)
22
+ - support empty, simple (text content only), data (no or limited text
23
+ content, but with arbitrary element content), and mixed content (where
24
+ text and element content can be intermingled)
25
+ - maintains 'document order' of objects
26
+ - keeps track of parents
27
+ - can compare two clusters for equality (limited, but will be improved)
28
+ - maps XML namespaces to Ruby modules (with handy defaults) and you can
29
+ suggest preferred namespace prefixes for XML output
30
+ - converts XML element and attributes names to valid (and predictable)
31
+ Ruby names
32
+ - includes an XML pull parser (very fast)
33
+ - code generation is template driven, so the adventurous can change what
34
+ is generated
35
+ - includes a simple but powerful and fast templating engine
36
+ - includes a simple-minded but effective hash-like class that maintains
37
+ insertion order (fast insertion, lookup, and iteration, but at the
38
+ expense of delete)
39
+ - naming conventions are used when generating code (but these conventions
40
+ can be changed)
41
+ - additions to the XML will very rarely break existing code, and so
42
+ incremental development of functionality is supported
43
+ - generated code is readable and debuggable
44
+ - a command line tool to generate the code, or you can generate at runtime
45
+ - XML binding to the classes (i.e. parsing an XML file will produce an
46
+ object graph)
47
+ - can augment existing classes
48
+ - programmer adds functionality by opening the class or module, no worries
49
+ about the code generator overwriting your changes
50
+ - object structures can generate XML output (and there is an XML pretty
51
+ printer used for emphasising human readable XML output)
52
+ - easy to use persistence mechanism
53
+ - persistence is in terms of clusters of objects, the cluster is updated
54
+ all at once
55
+ - lazy loading of persisted clusters
56
+ - LRU cache (of clusters)
57
+ - the changed clusters are available for inspection
58
+ - XML, Ruby, and YAML persistence mechanism (purposely no Marshal support)
59
+ - persist to memory, or hard drive (optional persistence to an FSDB)
60
+ - sync and rollback (even with memory persistence); this is a weak form
61
+ of transaction support
62
+ - 'automatic' and 'manual' modes of persistence ('automatic' means that
63
+ any xampl cluster created while a persister is active will be
64
+ automatically managed by that persister, manual means that you have
65
+ to introduce the xampl cluster to the persister)
66
+ - fast alternative to persistence that does not support rollback
67
+ - xampl objects can hold arbitrary attribute values through the
68
+ persistence 'cycle' if using Ruby or YAML persistence (even xampl
69
+ object); with XML you won't loose anything but all attributes will
70
+ be strings after restoration.
71
+ - multiple persisters, possibly with differing persistence mechanisms,
72
+ are supported
73
+ - dead easy single user applications (e.g. desktop apps, CGI), almost as
74
+ easy for multiple user applications and webapps
75
+ - you can add your own persister types (and formats for that matter)
76
+ - general purpose Visitor pattern facility, with pre and post visit methods,
77
+ cycle and revisit detection and handling
78
+ - lots of hooks
79
+ - many unit tests, all execute without warning when run with the -w Ruby flag
80
+ - there are some examples, and the beginnings of a tutorial in the form of
81
+ a series of examples that lead you through the core parts of xampl
82
+
83
+ Features that are coming soon:
84
+ - many more hooks
85
+ - more sophisticated augmentation of existing classes
86
+ - indexing and querying of the persisted object structures
87
+ - more persisters (e.g. sqlite)
88
+ - real transactions
89
+ - a better comparison function (that deals with cyclic structures at all, and
90
+ better with non-tree acyclic structures)
91
+
92
+ Known Bugs or Potential Problems or Suspected Problems
93
+ - generated attribute names may conflict with Ruby keywords and this is not
94
+ a nice thing to witness (this is easy to fix, but I don't want to do this
95
+ until the next release at the earliest)
96
+ - I don't know if this will work on Windows -- I tried, but I don't have a
97
+ windows machine to test this with -- there might be some pathname stuff
98
+ assuming unix (but I hope not)
99
+ - some of the code is unnecessarily ugly (e.g. some of the visitor internals)
100
+ - there are no Ruby docs (but I promise... really)
101
+ - comparison of cyclic structures will crash
102
+
103
+ License: AGPLv3 (see COPYING). An alternative license may be negotiated, contact me.
104
+
105
+ While the Ruby version of xampl is brand new it is based on a Java
106
+ tool that I've been developing since 1998 and in its fifth generation.
107
+ There are many features in the Java version that are not available in
108
+ this library, but that is either just a matter of time, or they will
109
+ never be needed because Ruby programs don't need the help.
110
+
111
+ The Java version of the tool has been used to write a number of large
112
+ webapps, and a few smaller desktop applications, and even an applet.
113
+
114
+ There is a Common Lisp/CLOS version coming.
115
+
116
+ == Copyright
117
+
118
+ Copyright (c) 2009 Bob Hutchison. See LICENSE and COPYING for details.
data/Rakefile ADDED
@@ -0,0 +1,85 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "xamplr"
8
+ gem.summary = %Q{xamplr is the ruby version of xampl}
9
+ gem.email = "hutch@recursive.ca"
10
+ gem.homepage = "http://github.com/hutch/xamplr"
11
+ gem.authors = ["Bob Hutchison"]
12
+ gem.rubyforge_project = 'xampl'
13
+
14
+ gem.add_dependency('hutch-xamplr-pp')
15
+ gem.add_dependency('libxml-ruby', ">=1.1.3")
16
+
17
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
+ end
19
+ rescue LoadError
20
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
21
+ end
22
+
23
+ require 'rake/testtask'
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.libs << 'lib' << 'test'
26
+ test.pattern = 'test/**/*_test.rb'
27
+ test.verbose = true
28
+ end
29
+
30
+ begin
31
+ require 'rcov/rcovtask'
32
+ Rcov::RcovTask.new do |test|
33
+ test.libs << 'test'
34
+ test.pattern = 'test/**/*_test.rb'
35
+ test.verbose = true
36
+ end
37
+ rescue LoadError
38
+ task :rcov do
39
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
40
+ end
41
+ end
42
+
43
+
44
+ task :default => :test
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ if File.exist?('VERSION.yml')
49
+ config = YAML.load(File.read('VERSION.yml'))
50
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
51
+ else
52
+ version = ""
53
+ end
54
+
55
+ rdoc.rdoc_dir = 'rdoc'
56
+ rdoc.title = "xamplr #{version}"
57
+ rdoc.rdoc_files.include('README*')
58
+ rdoc.rdoc_files.include('lib/**/*.rb')
59
+ end
60
+
61
+ begin
62
+ require 'rake/contrib/sshpublisher'
63
+ namespace :rubyforge do
64
+
65
+ desc "Release gem and RDoc documentation to RubyForge"
66
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
67
+
68
+ namespace :release do
69
+ desc "Publish RDoc to RubyForge."
70
+ task :docs => [:rdoc] do
71
+ config = YAML.load(
72
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
73
+ )
74
+
75
+ host = "#{config['username']}@rubyforge.org"
76
+ remote_dir = "/var/www/gforge-projects/xampl"
77
+ local_dir = 'rdoc'
78
+
79
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
80
+ end
81
+ end
82
+ end
83
+ rescue LoadError
84
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
85
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 0
3
+ :major: 1
4
+ :minor: 2
@@ -0,0 +1,16 @@
1
+
2
+ nope:
3
+
4
+ raw:
5
+ rm -rf repo
6
+ time ruby rawtc.rb
7
+ #time ruby rawtc.rb
8
+ #time ruby rawtc.rb
9
+ #time ruby rawtc.rb
10
+ #time ruby rawtc.rb
11
+ #time ruby rawtc.rb
12
+
13
+ batch:
14
+ rm -rf repo
15
+ time ruby batch-load-users.rb
16
+
@@ -0,0 +1,83 @@
1
+ require 'fastercsv'
2
+ require 'xampl_generated_code/RandomPeople'
3
+ require 'people'
4
+ require 'settings'
5
+
6
+ module RandomPeople
7
+
8
+ start_at = Time.now
9
+
10
+ arr_of_arrs = FasterCSV.read("random-names.csv")
11
+
12
+ parsed_at = Time.now
13
+
14
+ #GivenName,Surname,StreetAddress,City,State,ZipCode,EmailAddress,TelephoneNumber
15
+
16
+ #<people pid=''
17
+ # xmlns="http://xampl.com/people">
18
+ # <person pid=''
19
+ # given-name=''
20
+ # surname=''
21
+ # email=''
22
+ # phone=''>
23
+ # <address pid=''
24
+ # street-address=''
25
+ # city=''
26
+ # state=''
27
+ # postal-code=''/>
28
+ # </person>
29
+ #</people>
30
+
31
+ base = 0
32
+
33
+ created_addresses = 0
34
+ shared_addresses = 0
35
+
36
+ 10.times do | iter |
37
+ inner_start = Time.now
38
+
39
+ Xampl.transaction("random-people") do
40
+
41
+ base += arr_of_arrs.size
42
+
43
+ arr_of_arrs.each_with_index do | row, i |
44
+ person_pid = "person-#{ base + i }"
45
+ person = Person.new(person_pid)
46
+
47
+ person.given_name = row[0]
48
+ person.surname = row[1]
49
+ person.email = row[6]
50
+ person.phone = row[7]
51
+
52
+ addresses = Xampl.find_xampl do | q |
53
+ q.add_condition('class', :equals, Address.name)
54
+
55
+ q.add_condition('street-address', :equals, row[2])
56
+ q.add_condition('postal-code', :equals, row[5])
57
+ end
58
+
59
+ address = addresses.first
60
+ if address then
61
+ person << address
62
+ shared_addresses += 1
63
+ else
64
+ address = person.new_address("address-#{ person_pid }")
65
+ address.street_address = row[2]
66
+ address.city = row[3]
67
+ address.state = row[4]
68
+ address.postal_code = row[5]
69
+ created_addresses += 1
70
+ end
71
+
72
+ end
73
+ puts "transaction ending..."
74
+ end
75
+ puts "iter: #{ iter } in #{ Time.now - inner_start }"
76
+ end
77
+
78
+ processed_at = Time.now
79
+
80
+ p "parsed in #{ parsed_at - start_at }, processed in: #{ processed_at - parsed_at }"
81
+ puts " created addresses: #{ created_addresses }, shared: #{ shared_addresses }"
82
+
83
+ end
@@ -0,0 +1,47 @@
1
+
2
+ require 'xampl_generated_code/RandomPeople'
3
+ require 'people'
4
+ require 'settings'
5
+
6
+ module RandomPeople
7
+
8
+ #<people pid=''
9
+ # xmlns="http://xampl.com/people">
10
+ # <person pid=''
11
+ # given-name=''
12
+ # surname=''
13
+ # email=''
14
+ # phone=''>
15
+ # <address pid=''
16
+ # street-address=''
17
+ # city=''
18
+ # state=''
19
+ # postal-code=''/>
20
+ # </person>
21
+ #</people>
22
+
23
+ 10.times do
24
+
25
+ people = Xampl.transaction("random-people") do
26
+ Person.find_by_query do | q |
27
+ q.add_condition('city', :equals, 'TORONTO')
28
+ q.add_condition('email', :ends_with, 'dodgit.com')
29
+
30
+ q.order_by('surname', :strasc)
31
+ end
32
+ end
33
+
34
+ first_person = people.first
35
+ address = first_person.address.first
36
+
37
+ start_at = Time.now
38
+
39
+ people_at_address = Xampl.transaction("random-people") do
40
+ Xampl.find_mentions_of(address)
41
+ end
42
+
43
+ done = Time.now
44
+ puts "found #{ people_at_address.size } people at that address in: #{ done - start_at }, #{ people_at_address.size / (done - start_at) }/s"
45
+ # people_at_address.each { | person | puts person.pp_xml }
46
+ end
47
+ end
@@ -0,0 +1,104 @@
1
+
2
+ require 'xampl_generated_code/RandomPeople'
3
+ require 'people'
4
+ require 'settings'
5
+
6
+ module RandomPeople
7
+
8
+ #<people pid=''
9
+ # xmlns="http://xampl.com/people">
10
+ # <person pid=''
11
+ # given-name=''
12
+ # surname=''
13
+ # email=''
14
+ # phone=''>
15
+ # <address pid=''
16
+ # street-address=''
17
+ # city=''
18
+ # state=''
19
+ # postal-code=''/>
20
+ # </person>
21
+ #</people>
22
+
23
+ times = [0, 0]
24
+ counts = [0, 0]
25
+
26
+ 10.times do | trial |
27
+ found1 = []
28
+ found2 = []
29
+ found3 = []
30
+
31
+ #<p:person email='Edelmira.K.Abshire@dodgit.com'
32
+ # given-name='Edelmira'
33
+ # phone='416-279-8804'
34
+ # pid='person-29944'
35
+ # surname='Abshire'
36
+ # xmlns:p='http://xampl.com/people'>
37
+ # <p:address city='TORONTO'
38
+ # pid='person-19944'
39
+ # postal_code='M1P 4W2'
40
+ # state='ON'
41
+ # street_address='4194 Borough Drive'/></p:person>
42
+
43
+
44
+ all_people = nil
45
+ people_inspected = 0
46
+ start_at = Time.now
47
+
48
+ people = Xampl.transaction("random-people") do
49
+ addresses = Address.find_by_query do | q |
50
+ q.add_condition('street-address', :equals, '4194 Borough Drive')
51
+ q.add_condition('postal-code', :equals, 'M1P 4W2')
52
+ end
53
+
54
+ all_people = Set.new
55
+ people_inspected = 0
56
+
57
+ addresses.each do | address |
58
+ people = Person.find_by_query do | q |
59
+ # TODO -- want to be able to find people by the address directly, e.g. address.find_by_citation/find_by_mention & find_by_reference
60
+ q.add_condition('city', :equals, address.city)
61
+ q.add_condition('state', :equals, address.state)
62
+ end
63
+
64
+ people_inspected += people.size
65
+
66
+ people.each do | person |
67
+ all_people << person if person.address.first == address
68
+ end
69
+ end
70
+ end
71
+
72
+ done_at = Time.now
73
+ puts "done in: #{ done_at - start_at }, #{ people_inspected } people inspected, #{ all_people.size } identified"
74
+ times[0] += (done_at - start_at) if 0 < trial
75
+ counts[0] += 1 if 0 < trial
76
+
77
+ start_at = Time.now
78
+
79
+ people = Xampl.transaction("random-people") do
80
+ addresses = Address.find_by_query do | q |
81
+ q.add_condition('street-address', :equals, '4194 Borough Drive')
82
+ q.add_condition('postal-code', :equals, 'M1P 4W2')
83
+ end
84
+
85
+ all_people = Set.new
86
+ people_inspected = 0
87
+
88
+ addresses.each do | address |
89
+ people = Xampl.find_mentions_of(address)
90
+
91
+ people_inspected += people.size
92
+ all_people.merge(people)
93
+ end
94
+ end
95
+
96
+ done_at = Time.now
97
+ puts "done in: #{ done_at - start_at }, #{ people_inspected } people inspected, #{ all_people.size } identified"
98
+ times[1] += (done_at - start_at) if 0 < trial
99
+ counts[1] += 1 if 0 < trial
100
+ end
101
+
102
+ puts "0) total time: #{ times[0] }, count: #{ counts[0] }, average/s: #{ counts[0]/times[0]}"
103
+ puts "1) total time: #{ times[1] }, count: #{ counts[1] }, average/s: #{ counts[1]/times[1]}"
104
+ end