xamplr-gen 1.9.0 → 1.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +14 -6
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/xampl-gen +3 -2
- data/lib/xamplr-gen/xampl-cl-gen.rb +155 -3
- data/lib/xamplr-gen/xampl-generator.rb +0 -1
- data/xamplr-gen.gemspec +5 -5
- metadata +3 -3
data/README.md
CHANGED
@@ -2,17 +2,19 @@
|
|
2
2
|
|
3
3
|
xamplr-gen is part of a set of software tools that supports development of ruby applications.
|
4
4
|
|
5
|
-
It consists of three gems hosted on
|
6
|
-
github.
|
5
|
+
It consists of three gems hosted on gemcutter, source code on github.
|
7
6
|
|
8
|
-
* xamplr-pp -- this is a pure ruby pull parser
|
9
|
-
* xamplr -- this is the xampl runtime
|
10
|
-
* xamplr-gen -- this is the code generator
|
7
|
+
* [xamplr-pp](http://github.com/hutch/xamplr-pp) -- this is a pure ruby pull parser
|
8
|
+
* [xamplr](http://github.com/hutch/xamplr) -- this is the xampl runtime
|
9
|
+
* [xamplr-gen](http://github.com/hutch/xamplr-gen) -- this is the code generator
|
11
10
|
|
12
11
|
There is an additional fourth github repository containing
|
13
12
|
examples and documentation that will be coming soon.
|
14
13
|
|
15
|
-
Yes, that means that there's no documentation. And no examples. I agree,
|
14
|
+
Yes, that means that there's no documentation. And no examples. I agree,
|
15
|
+
this is a very bad situation.
|
16
|
+
|
17
|
+
For more information, see [the xampl page on xampl.com](http://xampl.com/so/xampl/), and/or [the weblog 'So.'](http://xampl.com/so/)
|
16
18
|
|
17
19
|
## Installation:
|
18
20
|
|
@@ -20,6 +22,12 @@ Yes, that means that there's no documentation. And no examples. I agree, this is
|
|
20
22
|
|
21
23
|
This will install all three gems.
|
22
24
|
|
25
|
+
NOTE: if you have installed hutch-xamplr or hutch-xamplr-pp then
|
26
|
+
you should uninstall them. For some reason, in certain circumstances,
|
27
|
+
these might be loaded or partially loaded when trying to use xampl.
|
28
|
+
If you don't you'll experience strange exceptions with hutch-xamplr
|
29
|
+
or hutch-xamplr-pp on the stack trace.
|
30
|
+
|
23
31
|
|
24
32
|
## License:
|
25
33
|
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ begin
|
|
13
13
|
gem.add_development_dependency "cucumber", ">= 0"
|
14
14
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
15
|
|
16
|
-
gem.add_dependency('xamplr', '>=1.9.
|
16
|
+
gem.add_dependency('xamplr', '>=1.9.1')
|
17
17
|
end
|
18
18
|
Jeweler::GemcutterTasks.new
|
19
19
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.9.
|
1
|
+
1.9.2
|
data/bin/xampl-gen
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#!/usr/bin/env ruby -w -I..
|
3
2
|
|
4
3
|
require 'xamplr-gen'
|
5
4
|
require 'xamplr-gen/xampl-cl-gen'
|
@@ -8,10 +7,12 @@ include XamplGenerator
|
|
8
7
|
include Xampl
|
9
8
|
|
10
9
|
project_specialisations = File.join(%w{ . project-generator.rb })
|
10
|
+
specialised = false
|
11
11
|
if File.exists?(project_specialisations) then
|
12
12
|
load project_specialisations
|
13
|
+
specialised = true
|
13
14
|
end
|
14
15
|
|
15
|
-
generator = ProjectGenerator.new
|
16
|
+
generator = ProjectGenerator.new(specialised)
|
16
17
|
generator.generate
|
17
18
|
|
@@ -1,13 +1,16 @@
|
|
1
|
-
|
2
|
-
#require 'xampl-generator'
|
1
|
+
require 'optparse'
|
3
2
|
|
4
3
|
include XamplGenerator
|
5
4
|
include Xampl
|
6
5
|
|
7
6
|
class ProjectGenerator
|
8
7
|
|
8
|
+
def initialize(specialised=true)
|
9
|
+
@specialised = specialised
|
10
|
+
end
|
11
|
+
|
9
12
|
def directory
|
10
|
-
File.join(%w{ .
|
13
|
+
File.join(%w{ . xampl-generated-code })
|
11
14
|
end
|
12
15
|
|
13
16
|
def filenames
|
@@ -50,14 +53,97 @@ class ProjectGenerator
|
|
50
53
|
[]
|
51
54
|
end
|
52
55
|
|
56
|
+
@@specialisation_file_content = <<_EOF_
|
57
|
+
class ProjectGenerator
|
58
|
+
|
59
|
+
def print_options
|
60
|
+
# return an array containing any (or none) of:
|
61
|
+
# :schema -- a schema-like xml representation of the generated code
|
62
|
+
# :graphml -- a graphml file describing the class model (compatible with yEd)
|
63
|
+
# :yuml -- a yuml file that represents a simplified class model (compatible with yUML)
|
64
|
+
|
65
|
+
[ :yuml ]
|
66
|
+
end
|
67
|
+
|
68
|
+
def directory
|
69
|
+
# return the path name to the generator's output directory
|
70
|
+
File.join(%w{ . xampl-generated-code })
|
71
|
+
end
|
72
|
+
|
73
|
+
def resolve_namespaces
|
74
|
+
# any array of arrays
|
75
|
+
# each sub-array:
|
76
|
+
# 0: a string or an array of strings, containing xml namespaces found
|
77
|
+
# in the example xml files an empty string is the default namespace
|
78
|
+
# 1: a ruby Module name (get the character cases right)
|
79
|
+
# 2: a namespace prefix used when writing xml, optional. A generated
|
80
|
+
# prefix will be used otherwise.
|
81
|
+
|
82
|
+
[
|
83
|
+
{{MAPPING}}
|
84
|
+
]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
_EOF_
|
88
|
+
|
89
|
+
def write_specialisation_file(element_map)
|
90
|
+
filename = './project-generator.rb'
|
91
|
+
return if File.exists? filename
|
92
|
+
|
93
|
+
mappings = []
|
94
|
+
count = 0
|
95
|
+
element_map.each do | ns, elements |
|
96
|
+
module_name = elements.element.first.package || 'XamplAdHoc'
|
97
|
+
count += 1
|
98
|
+
mappings << [ ns, module_name, "ns#{ count }" ]
|
99
|
+
end
|
100
|
+
|
101
|
+
text = @@specialisation_file_content.gsub(/{{MAPPING}}/) do
|
102
|
+
insert = []
|
103
|
+
mappings.each do | ns, module_name, prefix |
|
104
|
+
insert << " ['#{ ns }', '#{ module_name }', '#{ prefix }'],"
|
105
|
+
end
|
106
|
+
insert.join("\n")
|
107
|
+
end
|
108
|
+
|
109
|
+
File.open(filename, 'w') do | out |
|
110
|
+
out.write text
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
53
114
|
def generate
|
54
115
|
|
116
|
+
cl_options = {}
|
117
|
+
OptionParser.new do |opts|
|
118
|
+
opts.banner = "Usage: junk.rb [options]"
|
119
|
+
|
120
|
+
opts.on("--download-yuml-png [FILENAME]", "Download the yuml png file if possible.") do | filename |
|
121
|
+
cl_options[:download_yuml_png] = filename || true
|
122
|
+
end
|
123
|
+
opts.on("--download-yuml-pdf [FILENAME]", "Download the yuml pdf file if possible.") do | filename |
|
124
|
+
cl_options[:download_yuml_pdf] = filename || true
|
125
|
+
end
|
126
|
+
end.parse!
|
127
|
+
|
55
128
|
# Xampl.set_default_persister_kind(:simple)
|
56
129
|
Xampl.set_default_persister_kind(:in_memory)
|
57
130
|
# Xampl.set_default_persister_kind(:filesystem)
|
58
131
|
# Xampl.set_default_persister_kind(:tokyo_cabinet)
|
59
132
|
# Xampl.set_default_persister_format(:xml_format)
|
60
133
|
|
134
|
+
dirname = self.directory
|
135
|
+
if File.directory? dirname then
|
136
|
+
begin
|
137
|
+
FileUtils.rm_rf([ dirname ])
|
138
|
+
rescue => e
|
139
|
+
puts "could not clean up #{ dirname } -- #{ e }"
|
140
|
+
return
|
141
|
+
end
|
142
|
+
elsif File.exists? dirname then
|
143
|
+
puts "please move #{ dirname } out of the way of xampl-gen"
|
144
|
+
return
|
145
|
+
end
|
146
|
+
|
61
147
|
Xampl.transaction("project-generation") do
|
62
148
|
|
63
149
|
options = Options.new do | opts |
|
@@ -81,6 +167,72 @@ class ProjectGenerator
|
|
81
167
|
:directory => directory)
|
82
168
|
|
83
169
|
puts generator.print_elements(print_base_filename, print_options)
|
170
|
+
self.write_specialisation_file(generator.elements_map)
|
171
|
+
|
172
|
+
generated_files = Dir.glob("#{ self.directory }/*.rb")
|
173
|
+
if 0 < generated_files.size then
|
174
|
+
all = []
|
175
|
+
abs = []
|
176
|
+
generated_files.each do | filename |
|
177
|
+
all << "require '#{ File.dirname(filename)[2..-1] }/#{ File.basename(filename, '.rb') }'"
|
178
|
+
abs_filename = File.expand_path(filename)
|
179
|
+
abs << "require '#{ File.dirname(abs_filename) }/#{ File.basename(abs_filename, '.rb') }'"
|
180
|
+
end
|
181
|
+
|
182
|
+
out_filename = "#{ self.directory }/all.rb"
|
183
|
+
File.open(out_filename, 'w') do | out |
|
184
|
+
out.puts all.join("\n")
|
185
|
+
end
|
186
|
+
puts "WRITE TO FILE: #{ out_filename }"
|
187
|
+
|
188
|
+
out_filename = "#{ self.directory }/all-absolute.rb"
|
189
|
+
File.open(out_filename, 'w') do | out |
|
190
|
+
out.puts abs.join("\n")
|
191
|
+
end
|
192
|
+
puts "WRITE TO FILE: #{ out_filename }"
|
193
|
+
|
194
|
+
if File.exists?('./generated.yuml') && (cl_options[:download_yuml_png] || cl_options[:download_yuml_pdf]) then
|
195
|
+
diagram = ""
|
196
|
+
File.open("./generated.yuml") do | f |
|
197
|
+
f.each do | line |
|
198
|
+
diagram << line.chomp
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
|
203
|
+
okay = false
|
204
|
+
if cl_options[:download_yuml_png] then
|
205
|
+
begin
|
206
|
+
filename = (true == cl_options[:download_yuml_png]) ? 'generated.png' : cl_options[:download_yuml_png]
|
207
|
+
wget = "wget 'http://yuml.me/diagram/scruffy/class/#{diagram}' -O '#{filename}'"
|
208
|
+
okay = system(wget)
|
209
|
+
if okay then
|
210
|
+
puts "downloaded yuml png"
|
211
|
+
else
|
212
|
+
puts "could not get the yuml png file -- #{ $? }"
|
213
|
+
end
|
214
|
+
rescue => e
|
215
|
+
puts "could not get the yuml png file -- #{ e }"
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
if cl_options[:download_yuml_pdf] then
|
220
|
+
begin
|
221
|
+
filename = (true == cl_options[:download_yuml_png]) ? 'generated.png' : cl_options[:download_yuml_png]
|
222
|
+
wget = "wget 'http://yuml.me/diagram/scruffy/class/#{diagram}.pdf' -O '#{filename}'"
|
223
|
+
okay = system(wget)
|
224
|
+
puts "downloaded yuml pdf"
|
225
|
+
if okay then
|
226
|
+
puts "downloaded yuml pdf"
|
227
|
+
else
|
228
|
+
puts "could not get the yuml pdf file -- #{ $? }"
|
229
|
+
end
|
230
|
+
rescue => e
|
231
|
+
puts "could not get the yuml pdf file -- #{ e }"
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
84
236
|
|
85
237
|
Xampl.rollback
|
86
238
|
end
|
@@ -278,7 +278,6 @@ module XamplGenerator
|
|
278
278
|
if directory_name then
|
279
279
|
output_filename = File.join(directory_name, "#{package_name}.rb")
|
280
280
|
puts "WRITE TO FILE: #{output_filename}"
|
281
|
-
#puts package_definition
|
282
281
|
File.open(output_filename, "w") do |file|
|
283
282
|
file.puts package_definition
|
284
283
|
end
|
data/xamplr-gen.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{xamplr-gen}
|
8
|
-
s.version = "1.9.
|
8
|
+
s.version = "1.9.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bob Hutchison"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-01-13}
|
13
13
|
s.default_executable = %q{xampl-gen}
|
14
14
|
s.description = %q{This is the xampl code generator for Ruby.}
|
15
15
|
s.email = %q{hutch@xampl.com}
|
@@ -85,14 +85,14 @@ Gem::Specification.new do |s|
|
|
85
85
|
|
86
86
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
87
87
|
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
88
|
-
s.add_runtime_dependency(%q<xamplr>, [">= 1.9.
|
88
|
+
s.add_runtime_dependency(%q<xamplr>, [">= 1.9.1"])
|
89
89
|
else
|
90
90
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
91
|
-
s.add_dependency(%q<xamplr>, [">= 1.9.
|
91
|
+
s.add_dependency(%q<xamplr>, [">= 1.9.1"])
|
92
92
|
end
|
93
93
|
else
|
94
94
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
95
|
-
s.add_dependency(%q<xamplr>, [">= 1.9.
|
95
|
+
s.add_dependency(%q<xamplr>, [">= 1.9.1"])
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xamplr-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Hutchison
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-13 00:00:00 -05:00
|
13
13
|
default_executable: xampl-gen
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.9.
|
33
|
+
version: 1.9.1
|
34
34
|
version:
|
35
35
|
description: This is the xampl code generator for Ruby.
|
36
36
|
email: hutch@xampl.com
|