xamplr 1.3.15 → 1.9.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 (163) hide show
  1. data/.gitignore +1 -0
  2. data/COPYING +160 -656
  3. data/LICENSE +1 -1
  4. data/README.md +33 -0
  5. data/Rakefile +2 -2
  6. data/VERSION.yml +2 -2
  7. data/lib/xamplr.rb +1 -0
  8. data/lib/xamplr/iterator.rb +123 -0
  9. data/lib/xamplr/xml-text.rb +5 -5
  10. data/xamplr.gemspec +9 -204
  11. metadata +13 -203
  12. data/README.rdoc +0 -46
  13. data/README.rdoc.orig +0 -118
  14. data/bin/xampl-gen +0 -17
  15. data/docs/intro/.gitignore +0 -1
  16. data/docs/intro/example1/example1.rb +0 -6
  17. data/docs/intro/example1/xml/hello.xml +0 -1
  18. data/docs/intro/example2/example2.rb +0 -38
  19. data/docs/intro/example2/project-generator.rb +0 -22
  20. data/docs/intro/example2/xml/hello.xml +0 -2
  21. data/docs/intro/example3/example3.rb +0 -30
  22. data/docs/intro/example3/example3a.rb +0 -16
  23. data/docs/intro/example3/generated.png +0 -0
  24. data/docs/intro/example3/grab-yuml.rb +0 -10
  25. data/docs/intro/example3/greeter.rb +0 -15
  26. data/docs/intro/example3/greeting.rb +0 -9
  27. data/docs/intro/example3/project-generator.rb +0 -25
  28. data/docs/intro/example3/xml/greeter.xml +0 -6
  29. data/docs/intro/example4/example4.rb +0 -27
  30. data/docs/intro/example4/example4a.rb +0 -19
  31. data/docs/intro/example4/grab-yuml.rb +0 -10
  32. data/docs/intro/example4/greeter.rb +0 -15
  33. data/docs/intro/example4/greeting.rb +0 -9
  34. data/docs/intro/example4/project-generator.rb +0 -25
  35. data/docs/intro/example4/xml/greeter.xml +0 -6
  36. data/docs/intro/grab-yuml.rb +0 -10
  37. data/docs/intro/project-generator.rb +0 -51
  38. data/docs/intro/xampl.lyx +0 -1494
  39. data/docs/intro/xampl.pdf +0 -0
  40. data/examples/employees/final-xampl/xampl-gen.rb +0 -38
  41. data/examples/employees/final-xampl/xml/ddd-final-xampl.xml +0 -86
  42. data/examples/employees/final/xampl-gen.rb +0 -38
  43. data/examples/employees/final/xml/ddd-final.xml +0 -86
  44. data/examples/employees/first/xampl-gen.rb +0 -38
  45. data/examples/employees/first/xml/ddd-first.xml +0 -48
  46. data/examples/employees/twist/twist.graphml +0 -333
  47. data/examples/employees/twist/xampl-gen.rb +0 -38
  48. data/examples/employees/twist/xml/twist.xml +0 -90
  49. data/examples/employees/xamplr-twist.xml +0 -2
  50. data/examples/employees/yuml-diagrams/DDD-final-approach.graphml +0 -393
  51. data/examples/employees/yuml-diagrams/DDD-final-xampl-approach.graphml +0 -265
  52. data/examples/employees/yuml-diagrams/DDD-ideal-final-approach.graphml +0 -357
  53. data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
  54. data/examples/employees/yuml-diagrams/ddd-final.yuml +0 -8
  55. data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
  56. data/examples/employees/yuml-diagrams/ddd-first.yuml +0 -7
  57. data/examples/employees/yuml-diagrams/final-yed.png +0 -0
  58. data/examples/employees/yuml-diagrams/first-yed.png +0 -0
  59. data/examples/employees/yuml-diagrams/twist.png +0 -0
  60. data/examples/employees/yuml-diagrams/twist.yuml +0 -12
  61. data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
  62. data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
  63. data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
  64. data/examples/employees/yuml-diagrams/yuml-simplified.txt +0 -19
  65. data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +0 -53
  66. data/examples/employees/yuml-diagrams/yuml.txt +0 -27
  67. data/examples/hobbies/Makefile +0 -5
  68. data/examples/hobbies/hobbies.rb +0 -193
  69. data/examples/hobbies/project-generator.rb +0 -25
  70. data/examples/hobbies/xampl-gen.rb +0 -38
  71. data/examples/hobbies/xml/hobby.xml +0 -3
  72. data/examples/hobbies/xml/people.xml +0 -5
  73. data/examples/random-people-shared-addresses/.gitignore +0 -2
  74. data/examples/random-people-shared-addresses/Makefile +0 -15
  75. data/examples/random-people-shared-addresses/batch-load-users-profiled.rb +0 -91
  76. data/examples/random-people-shared-addresses/batch-load-users-safe.rb +0 -81
  77. data/examples/random-people-shared-addresses/batch-load-users.rb +0 -79
  78. data/examples/random-people-shared-addresses/find-mentions.rb +0 -47
  79. data/examples/random-people-shared-addresses/find-people-by-address.rb +0 -104
  80. data/examples/random-people-shared-addresses/optimise.rb +0 -16
  81. data/examples/random-people-shared-addresses/people.rb +0 -35
  82. data/examples/random-people-shared-addresses/query.rb +0 -75
  83. data/examples/random-people-shared-addresses/query2.rb +0 -73
  84. data/examples/random-people-shared-addresses/random-names.csv +0 -10000
  85. data/examples/random-people-shared-addresses/settings.rb +0 -3
  86. data/examples/random-people-shared-addresses/what-to-query-on.rb +0 -82
  87. data/examples/random-people-shared-addresses/xampl-gen.rb +0 -38
  88. data/examples/random-people-shared-addresses/xml/people.xml +0 -14
  89. data/examples/random-people/.gitignore +0 -2
  90. data/examples/random-people/Makefile +0 -20
  91. data/examples/random-people/batch-load-users.rb +0 -61
  92. data/examples/random-people/optimise.rb +0 -16
  93. data/examples/random-people/people.rb +0 -22
  94. data/examples/random-people/query.rb +0 -73
  95. data/examples/random-people/query2.rb +0 -73
  96. data/examples/random-people/random-names.csv +0 -10000
  97. data/examples/random-people/rawtc.rb +0 -91
  98. data/examples/random-people/settings.rb +0 -3
  99. data/examples/random-people/what-to-query-on.rb +0 -80
  100. data/examples/random-people/xampl-gen.rb +0 -39
  101. data/examples/random-people/xml/people.xml +0 -11
  102. data/examples/read-testing/.gitignore +0 -2
  103. data/examples/read-testing/Makefile +0 -10
  104. data/examples/read-testing/load.rb +0 -65
  105. data/examples/read-testing/read.rb +0 -51
  106. data/examples/read-testing/rrr.rb +0 -88
  107. data/examples/read-testing/settings.rb +0 -2
  108. data/examples/read-testing/xampl-gen.rb +0 -38
  109. data/examples/read-testing/xml/text.xml +0 -8
  110. data/examples/tokyo-cabinet-experimental/.gitignore +0 -2
  111. data/examples/tokyo-cabinet-experimental/expt-query.rb +0 -42
  112. data/examples/tokyo-cabinet-experimental/expt-query2.rb +0 -42
  113. data/examples/tokyo-cabinet-experimental/expt-query3.rb +0 -41
  114. data/examples/tokyo-cabinet-experimental/expt-reader.rb +0 -32
  115. data/examples/tokyo-cabinet-experimental/expt.rb +0 -61
  116. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +0 -38
  117. data/examples/tokyo-cabinet-experimental/xml/tcx.xml +0 -6
  118. data/examples/write-testing/README +0 -4
  119. data/examples/write-testing/RESULTS.home +0 -33
  120. data/examples/write-testing/RESULTS.raconteur +0 -33
  121. data/examples/write-testing/write-speed-test.rb +0 -40
  122. data/lib/xampl-generator.rb +0 -3
  123. data/lib/xamplr-generator.rb +0 -9
  124. data/lib/xamplr/gen-elements.xml +0 -6230
  125. data/lib/xamplr/gen.elements.xml +0 -108
  126. data/lib/xamplr/generate-elements.rb +0 -15
  127. data/lib/xamplr/generator.rb +0 -5
  128. data/lib/xamplr/graphml-out.rb +0 -451
  129. data/lib/xamplr/handwritten/example.rb +0 -698
  130. data/lib/xamplr/handwritten/hand-example.rb +0 -533
  131. data/lib/xamplr/handwritten/test-handwritten.rb +0 -873
  132. data/lib/xamplr/my.gen.elements.xml +0 -461
  133. data/lib/xamplr/obsolete/fsdb.rb +0 -62
  134. data/lib/xamplr/simpleTemplate/danger.rx +0 -4
  135. data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +0 -35
  136. data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +0 -12
  137. data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +0 -20
  138. data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +0 -8
  139. data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +0 -13
  140. data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +0 -37
  141. data/lib/xamplr/simpleTemplate/old/r6.000.rb +0 -122
  142. data/lib/xamplr/simpleTemplate/old/r6.001.rb +0 -145
  143. data/lib/xamplr/simpleTemplate/play.r6 +0 -12
  144. data/lib/xamplr/simpleTemplate/play_more.r6 +0 -20
  145. data/lib/xamplr/simpleTemplate/play_noblanks.r6 +0 -21
  146. data/lib/xamplr/simpleTemplate/playq.r6 +0 -16
  147. data/lib/xamplr/simpleTemplate/r6.rb +0 -87
  148. data/lib/xamplr/simpleTemplate/simple-template.rb +0 -75
  149. data/lib/xamplr/templates/.cvsignore +0 -3
  150. data/lib/xamplr/templates/child.template +0 -47
  151. data/lib/xamplr/templates/child_indexed.template +0 -89
  152. data/lib/xamplr/templates/child_modules.template +0 -5
  153. data/lib/xamplr/templates/element_classes.template +0 -11
  154. data/lib/xamplr/templates/element_data.template +0 -283
  155. data/lib/xamplr/templates/element_empty.template +0 -277
  156. data/lib/xamplr/templates/element_mixed.template +0 -278
  157. data/lib/xamplr/templates/element_simple.template +0 -277
  158. data/lib/xamplr/templates/package.template +0 -38
  159. data/lib/xamplr/xampl-cl-gen.rb +0 -89
  160. data/lib/xamplr/xampl-generator.rb +0 -569
  161. data/lib/xamplr/xampl-hand-generated.rb +0 -1535
  162. data/lib/xamplr/yEd-sample.graphml +0 -300
  163. data/lib/xamplr/yuml-out.rb +0 -129
