xamplr 1.2.0 → 1.3.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. data/.document +5 -0
  2. data/.gitignore +12 -0
  3. data/CHANGES.txt +37 -0
  4. data/COPYING +661 -0
  5. data/Makefile +13 -0
  6. data/README.rdoc +24 -4
  7. data/Rakefile +2 -2
  8. data/VERSION.yml +3 -2
  9. data/bin/xampl-gen +17 -0
  10. data/docs/intro/.gitignore +1 -0
  11. data/docs/intro/example1/example1.rb +6 -0
  12. data/docs/intro/example1/xml/hello.xml +1 -0
  13. data/docs/intro/example2/example2.rb +38 -0
  14. data/docs/intro/example2/project-generator.rb +22 -0
  15. data/docs/intro/example2/xml/hello.xml +2 -0
  16. data/docs/intro/example3/example3.rb +30 -0
  17. data/docs/intro/example3/example3a.rb +16 -0
  18. data/docs/intro/example3/generated.png +0 -0
  19. data/docs/intro/example3/grab-yuml.rb +10 -0
  20. data/docs/intro/example3/greeter.rb +15 -0
  21. data/docs/intro/example3/greeting.rb +9 -0
  22. data/docs/intro/example3/project-generator.rb +25 -0
  23. data/docs/intro/example3/xml/greeter.xml +6 -0
  24. data/docs/intro/example4/example4.rb +27 -0
  25. data/docs/intro/example4/example4a.rb +19 -0
  26. data/docs/intro/example4/grab-yuml.rb +10 -0
  27. data/docs/intro/example4/greeter.rb +15 -0
  28. data/docs/intro/example4/greeting.rb +9 -0
  29. data/docs/intro/example4/project-generator.rb +25 -0
  30. data/docs/intro/example4/xml/greeter.xml +6 -0
  31. data/docs/intro/grab-yuml.rb +10 -0
  32. data/docs/intro/project-generator.rb +51 -0
  33. data/docs/intro/xampl.lyx +1494 -0
  34. data/docs/intro/xampl.pdf +0 -0
  35. data/examples/employees/final/xampl-gen.rb +38 -0
  36. data/examples/employees/final/xml/ddd-final.xml +86 -0
  37. data/examples/employees/final-xampl/xampl-gen.rb +38 -0
  38. data/examples/employees/final-xampl/xml/ddd-final-xampl.xml +86 -0
  39. data/examples/employees/first/xampl-gen.rb +38 -0
  40. data/examples/employees/first/xml/ddd-first.xml +48 -0
  41. data/examples/employees/twist/twist.graphml +333 -0
  42. data/examples/employees/twist/xampl-gen.rb +38 -0
  43. data/examples/employees/twist/xml/twist.xml +90 -0
  44. data/examples/employees/xamplr-twist.xml +2 -0
  45. data/examples/employees/yuml-diagrams/DDD-final-approach.graphml +393 -0
  46. data/examples/employees/yuml-diagrams/DDD-final-xampl-approach.graphml +265 -0
  47. data/examples/employees/yuml-diagrams/DDD-ideal-final-approach.graphml +357 -0
  48. data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
  49. data/examples/employees/yuml-diagrams/ddd-final.yuml +8 -0
  50. data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
  51. data/examples/employees/yuml-diagrams/ddd-first.yuml +7 -0
  52. data/examples/employees/yuml-diagrams/final-yed.png +0 -0
  53. data/examples/employees/yuml-diagrams/first-yed.png +0 -0
  54. data/examples/employees/yuml-diagrams/twist.png +0 -0
  55. data/examples/employees/yuml-diagrams/twist.yuml +12 -0
  56. data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
  57. data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
  58. data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
  59. data/examples/employees/yuml-diagrams/yuml-simplified.txt +19 -0
  60. data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +53 -0
  61. data/examples/employees/yuml-diagrams/yuml.txt +27 -0
  62. data/examples/hobbies/Makefile +5 -0
  63. data/examples/hobbies/hobbies.rb +193 -0
  64. data/examples/hobbies/project-generator.rb +25 -0
  65. data/examples/hobbies/xampl-gen.rb +38 -0
  66. data/examples/hobbies/xml/hobby.xml +3 -0
  67. data/examples/hobbies/xml/people.xml +5 -0
  68. data/examples/random-people/.gitignore +2 -0
  69. data/examples/random-people/Makefile +5 -1
  70. data/examples/random-people/xampl-gen.rb +5 -2
  71. data/examples/random-people-shared-addresses/.gitignore +2 -0
  72. data/examples/random-people-shared-addresses/Makefile +8 -9
  73. data/examples/random-people-shared-addresses/batch-load-users-profiled.rb +91 -0
  74. data/examples/random-people-shared-addresses/batch-load-users-safe.rb +81 -0
  75. data/examples/random-people-shared-addresses/batch-load-users.rb +59 -63
  76. data/examples/random-people-shared-addresses/xampl-gen.rb +2 -0
  77. data/examples/read-testing/.gitignore +2 -0
  78. data/examples/read-testing/rrr.rb +2 -1
  79. data/examples/read-testing/xampl-gen.rb +2 -0
  80. data/examples/tokyo-cabinet-experimental/.gitignore +2 -0
  81. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +2 -0
  82. data/examples/write-testing/README +4 -0
  83. data/examples/write-testing/RESULTS.home +33 -0
  84. data/examples/write-testing/RESULTS.raconteur +33 -0
  85. data/examples/write-testing/write-speed-test.rb +40 -0
  86. data/lib/xamplr/.cvsignore +1 -0
  87. data/lib/xamplr/TODO +2 -1
  88. data/lib/xamplr/exceptions.rb +24 -1
  89. data/lib/xamplr/from-xml.rb +13 -5
  90. data/lib/xamplr/graphml-out.rb +6 -25
  91. data/lib/xamplr/indexed-array.rb +10 -2
  92. data/lib/xamplr/persist-to-xml.rb +6 -7
  93. data/lib/xamplr/persistence.rb +132 -48
  94. data/lib/xamplr/persister.rb +48 -25
  95. data/lib/xamplr/persisters/filesystem.rb +8 -2
  96. data/lib/xamplr/persisters/tokyo-cabinet.rb +243 -63
  97. data/lib/xamplr/persisters/tokyo-cabinet.rb.1-DB +694 -0
  98. data/lib/xamplr/persisters/tokyo-cabinet.rb.N-DB +692 -0
  99. data/lib/xamplr/persisters/tokyo-cabinet.rb.NICE-TRY +807 -0
  100. data/lib/xamplr/templates/.cvsignore +3 -0
  101. data/lib/xamplr/templates/child_indexed.template +6 -6
  102. data/lib/xamplr/templates/element_data.template +2 -1
  103. data/lib/xamplr/templates/element_empty.template +2 -10
  104. data/lib/xamplr/templates/element_mixed.template +2 -1
  105. data/lib/xamplr/templates/element_simple.template +2 -1
  106. data/lib/xamplr/templates/package.template +13 -1
  107. data/lib/xamplr/visitor.rb +7 -6
  108. data/lib/xamplr/visitors.rb +2 -1
  109. data/lib/xamplr/xampl-cl-gen.rb +89 -0
  110. data/lib/xamplr/xampl-generator.rb +86 -50
  111. data/lib/xamplr/xampl-object.rb +51 -0
  112. data/lib/xamplr/xampl-persisted-object.rb +13 -4
  113. data/lib/xamplr/yuml-out.rb +129 -0
  114. data/lib/xamplr-generator.rb +0 -1
  115. data/lib/xamplr.rb +18 -18
  116. data/regression/tc-indexes-crossing-pid-boundaries/Makefile +14 -0
  117. data/regression/tc-indexes-crossing-pid-boundaries/bad-idea.rb +40 -0
  118. data/regression/tc-indexes-crossing-pid-boundaries/fail-badly.rb +17 -0
  119. data/regression/tc-indexes-crossing-pid-boundaries/fail.rb +11 -0
  120. data/regression/tc-indexes-crossing-pid-boundaries/fucking-bad-idea.rb +44 -0
  121. data/regression/tc-indexes-crossing-pid-boundaries/setup.rb +15 -0
  122. data/regression/tc-indexes-crossing-pid-boundaries/xml/bad-idea.xml +4 -0
  123. data/regression/tightly-nested-mutual-mentions/Makefile +14 -0
  124. data/regression/tightly-nested-mutual-mentions/build.rb +31 -0
  125. data/regression/tightly-nested-mutual-mentions/load.rb +21 -0
  126. data/regression/tightly-nested-mutual-mentions/repo-keep.tgz +0 -0
  127. data/regression/tightly-nested-mutual-mentions/setup.rb +8 -0
  128. data/regression/tightly-nested-mutual-mentions/xampl-gen.rb +36 -0
  129. data/regression/tightly-nested-mutual-mentions/xml/stuff.xml +7 -0
  130. data/xamplr.gemspec +322 -0
  131. metadata +116 -13
  132. data/test/test_helper.rb +0 -10
  133. data/test/xamplr_test.rb +0 -7
