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
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module XamplGenerator
|
5
|
+
|
6
|
+
class YUMLOut
|
7
|
+
|
8
|
+
def initialize(elements_map)
|
9
|
+
@elements_map = elements_map
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate_class_nodes(element, include_mixins)
|
13
|
+
return if ignore_package(element.package)
|
14
|
+
|
15
|
+
class_name = "#{ element.package }::#{ element.class_name }"
|
16
|
+
mixin_name = "#{ element.package }::#{ element.class_name }"
|
17
|
+
|
18
|
+
@class_by_nstag[element.nstag] = element
|
19
|
+
@class_names_by_nstag[element.nstag] = class_name
|
20
|
+
|
21
|
+
if element.persisted then
|
22
|
+
write_entity_node(class_name, element.kind)
|
23
|
+
else
|
24
|
+
write_internal_node(class_name, element.kind)
|
25
|
+
end
|
26
|
+
|
27
|
+
if include_mixins then
|
28
|
+
write_mixin_node(class_name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def generate_edges(element, include_mixins)
|
33
|
+
return if ignore_package(element.package)
|
34
|
+
|
35
|
+
element_name = @class_names_by_nstag[ element.nstag ]
|
36
|
+
|
37
|
+
element.child_element_child.each do | celement |
|
38
|
+
next if ignore_package(celement.package)
|
39
|
+
|
40
|
+
celement_name = @class_names_by_nstag[ celement.name ]
|
41
|
+
referenced_element = @class_by_nstag[ celement.name ]
|
42
|
+
|
43
|
+
if referenced_element.persisted then
|
44
|
+
write_entity_ref_edge(element_name, celement_name)
|
45
|
+
else
|
46
|
+
write_internal_ref_edge(element_name, celement_name)
|
47
|
+
end
|
48
|
+
if include_mixins then
|
49
|
+
write_mixin_ref_edge(element_name, celement_name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def ignore_package(package)
|
55
|
+
return true if @excluded_packages.member?(package)
|
56
|
+
return false if @included_packages.nil?
|
57
|
+
return true unless @included_packages.member?(package)
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
def write_yuml(base_filename, excluded_packages=[ ], included_packages=nil, include_mixins=false)
|
62
|
+
filename = "#{ base_filename }.yuml"
|
63
|
+
|
64
|
+
@excluded_packages = Set.new(excluded_packages)
|
65
|
+
@included_packages = included_packages ? Set.new(included_packages) : nil
|
66
|
+
|
67
|
+
@class_names_by_nstag = {} # NOTE -- this is used by yuml!!
|
68
|
+
@class_by_nstag = {} # NOTE -- this is used by yuml!!
|
69
|
+
|
70
|
+
@initialise_output = true
|
71
|
+
|
72
|
+
File.open(filename, "w") do | out |
|
73
|
+
@out = out
|
74
|
+
|
75
|
+
@elements_map.each_value do |elements|
|
76
|
+
elements.element_child.each do |element|
|
77
|
+
generate_class_nodes(element, include_mixins)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
@elements_map.each_value do |elements|
|
82
|
+
elements.element_child.each do |element|
|
83
|
+
generate_edges(element, include_mixins)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
return nil
|
89
|
+
end
|
90
|
+
|
91
|
+
def new_statement
|
92
|
+
if @initialise_output then
|
93
|
+
@initialise_output = false
|
94
|
+
else
|
95
|
+
@out << ",\n"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def write_entity_node(class_name, kind)
|
100
|
+
new_statement
|
101
|
+
@out << "[#{ class_name }{bg:red}]"
|
102
|
+
end
|
103
|
+
|
104
|
+
def write_internal_node(class_name, kind)
|
105
|
+
new_statement
|
106
|
+
@out << "[#{ class_name }{bg:blue}]"
|
107
|
+
end
|
108
|
+
|
109
|
+
def write_mixin_node(class_name)
|
110
|
+
new_statement
|
111
|
+
@out << "[#{ class_name }Mixin]"
|
112
|
+
end
|
113
|
+
|
114
|
+
def write_entity_ref_edge(class_node, external_node)
|
115
|
+
new_statement
|
116
|
+
@out << "[#{ class_node }]->[#{ external_node }]"
|
117
|
+
end
|
118
|
+
|
119
|
+
def write_internal_ref_edge(class_node, internal_node)
|
120
|
+
new_statement
|
121
|
+
@out << "[#{ class_node }]->[#{ internal_node }]"
|
122
|
+
end
|
123
|
+
|
124
|
+
def write_mixin_ref_edge(class_node, mixin_node)
|
125
|
+
new_statement
|
126
|
+
@out << "[#{ mixin_node }Mixin]^[#{ class_node }]"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/lib/xamplr-generator.rb
CHANGED
data/lib/xamplr.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
|
3
2
|
module Xampl
|
4
3
|
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require 'rubygems'
|
5
|
+
require 'yaml'
|
6
|
+
require 'logger'
|
7
7
|
|
8
|
-
require
|
8
|
+
require 'xamplr-pp'
|
9
9
|
|
10
10
|
@@logger = Logger.new(STDOUT)
|
11
11
|
@@logger.level = Logger::WARN
|
@@ -14,23 +14,23 @@ module Xampl
|
|
14
14
|
return @@logger
|
15
15
|
end
|
16
16
|
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
17
|
+
require 'xamplr/xampl-module'
|
18
|
+
require 'xamplr/xampl-object-internals'
|
19
|
+
require 'xamplr/xampl-object'
|
20
|
+
require 'xamplr/xampl-persisted-object'
|
21
21
|
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
22
|
+
require 'xamplr/exceptions'
|
23
|
+
require 'xamplr/xml-text'
|
24
|
+
require 'xamplr/notifications'
|
25
|
+
require 'xamplr/mixins'
|
26
26
|
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
27
|
+
require 'xamplr/from-xml'
|
28
|
+
require 'xamplr/to-xml'
|
29
|
+
require 'xamplr/to-ruby'
|
30
30
|
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
31
|
+
require 'xamplr/visitor'
|
32
|
+
require 'xamplr/persist-to-xml'
|
33
|
+
require 'xamplr/visitors'
|
34
34
|
|
35
35
|
end
|
36
36
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'xampl_generated_code/XamplAdHoc.rb'
|
2
|
+
|
3
|
+
Xampl.set_default_persister_kind(:tokyo_cabinet)
|
4
|
+
|
5
|
+
class Widget
|
6
|
+
|
7
|
+
def Widget.indexed_attributes
|
8
|
+
%w{ value gadget-value }
|
9
|
+
end
|
10
|
+
|
11
|
+
Xampl::TokyoCabinetPersister.add_lexical_indexs(Widget.indexed_attributes)
|
12
|
+
|
13
|
+
def describe_yourself
|
14
|
+
description = {
|
15
|
+
'value' => self.value
|
16
|
+
}
|
17
|
+
|
18
|
+
secondary_descriptions = []
|
19
|
+
|
20
|
+
self.gadget.each do | gadget |
|
21
|
+
secondary_descriptions << {
|
22
|
+
'gadget-value' => gadget.value
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
puts "\n\n\n\n#{ __FILE__ }:#{ __LINE__ } WIDGET(#{ self.pid })"
|
29
|
+
# puts pp_xml
|
30
|
+
puts "#{ __FILE__ }:#{ __LINE__ } description: #{ description.inspect }"
|
31
|
+
secondary_descriptions.each do | secondary |
|
32
|
+
puts "#{ __FILE__ }:#{ __LINE__ } secondary: #{ secondary.inspect }"
|
33
|
+
end
|
34
|
+
puts "\n\n\n"
|
35
|
+
|
36
|
+
return description, secondary_descriptions
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'xampl_generated_code/XamplAdHoc.rb'
|
2
|
+
require 'fucking-bad-idea.rb'
|
3
|
+
|
4
|
+
Xampl.set_default_persister_kind(:tokyo_cabinet)
|
5
|
+
|
6
|
+
puts "#{ __method__} #{ __LINE__ }"
|
7
|
+
Xampl.transaction("bad-idea") do
|
8
|
+
puts "#{ __method__} #{ __LINE__ }"
|
9
|
+
car = Widget['the-car']
|
10
|
+
puts "#{ __method__} #{ __LINE__ }"
|
11
|
+
# engine = Gadget['the-engine']
|
12
|
+
puts "#{ __method__} #{ __LINE__ }"
|
13
|
+
car.value = 'ex-pinto'
|
14
|
+
puts "#{ __method__} #{ __LINE__ }"
|
15
|
+
end
|
16
|
+
puts "#{ __method__} #{ __LINE__ }"
|
17
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'xampl_generated_code/XamplAdHoc.rb'
|
2
|
+
|
3
|
+
Xampl.set_default_persister_kind(:tokyo_cabinet)
|
4
|
+
|
5
|
+
class Widget
|
6
|
+
|
7
|
+
def Widget.indexed_attributes
|
8
|
+
%w{ value gadget-value }
|
9
|
+
end
|
10
|
+
|
11
|
+
Xampl::TokyoCabinetPersister.add_lexical_indexs(Widget.indexed_attributes)
|
12
|
+
|
13
|
+
def describe_yourself
|
14
|
+
description = {
|
15
|
+
'value' => self.value
|
16
|
+
}
|
17
|
+
|
18
|
+
secondary_descriptions = []
|
19
|
+
|
20
|
+
puts "#{ __method__} #{ __LINE__ }"
|
21
|
+
self.gadget.each do | gadget |
|
22
|
+
puts "#{ __method__} #{ __LINE__ }"
|
23
|
+
secondary_descriptions << {
|
24
|
+
'gadget-value' => gadget.value
|
25
|
+
}
|
26
|
+
puts "#{ __method__} #{ __LINE__ }"
|
27
|
+
gadget.extra = 'fucking stupid change'
|
28
|
+
puts "#{ __method__} #{ __LINE__ }"
|
29
|
+
end
|
30
|
+
puts "#{ __method__} #{ __LINE__ }"
|
31
|
+
|
32
|
+
puts "\n\n\n\n#{ __FILE__ }:#{ __LINE__ } WIDGET(#{ self.pid })"
|
33
|
+
# puts pp_xml
|
34
|
+
puts "#{ __FILE__ }:#{ __LINE__ } description: #{ description.inspect }"
|
35
|
+
secondary_descriptions.each do | secondary |
|
36
|
+
puts "#{ __FILE__ }:#{ __LINE__ } secondary: #{ secondary.inspect }"
|
37
|
+
end
|
38
|
+
puts "\n\n\n"
|
39
|
+
|
40
|
+
return description, secondary_descriptions
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'xampl_generated_code/XamplAdHoc.rb'
|
2
|
+
require 'bad-idea.rb'
|
3
|
+
|
4
|
+
Xampl.set_default_persister_kind(:tokyo_cabinet)
|
5
|
+
|
6
|
+
Xampl.transaction("bad-idea") do
|
7
|
+
car = Widget.new('the-car')
|
8
|
+
car.value = "pinto"
|
9
|
+
|
10
|
+
engine = car.new_gadget('the-engine')
|
11
|
+
engine.value = 'guzzler'
|
12
|
+
|
13
|
+
gas_tank = car.new_gadget('the-gas-tank')
|
14
|
+
gas_tank.value = 'the burner'
|
15
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
require 'setup'
|
3
|
+
|
4
|
+
module TestingStuff
|
5
|
+
|
6
|
+
# <stuff pid='' xmlns="http://xampl.com/stuff">
|
7
|
+
# <parent pid=''>
|
8
|
+
# <child pid=''>
|
9
|
+
# <parent pid=''/>
|
10
|
+
# </child>
|
11
|
+
# </parent>
|
12
|
+
# </stuff>
|
13
|
+
|
14
|
+
Xampl.transaction("stuff") do
|
15
|
+
|
16
|
+
|
17
|
+
parent = Parent.new('parent1')
|
18
|
+
parent.info = "one"
|
19
|
+
child = Child.new('child1')
|
20
|
+
child.info = "two"
|
21
|
+
|
22
|
+
parent << child
|
23
|
+
child << parent
|
24
|
+
|
25
|
+
puts "parent ---------------------------------------"
|
26
|
+
puts parent.pp_xml
|
27
|
+
puts "child ----------------------------------------"
|
28
|
+
puts child.pp_xml
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
require 'setup'
|
3
|
+
|
4
|
+
module TestingStuff
|
5
|
+
|
6
|
+
# <stuff pid='' xmlns="http://xampl.com/stuff">
|
7
|
+
# <parent pid=''>
|
8
|
+
# <child pid=''>
|
9
|
+
# <parent pid=''/>
|
10
|
+
# </child>
|
11
|
+
# </parent>
|
12
|
+
# </stuff>
|
13
|
+
|
14
|
+
Xampl.transaction("stuff") do
|
15
|
+
parent = Parent['parent1']
|
16
|
+
puts "parent has info: #{ parent.info }"
|
17
|
+
child = parent.child.first
|
18
|
+
puts "child has info: #{ child.info }"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
Binary file
|
@@ -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/stuff", "TestingStuff", "s")
|
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
|