@@ -1,91 +0,0 @@
1
- require 'fastercsv'
2
- require 'xampl_generated_code/RandomPeople'
3
- require 'people'
4
- require 'settings'
5
-
6
- require 'ruby-prof'
7
-
8
- module RandomPeople
9
-
10
- class BatchLoadUsersProfiled
11
-
12
- attr_accessor :random_names, :created_addresses, :shared_addresses
13
-
14
- def load_names(iter)
15
- inner_start = Time.now
16
- commit_start = 0
17
- base = (1 + iter) * self.random_names.size
18
-
19
- Xampl.transaction("random-people") do
20
-
21
- random_names.each_with_index do | row, i |
22
- person_pid = "person-#{ base + i }"
23
- person = Person.new(person_pid)
24
-
25
- person.given_name = row[0]
26
- person.surname = row[1]
27
- person.email = row[6]
28
- person.phone = row[7]
29
-
30
- addresses = Address.find_by_query do | q |
31
- q.add_condition('street-address', :equals, row[2])
32
- q.add_condition('postal-code', :equals, row[5])
33
- end
34
-
35
- address = addresses.first
36
- if address then
37
- person << address
38
- self.shared_addresses += 1
39
- else
40
- address = person.new_address("address-#{ person_pid }")
41
- address.street_address = row[2]
42
- address.city = row[3]
43
- address.state = row[4]
44
- address.postal_code = row[5]
45
- self.created_addresses += 1
46
- end
47
-
48
- end
49
- puts "transaction ending..."
50
- commit_start = Time.now
51
- end
52
- done_at = Time.now
53
- puts "iter: #{ iter } in total: #{ done_at - inner_start }, insert: #{ commit_start - inner_start}, commit: #{done_at - commit_start}"
54
- end
55
-
56
- def run
57
- start_at = Time.now
58
-
59
- self.random_names = FasterCSV.read("random-names.csv")
60
-
61
- parsed_at = Time.now
62
-
63
- base = 0
64
- self.created_addresses = 0
65
- self.shared_addresses = 0
66
-
67
- 2.times do | iter |
68
- if 1 == iter then
69
- RubyProf.start
70
-
71
- load_names(iter)
72
-
73
- result = RubyProf.stop
74
- printer = RubyProf::FlatPrinter.new(result)
75
- printer.print(STDOUT, 0)
76
- else
77
- load_names(iter)
78
- end
79
- end
80
-
81
- processed_at = Time.now
82
-
83
- puts "parsed in #{ parsed_at - start_at }, processed in: #{ processed_at - parsed_at }"
84
- puts " created addresses: #{ created_addresses }, shared: #{ shared_addresses }"
85
- end
86
-
87
- end
88
-
89
- BatchLoadUsersProfiled.new.run
90
-
91
- end
@@ -1,81 +0,0 @@
1
- require 'fastercsv'
2
- require 'xampl_generated_code/RandomPeople'
3
- require 'people'
4
- require 'settings'
5
-
6
- module RandomPeople
7
-
8
- class BatchLoadUsers
9
-
10
- attr_accessor :random_names, :created_addresses, :shared_addresses
11
-
12
- def load_names(iter)
13
- inner_start = Time.now
14
- commit_total = 0
15
- commit_start = 0
16
- base = (1 + iter) * self.random_names.size
17
-
18
- random_names.each_with_index do | row, i |
19
- Xampl.transaction("random-people") do
20
- person_pid = "person-#{ base + i }"
21
- person = Person.new(person_pid)
22
-
23
- person.given_name = row[0]
24
- person.surname = row[1]
25
- person.email = row[6]
26
- person.phone = row[7]
27
-
28
- addresses = Address.find_by_query do | q |
29
- q.add_condition('street-address', :equals, row[2])
30
- q.add_condition('postal-code', :equals, row[5])
31
- end
32
-
33
- address = addresses.first
34
- if address then
35
- person << address
36
- self.shared_addresses += 1
37
- else
38
- address = person.new_address("address-#{ person_pid }")
39
- address.street_address = row[2]
40
- address.city = row[3]
41
- address.state = row[4]
42
- address.postal_code = row[5]
43
- self.created_addresses += 1
44
- end
45
-
46
- commit_start = Time.now
47
- end
48
- commit_total += (Time.now - commit_start)
49
- puts "total: #{ commit_total }, iter: #{ i } --> #{ i / commit_total }/s" if 0 == (i % 1000)
50
- end
51
- done_at = Time.now
52
- total_time = done_at - inner_start
53
- puts "iter: #{ iter } in total: #{ total_time }, insert: #{ total_time - commit_total }, commit: #{ commit_total }"
54
- end
55
-
56
- def run
57
- start_at = Time.now
58
-
59
- self.random_names = FasterCSV.read("random-names.csv")
60
-
61
- parsed_at = Time.now
62
-
63
- base = 0
64
- self.created_addresses = 0
65
- self.shared_addresses = 0
66
-
67
- 10.times do | iter |
68
- load_names(iter)
69
- end
70
-
71
- processed_at = Time.now
72
-
73
- puts "parsed in #{ parsed_at - start_at }, processed in: #{ processed_at - parsed_at }"
74
- puts " created addresses: #{ created_addresses }, shared: #{ shared_addresses }"
75
- end
76
-
77
- end
78
-
79
- BatchLoadUsers.new.run
80
-
81
- end
@@ -1,79 +0,0 @@
1
- require 'fastercsv'
2
- require 'xampl_generated_code/RandomPeople'
3
- require 'people'
4
- require 'settings'
5
-
6
- module RandomPeople
7
-
8
- class BatchLoadUsers
9
-
10
- attr_accessor :random_names, :created_addresses, :shared_addresses
11
-
12
- def load_names(iter)
13
- inner_start = Time.now
14
- commit_start = 0
15
- base = (1 + iter) * self.random_names.size
16
-
17
- Xampl.transaction("random-people") do
18
-
19
- random_names.each_with_index do | row, i |
20
- person_pid = "person-#{ base + i }"
21
- person = Person.new(person_pid)
22
-
23
- person.given_name = row[0]
24
- person.surname = row[1]
25
- person.email = row[6]
26
- person.phone = row[7]
27
-
28
- addresses = Address.find_by_query do | q |
29
- q.add_condition('street-address', :equals, row[2])
30
- q.add_condition('postal-code', :equals, row[5])
31
- end
32
-
33
- address = addresses.first
34
- if address then
35
- person << address
36
- self.shared_addresses += 1
37
- else
38
- address = person.new_address("address-#{ person_pid }")
39
- address.street_address = row[2]
40
- address.city = row[3]
41
- address.state = row[4]
42
- address.postal_code = row[5]
43
- self.created_addresses += 1
44
- end
45
-
46
- end
47
- puts "transaction ending..."
48
- commit_start = Time.now
49
- end
50
- done_at = Time.now
51
- puts "iter: #{ iter } in total: #{ done_at - inner_start }, insert: #{ commit_start - inner_start}, commit: #{done_at - commit_start}"
52
- end
53
-
54
- def run
55
- start_at = Time.now
56
-
57
- self.random_names = FasterCSV.read("random-names.csv")
58
-
59
- parsed_at = Time.now
60
-
61
- base = 0
62
- self.created_addresses = 0
63
- self.shared_addresses = 0
64
-
65
- 10.times do | iter |
66
- load_names(iter)
67
- end
68
-
69
- processed_at = Time.now
70
-
71
- puts "parsed in #{ parsed_at - start_at }, processed in: #{ processed_at - parsed_at }"
72
- puts " created addresses: #{ created_addresses }, shared: #{ shared_addresses }"
73
- end
74
-
75
- end
76
-
77
- BatchLoadUsers.new.run
78
-
79
- end
@@ -1,47 +0,0 @@
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
@@ -1,104 +0,0 @@
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
@@ -1,16 +0,0 @@
1
- $LOAD_PATH.unshift("xampl_generated_code")
2
-
3
- require 'RandomPeople'
4
- require 'people'
5
- require 'settings'
6
-
7
- module RandomPeople
8
-
9
- start_opt = Time.now
10
- Xampl.transaction("random-people") do
11
- Xampl.optimise(:indexes_only => true)
12
- # Xampl.optimise
13
- end
14
- puts "optimised in #{ Time.now - start_opt}"
15
-
16
- end
@@ -1,35 +0,0 @@
1
-
2
- require 'xampl_generated_code/RandomPeople'
3
-
4
- module RandomPeople
5
-
6
- class Person
7
-
8
- Xampl::TokyoCabinetPersister.add_lexical_indexs(%w{ surname city state email })
9
-
10
- def describe_yourself
11
- {
12
- 'surname' => self.surname,
13
- 'city' => self.address.first.city,
14
- 'state' => self.address.first.state,
15
- 'email' => self.email
16
- }
17
- end
18
- end
19
-
20
- class Address
21
-
22
- Xampl::TokyoCabinetPersister.add_lexical_indexs(%w{ street-address postal-code city state })
23
-
24
- def describe_yourself
25
- {
26
- 'street-address' => self.street_address,
27
- 'postal-code' => self.postal_code,
28
- 'city' => self.city,
29
- 'state' => self.state
30
- }
31
- end
32
- end
33
-
34
- end
35
-