xamplr 1.2.0 → 1.3.15
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +12 -0
- data/CHANGES.txt +37 -0
- data/COPYING +661 -0
- data/Makefile +13 -0
- data/README.rdoc +24 -4
- data/Rakefile +2 -2
- data/VERSION.yml +3 -2
- data/bin/xampl-gen +17 -0
- data/docs/intro/.gitignore +1 -0
- data/docs/intro/example1/example1.rb +6 -0
- data/docs/intro/example1/xml/hello.xml +1 -0
- data/docs/intro/example2/example2.rb +38 -0
- data/docs/intro/example2/project-generator.rb +22 -0
- data/docs/intro/example2/xml/hello.xml +2 -0
- data/docs/intro/example3/example3.rb +30 -0
- data/docs/intro/example3/example3a.rb +16 -0
- data/docs/intro/example3/generated.png +0 -0
- data/docs/intro/example3/grab-yuml.rb +10 -0
- data/docs/intro/example3/greeter.rb +15 -0
- data/docs/intro/example3/greeting.rb +9 -0
- data/docs/intro/example3/project-generator.rb +25 -0
- data/docs/intro/example3/xml/greeter.xml +6 -0
- data/docs/intro/example4/example4.rb +27 -0
- data/docs/intro/example4/example4a.rb +19 -0
- data/docs/intro/example4/grab-yuml.rb +10 -0
- data/docs/intro/example4/greeter.rb +15 -0
- data/docs/intro/example4/greeting.rb +9 -0
- data/docs/intro/example4/project-generator.rb +25 -0
- data/docs/intro/example4/xml/greeter.xml +6 -0
- data/docs/intro/grab-yuml.rb +10 -0
- data/docs/intro/project-generator.rb +51 -0
- data/docs/intro/xampl.lyx +1494 -0
- data/docs/intro/xampl.pdf +0 -0
- data/examples/employees/final/xampl-gen.rb +38 -0
- data/examples/employees/final/xml/ddd-final.xml +86 -0
- data/examples/employees/final-xampl/xampl-gen.rb +38 -0
- data/examples/employees/final-xampl/xml/ddd-final-xampl.xml +86 -0
- data/examples/employees/first/xampl-gen.rb +38 -0
- data/examples/employees/first/xml/ddd-first.xml +48 -0
- data/examples/employees/twist/twist.graphml +333 -0
- data/examples/employees/twist/xampl-gen.rb +38 -0
- data/examples/employees/twist/xml/twist.xml +90 -0
- data/examples/employees/xamplr-twist.xml +2 -0
- data/examples/employees/yuml-diagrams/DDD-final-approach.graphml +393 -0
- data/examples/employees/yuml-diagrams/DDD-final-xampl-approach.graphml +265 -0
- data/examples/employees/yuml-diagrams/DDD-ideal-final-approach.graphml +357 -0
- data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
- data/examples/employees/yuml-diagrams/ddd-final.yuml +8 -0
- data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
- data/examples/employees/yuml-diagrams/ddd-first.yuml +7 -0
- data/examples/employees/yuml-diagrams/final-yed.png +0 -0
- data/examples/employees/yuml-diagrams/first-yed.png +0 -0
- data/examples/employees/yuml-diagrams/twist.png +0 -0
- data/examples/employees/yuml-diagrams/twist.yuml +12 -0
- data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
- data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
- data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
- data/examples/employees/yuml-diagrams/yuml-simplified.txt +19 -0
- data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +53 -0
- data/examples/employees/yuml-diagrams/yuml.txt +27 -0
- data/examples/hobbies/Makefile +5 -0
- data/examples/hobbies/hobbies.rb +193 -0
- data/examples/hobbies/project-generator.rb +25 -0
- data/examples/hobbies/xampl-gen.rb +38 -0
- data/examples/hobbies/xml/hobby.xml +3 -0
- data/examples/hobbies/xml/people.xml +5 -0
- data/examples/random-people/.gitignore +2 -0
- data/examples/random-people/Makefile +5 -1
- data/examples/random-people/xampl-gen.rb +5 -2
- data/examples/random-people-shared-addresses/.gitignore +2 -0
- data/examples/random-people-shared-addresses/Makefile +8 -9
- data/examples/random-people-shared-addresses/batch-load-users-profiled.rb +91 -0
- data/examples/random-people-shared-addresses/batch-load-users-safe.rb +81 -0
- data/examples/random-people-shared-addresses/batch-load-users.rb +59 -63
- data/examples/random-people-shared-addresses/xampl-gen.rb +2 -0
- data/examples/read-testing/.gitignore +2 -0
- data/examples/read-testing/rrr.rb +2 -1
- data/examples/read-testing/xampl-gen.rb +2 -0
- data/examples/tokyo-cabinet-experimental/.gitignore +2 -0
- data/examples/tokyo-cabinet-experimental/xampl-gen.rb +2 -0
- data/examples/write-testing/README +4 -0
- data/examples/write-testing/RESULTS.home +33 -0
- data/examples/write-testing/RESULTS.raconteur +33 -0
- data/examples/write-testing/write-speed-test.rb +40 -0
- data/lib/xamplr/.cvsignore +1 -0
- data/lib/xamplr/TODO +2 -1
- data/lib/xamplr/exceptions.rb +24 -1
- data/lib/xamplr/from-xml.rb +13 -5
- data/lib/xamplr/graphml-out.rb +6 -25
- data/lib/xamplr/indexed-array.rb +10 -2
- data/lib/xamplr/persist-to-xml.rb +6 -7
- data/lib/xamplr/persistence.rb +132 -48
- data/lib/xamplr/persister.rb +48 -25
- data/lib/xamplr/persisters/filesystem.rb +8 -2
- data/lib/xamplr/persisters/tokyo-cabinet.rb +243 -63
- data/lib/xamplr/persisters/tokyo-cabinet.rb.1-DB +694 -0
- data/lib/xamplr/persisters/tokyo-cabinet.rb.N-DB +692 -0
- data/lib/xamplr/persisters/tokyo-cabinet.rb.NICE-TRY +807 -0
- data/lib/xamplr/templates/.cvsignore +3 -0
- data/lib/xamplr/templates/child_indexed.template +6 -6
- data/lib/xamplr/templates/element_data.template +2 -1
- data/lib/xamplr/templates/element_empty.template +2 -10
- data/lib/xamplr/templates/element_mixed.template +2 -1
- data/lib/xamplr/templates/element_simple.template +2 -1
- data/lib/xamplr/templates/package.template +13 -1
- data/lib/xamplr/visitor.rb +7 -6
- data/lib/xamplr/visitors.rb +2 -1
- data/lib/xamplr/xampl-cl-gen.rb +89 -0
- data/lib/xamplr/xampl-generator.rb +86 -50
- data/lib/xamplr/xampl-object.rb +51 -0
- data/lib/xamplr/xampl-persisted-object.rb +13 -4
- data/lib/xamplr/yuml-out.rb +129 -0
- data/lib/xamplr-generator.rb +0 -1
- data/lib/xamplr.rb +18 -18
- data/regression/tc-indexes-crossing-pid-boundaries/Makefile +14 -0
- data/regression/tc-indexes-crossing-pid-boundaries/bad-idea.rb +40 -0
- data/regression/tc-indexes-crossing-pid-boundaries/fail-badly.rb +17 -0
- data/regression/tc-indexes-crossing-pid-boundaries/fail.rb +11 -0
- data/regression/tc-indexes-crossing-pid-boundaries/fucking-bad-idea.rb +44 -0
- data/regression/tc-indexes-crossing-pid-boundaries/setup.rb +15 -0
- data/regression/tc-indexes-crossing-pid-boundaries/xml/bad-idea.xml +4 -0
- data/regression/tightly-nested-mutual-mentions/Makefile +14 -0
- data/regression/tightly-nested-mutual-mentions/build.rb +31 -0
- data/regression/tightly-nested-mutual-mentions/load.rb +21 -0
- data/regression/tightly-nested-mutual-mentions/repo-keep.tgz +0 -0
- data/regression/tightly-nested-mutual-mentions/setup.rb +8 -0
- data/regression/tightly-nested-mutual-mentions/xampl-gen.rb +36 -0
- data/regression/tightly-nested-mutual-mentions/xml/stuff.xml +7 -0
- data/xamplr.gemspec +322 -0
- metadata +116 -13
- data/test/test_helper.rb +0 -10
- 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>
|