Binary file
@@ -0,0 +1,38 @@
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
+ $LOAD_PATH.unshift('../../lib/')
12
+
13
+ require 'xamplr-generator'
14
+
15
+ include XamplGenerator
16
+ include Xampl
17
+
18
+ Xampl.transaction("setup", :in_memory) do
19
+ directory = File.sjoin(".", "xampl_generated_code")
20
+
21
+ options = Xampl.make(Options) do |options|
22
+ options.new_index_attribute("pid").persisted = true
23
+ options.new_index_attribute("id")
24
+
25
+ options.resolve("http://example.com/employees", "Employees", "emp")
26
+ end
27
+
28
+ filenames = Dir.glob("./xml/**/*.xml")
29
+
30
+ generator = Generator.new
31
+ generator.go(:options => options,
32
+ :filenames => filenames,
33
+ :directory => directory)
34
+
35
+ puts generator.print_elements("./generated-elements.xml")
36
+ exit!
37
+ end
38
+ end
@@ -0,0 +1,86 @@
1
+ <!--
2
+ [RetirementPlan]^[DefinedContribution],
3
+ [RetirementPlan]^[DefinedBenefit],
4
+ [Payroll]^[HourlyPayroll],
5
+ [Payroll]^[SalariedPayroll],
6
+ [EmployeeType]->*[RetirementPlan],
7
+ [EmployeeType]->*[Payroll],
8
+ [Employee]*->[EmployeeType],
9
+ [Department]-*[Employee]
10
+ -->
11
+ <company pid=''
12
+ xmlns="http://example.com/employees">
13
+
14
+ <hourly-payroll pid='singleton'>
15
+ <payrole/>
16
+ </hourly-payroll>
17
+ <salaried-payroll pid='singleton'>
18
+ <payrole/>
19
+ </salaried-payroll>
20
+
21
+ <defined-contribution pid="singleton">
22
+ <retirement-plan/>
23
+ </defined-contribution>
24
+ <defined-benefit pid="singleton">
25
+ <retirement-plan/>
26
+ </defined-benefit>
27
+
28
+ <employee-type pid=''
29
+ title='janitor'>
30
+ <hourly-payroll pid='singleton'/>
31
+ <defined-contribution pid="singleton"/>
32
+ </employee-type>
33
+ <employee-type pid=''
34
+ title='receptionist'>
35
+ <hourly-payroll pid='singleton'/>
36
+ <defined-contribution pid="singleton"/>
37
+ </employee-type>
38
+ <employee-type pid=''
39
+ title='office-admin'>
40
+ <hourly-payroll pid='singleton'/>
41
+ <defined-benefit pid="singleton"/>
42
+ </employee-type>
43
+ <employee-type pid=''
44
+ title='engineer'>
45
+ <salaried-payroll pid='singleton'/>
46
+ <defined-benefit pid="singleton"/>
47
+ </employee-type>
48
+ <employee-type pid=''
49
+ title='manager'>
50
+ <salaried-payroll pid='singleton'/>
51
+ <defined-benefit pid="singleton"/>
52
+ </employee-type>
53
+
54
+
55
+ <department pid=''
56
+ name='widget design'>
57
+ <employee pid=''
58
+ name='tom'>
59
+ <employee-type pid=''
60
+ title='janitor'/>
61
+ </employee>
62
+ <employee pid=''
63
+ name='mary'
64
+ title='receptionist'>
65
+ <employee-type pid=''
66
+ title='receptionist'/>
67
+ </employee>
68
+ <employee pid=''
69
+ name='bob'
70
+ title='office-admin'>
71
+ <employee-type pid=''
72
+ title='office-admin'/>
73
+ </employee>
74
+
75
+ <employee pid=''
76
+ name='jack'>
77
+ <employee-type pid=''
78
+ title='engineer'/>
79
+ </employee>
80
+ <employee pid=''
81
+ name='jill'>
82
+ <employee-type pid=''
83
+ title='manager'/>
84
+ </employee>
85
+ </department>
86
+ </company>
@@ -0,0 +1,38 @@
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
+ $LOAD_PATH.unshift('../../lib/')
12
+
13
+ require 'xamplr-generator'
14
+
15
+ include XamplGenerator
16
+ include Xampl
17
+
18
+ Xampl.transaction("setup", :in_memory) do
19
+ directory = File.sjoin(".", "xampl_generated_code")
20
+
21
+ options = Xampl.make(Options) do |options|
22
+ options.new_index_attribute("pid").persisted = true
23
+ options.new_index_attribute("id")
24
+
25
+ options.resolve("http://example.com/employees", "Employees", "emp")
26
+ end
27
+
28
+ filenames = Dir.glob("./xml/**/*.xml")
29
+
30
+ generator = Generator.new
31
+ generator.go(:options => options,
32
+ :filenames => filenames,
33
+ :directory => directory)
34
+
35
+ puts generator.print_elements("./generated-elements.xml")
36
+ exit!
37
+ end
38
+ end
@@ -0,0 +1,86 @@
1
+ <!--
2
+ [RetirementPlan]^[DefinedContribution],
3
+ [RetirementPlan]^[DefinedBenefit],
4
+ [Payroll]^[HourlyPayroll],
5
+ [Payroll]^[SalariedPayroll],
6
+ [EmployeeType]->*[RetirementPlan],
7
+ [EmployeeType]->*[Payroll],
8
+ [Employee]*->[EmployeeType],
9
+ [Department]-*[Employee]
10
+ -->
11
+ <company pid=''
12
+ xmlns="http://example.com/employees">
13
+
14
+ <payroll pid='hourly'>
15
+ <hourly-payroll/>
16
+ </payroll>
17
+ <payroll pid='salaried'>
18
+ <salaried-payroll/>
19
+ </payroll>
20
+
21
+ <retirement-plan pid='defined-contribution'>
22
+ <defined-contribution/>
23
+ </retirement-plan>
24
+ <retirement-plan pid='defined-benefit'>
25
+ <defined-benefit/>
26
+ </retirement-plan>
27
+
28
+ <employee-type pid=''
29
+ title='janitor'>
30
+ <payroll pid='hourly'/>
31
+ <retirement-plan pid='defined-contribution'/>
32
+ </employee-type>
33
+ <employee-type pid=''
34
+ title='receptionist'>
35
+ <payroll pid='hourly'/>
36
+ <retirement-plan pid='defined-contribution'/>
37
+ </employee-type>
38
+ <employee-type pid=''
39
+ title='office-admin'>
40
+ <payroll pid='hourly'/>
41
+ <retirement-plan pid='defined-benefit'/>
42
+ </employee-type>
43
+ <employee-type pid=''
44
+ title='engineer'>
45
+ <payroll pid='salaried'/>
46
+ <retirement-plan pid='defined-benefit'/>
47
+ </employee-type>
48
+ <employee-type pid=''
49
+ title='manager'>
50
+ <payroll pid='salaried'/>
51
+ <retirement-plan pid='defined-benefit'/>
52
+ </employee-type>
53
+
54
+
55
+ <department pid=''
56
+ name='widget design'>
57
+ <employee pid=''
58
+ name='tom'>
59
+ <employee-type pid=''
60
+ title='janitor'/>
61
+ </employee>
62
+ <employee pid=''
63
+ name='mary'
64
+ title='receptionist'>
65
+ <employee-type pid=''
66
+ title='receptionist'/>
67
+ </employee>
68
+ <employee pid=''
69
+ name='bob'
70
+ title='office-admin'>
71
+ <employee-type pid=''
72
+ title='office-admin'/>
73
+ </employee>
74
+
75
+ <employee pid=''
76
+ name='jack'>
77
+ <employee-type pid=''
78
+ title='engineer'/>
79
+ </employee>
80
+ <employee pid=''
81
+ name='jill'>
82
+ <employee-type pid=''
83
+ title='manager'/>
84
+ </employee>
85
+ </department>
86
+ </company>
@@ -0,0 +1,38 @@
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
+ $LOAD_PATH.unshift('../../lib/')
12
+
13
+ require 'xamplr-generator'
14
+
15
+ include XamplGenerator
16
+ include Xampl
17
+
18
+ Xampl.transaction("setup", :in_memory) do
19
+ directory = File.sjoin(".", "xampl_generated_code")
20
+
21
+ options = Xampl.make(Options) do |options|
22
+ options.new_index_attribute("pid").persisted = true
23
+ options.new_index_attribute("id")
24
+
25
+ options.resolve("http://example.com/employees", "Employees", "emp")
26
+ end
27
+
28
+ filenames = Dir.glob("./xml/**/*.xml")
29
+
30
+ generator = Generator.new
31
+ generator.go(:options => options,
32
+ :filenames => filenames,
33
+ :directory => directory)
34
+
35
+ puts generator.print_elements("./generated-elements.xml")
36
+ exit!
37
+ end
38
+ end
@@ -0,0 +1,48 @@
1
+ <!--
2
+ [RetirementPlan]^[DefinedContribution],
3
+ [RetirementPlan]^[DefinedBenefit],
4
+ [Employee]^[HourlyEmployee],
5
+ [Employee]^[SalariedEmployee],
6
+ [HourlyEmployee]->[DefinedContribution],
7
+ [SalariedEmployee]->[DefinedBenefit],
8
+ [Department]-*[Employee]
9
+ -->
10
+ <company pid=''
11
+ xmlns="http://example.com/employees">
12
+
13
+ <hourly-employee>
14
+ <defined-contribution pid='defined-contribution'>
15
+ <retirement-plan/>
16
+ </defined-contribution>
17
+ </hourly-employee>
18
+
19
+ <salaried-employee>
20
+ <defined-benefit pid='defined-benefit'>
21
+ <retirement-plan/>
22
+ </defined-benefit>
23
+ </salaried-employee>
24
+
25
+ <department pid=''
26
+ name='widget design'>
27
+ <hourly-employee>
28
+ <employee pid=''
29
+ name='tom'
30
+ title='janitor'/>
31
+ <employee pid=''
32
+ name='mary'
33
+ title='receptionist'/>
34
+ <employee pid=''
35
+ name='bob'
36
+ title='office-admin'/>
37
+ </hourly-employee>
38
+
39
+ <salaried-employee>
40
+ <employee pid=''
41
+ name='jack'
42
+ title='engineer'/>
43
+ <employee pid=''
44
+ name='jill'
45
+ title='manager'/>
46
+ </salaried-employee>
47
+ </department>
48
+ </company>