ruport 0.8.14 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +42 -107
- data/Rakefile +29 -32
- data/examples/centered_pdf_text_box.rb +13 -19
- data/examples/example.csv +3 -0
- data/examples/line_plotter.rb +15 -15
- data/examples/pdf_complex_report.rb +10 -23
- data/examples/pdf_table_with_title.rb +12 -12
- data/examples/rope_examples/itunes/Rakefile +22 -1
- data/examples/rope_examples/itunes/config/environment.rb +4 -0
- data/examples/rope_examples/itunes/lib/init.rb +32 -2
- data/examples/rope_examples/itunes/util/build +50 -16
- data/examples/rope_examples/sales_report/README +1 -1
- data/examples/rope_examples/sales_report/Rakefile +22 -1
- data/examples/rope_examples/sales_report/config/environment.rb +4 -0
- data/examples/rope_examples/sales_report/lib/init.rb +32 -2
- data/examples/rope_examples/sales_report/lib/reports/sales.rb +10 -16
- data/examples/rope_examples/sales_report/util/build +50 -16
- data/examples/row_renderer.rb +39 -0
- data/examples/ruport_list/png_embed.rb +61 -0
- data/examples/ruport_list/roadmap.png +0 -0
- data/examples/sample.rb +16 -0
- data/examples/simple_pdf_lines.rb +24 -0
- data/lib/ruport.rb +143 -57
- data/lib/ruport/acts_as_reportable.rb +246 -0
- data/lib/ruport/data.rb +1 -2
- data/lib/ruport/data/grouping.rb +311 -0
- data/lib/ruport/data/record.rb +113 -84
- data/lib/ruport/data/table.rb +275 -174
- data/lib/ruport/formatter.rb +149 -0
- data/lib/ruport/formatter/csv.rb +87 -0
- data/lib/ruport/formatter/html.rb +89 -0
- data/lib/ruport/formatter/pdf.rb +357 -0
- data/lib/ruport/formatter/text.rb +151 -0
- data/lib/ruport/generator.rb +127 -30
- data/lib/ruport/query.rb +46 -99
- data/lib/ruport/renderer.rb +238 -194
- data/lib/ruport/renderer/grouping.rb +67 -0
- data/lib/ruport/renderer/table.rb +25 -98
- data/lib/ruport/report.rb +45 -96
- data/test/acts_as_reportable_test.rb +229 -0
- data/test/csv_formatter_test.rb +97 -0
- data/test/{_test_database.rb → database_test_.rb} +0 -0
- data/test/grouping_test.rb +305 -0
- data/test/html_formatter_test.rb +104 -0
- data/test/pdf_formatter_test.rb +25 -0
- data/test/{test_query.rb → query_test.rb} +32 -121
- data/test/{test_record.rb → record_test.rb} +40 -23
- data/test/renderer_test.rb +344 -0
- data/test/{test_report.rb → report_test.rb} +74 -44
- data/test/samples/ticket_count.csv +124 -0
- data/test/{test_sql_split.rb → sql_split_test.rb} +0 -0
- data/test/{test_table.rb → table_test.rb} +255 -44
- data/test/text_formatter_test.rb +144 -0
- data/util/bench/data/record/bench_as_vs_to.rb +17 -0
- data/util/bench/data/record/bench_constructor.rb +46 -0
- data/util/bench/data/record/bench_indexing.rb +65 -0
- data/util/bench/data/record/bench_reorder.rb +35 -0
- data/util/bench/data/record/bench_to_a.rb +19 -0
- data/util/bench/data/table/bench_column_manip.rb +103 -0
- data/util/bench/data/table/bench_dup.rb +24 -0
- data/util/bench/data/table/bench_init.rb +67 -0
- data/util/bench/data/table/bench_manip.rb +125 -0
- data/util/bench/formatter/bench_csv.rb +14 -0
- data/util/bench/formatter/bench_html.rb +14 -0
- data/util/bench/formatter/bench_pdf.rb +14 -0
- data/util/bench/formatter/bench_text.rb +14 -0
- data/util/bench/samples/tattle.csv +1237 -0
- metadata +121 -143
- data/TODO +0 -21
- data/examples/invoice.rb +0 -142
- data/examples/invoice_report.rb +0 -29
- data/examples/line_graph.rb +0 -38
- data/examples/rope_examples/itunes/config/ruport_config.rb +0 -8
- data/examples/rope_examples/sales_report/config/ruport_config.rb +0 -8
- data/lib/ruport/attempt.rb +0 -63
- data/lib/ruport/config.rb +0 -204
- data/lib/ruport/data/groupable.rb +0 -93
- data/lib/ruport/data/taggable.rb +0 -80
- data/lib/ruport/format.rb +0 -1
- data/lib/ruport/format/csv.rb +0 -29
- data/lib/ruport/format/html.rb +0 -42
- data/lib/ruport/format/latex.rb +0 -47
- data/lib/ruport/format/pdf.rb +0 -233
- data/lib/ruport/format/plugin.rb +0 -31
- data/lib/ruport/format/svg.rb +0 -60
- data/lib/ruport/format/text.rb +0 -103
- data/lib/ruport/format/xml.rb +0 -32
- data/lib/ruport/layout.rb +0 -1
- data/lib/ruport/layout/component.rb +0 -7
- data/lib/ruport/mailer.rb +0 -99
- data/lib/ruport/renderer/graph.rb +0 -46
- data/lib/ruport/report/graph.rb +0 -14
- data/lib/ruport/system_extensions.rb +0 -71
- data/test/test_config.rb +0 -88
- data/test/test_format_text.rb +0 -63
- data/test/test_graph_renderer.rb +0 -97
- data/test/test_groupable.rb +0 -56
- data/test/test_mailer.rb +0 -170
- data/test/test_renderer.rb +0 -151
- data/test/test_ruport.rb +0 -58
- data/test/test_table_renderer.rb +0 -141
- data/test/test_taggable.rb +0 -52
@@ -1,28 +1,28 @@
|
|
1
1
|
require "ruport"
|
2
2
|
|
3
|
-
class TitledPDFTable < Ruport::
|
3
|
+
class TitledPDFTable < Ruport::Formatter::PDF
|
4
4
|
|
5
|
-
Ruport::Renderer::Table
|
5
|
+
renders :titled_pdf, :for => Ruport::Renderer::Table
|
6
6
|
|
7
7
|
def add_title( title )
|
8
8
|
rounded_text_box("<b>#{title}</b>") do |o|
|
9
9
|
o.fill_color = Color::RGB::Gray80
|
10
10
|
o.radius = 5
|
11
|
-
o.width =
|
12
|
-
o.height =
|
13
|
-
o.font_size =
|
11
|
+
o.width = options.header_width || 200
|
12
|
+
o.height = options.header_height || 20
|
13
|
+
o.font_size = options.header_font_size || 12
|
14
14
|
o.x = pdf_writer.absolute_right_margin - o.width
|
15
15
|
o.y = pdf_writer.absolute_top_margin
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def prepare_table
|
20
|
-
|
20
|
+
options.header_margin ||= 50
|
21
21
|
end
|
22
22
|
|
23
23
|
def build_table_header
|
24
24
|
add_title options.title
|
25
|
-
move_cursor -
|
25
|
+
move_cursor -options.header_margin
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
@@ -31,11 +31,11 @@ end
|
|
31
31
|
a = Ruport::Renderer::Table.render_titled_pdf { |r|
|
32
32
|
r.options.title = "This is a sample header"
|
33
33
|
r.data = Table(%w[a b]) { |t| t << [1,2] << [3,4] }
|
34
|
-
# NOTE: uncomment some options to play with
|
35
|
-
r.
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
34
|
+
# NOTE: uncomment some options to play with options
|
35
|
+
r.options do |o|
|
36
|
+
# o.header_margin = 25
|
37
|
+
# o.header_width = 250
|
38
|
+
# o.header_height = 50
|
39
39
|
end
|
40
40
|
}
|
41
41
|
|
@@ -10,9 +10,30 @@ Rake::TestTask.new do |test|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
task :build do
|
13
|
-
|
13
|
+
if ENV['report']
|
14
|
+
sh "ruby util/build report #{ENV['report']}"
|
15
|
+
elsif ENV['renderer']
|
16
|
+
sh "ruby util/build renderer #{ENV['renderer']}"
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
task :run do
|
17
21
|
sh "ruby lib/reports/#{ENV['report']}.rb"
|
18
22
|
end
|
23
|
+
|
24
|
+
task :use_utils do
|
25
|
+
raise "File lib/init_utils.rb exists!" if File.exist?('lib/init_utils.rb')
|
26
|
+
File.open('lib/init_utils.rb','w') { |f|
|
27
|
+
if ENV['only']
|
28
|
+
ENV['only'].split(',').each { |e|
|
29
|
+
f.puts "require 'ruport/util/#{e}'"
|
30
|
+
}
|
31
|
+
else
|
32
|
+
f.puts "require 'ruport/util'"
|
33
|
+
end
|
34
|
+
}
|
35
|
+
File.open('lib/init.rb','a') { |f|
|
36
|
+
f.puts '#comment out the line below to disable auto-loading of utils'
|
37
|
+
f.puts 'require "lib/init_utils.rb"'
|
38
|
+
}
|
39
|
+
end
|
@@ -1,9 +1,39 @@
|
|
1
1
|
begin
|
2
2
|
require "rubygems"
|
3
|
-
gem "ruport","=0.
|
3
|
+
gem "ruport","=0.9.6"
|
4
4
|
rescue LoadError
|
5
5
|
nil
|
6
6
|
end
|
7
7
|
require "ruport"
|
8
8
|
require "lib/helpers"
|
9
|
-
require "config/
|
9
|
+
require "config/environment"
|
10
|
+
|
11
|
+
class String
|
12
|
+
def /(other)
|
13
|
+
self + "/" + other
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Ruport::Report
|
18
|
+
|
19
|
+
def output_dir
|
20
|
+
config.output_dir or dir('output')
|
21
|
+
end
|
22
|
+
|
23
|
+
def data_dir
|
24
|
+
config.data_dir or dir('data')
|
25
|
+
end
|
26
|
+
|
27
|
+
def query_dir
|
28
|
+
config.query_dir or dir('sql')
|
29
|
+
end
|
30
|
+
|
31
|
+
def template_dir
|
32
|
+
config.template_dir or dir('templates')
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def dir(name)
|
37
|
+
"/Users/mikem836/ruport/itunes/#{name}"
|
38
|
+
end
|
39
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
|
+
require 'lib/init.rb'
|
5
|
+
require "ruport/generator"
|
4
6
|
include FileUtils
|
5
|
-
|
6
|
-
def format_class_name(string)
|
7
|
-
string.downcase.split("_").map { |s| s.capitalize }.join
|
8
|
-
end
|
7
|
+
include Ruport::Generator::Helpers
|
9
8
|
|
10
9
|
unless ARGV.length > 1
|
11
10
|
puts "usage: build [command] [options]"
|
@@ -14,31 +13,23 @@ end
|
|
14
13
|
|
15
14
|
class_name = format_class_name(ARGV[1])
|
16
15
|
|
17
|
-
exit if File.exist? "lib/reports/#{ARGV[1]}.rb"
|
18
16
|
if ARGV[0].eql? "report"
|
17
|
+
check_for_files
|
19
18
|
File.open("lib/reports.rb", "a") { |f|
|
20
19
|
f.puts("require \"lib/reports/#{ARGV[1]}\"")
|
21
20
|
}
|
22
21
|
REP = <<EOR
|
23
22
|
require "lib/init"
|
24
23
|
class #{class_name} < Ruport::Report
|
25
|
-
|
26
|
-
def prepare
|
27
24
|
|
28
|
-
end
|
29
|
-
|
30
25
|
def generate
|
31
26
|
|
32
27
|
end
|
33
|
-
|
34
|
-
def cleanup
|
35
|
-
|
36
|
-
end
|
37
|
-
|
28
|
+
|
38
29
|
end
|
39
30
|
|
40
31
|
if __FILE__ == $0
|
41
|
-
|
32
|
+
puts #{class_name}.run
|
42
33
|
end
|
43
34
|
EOR
|
44
35
|
|
@@ -52,11 +43,54 @@ class Test#{class_name} < Test::Unit::TestCase
|
|
52
43
|
end
|
53
44
|
end
|
54
45
|
EOR
|
55
|
-
|
46
|
+
|
56
47
|
File.open("lib/reports/#{ARGV[1]}.rb", "w") { |f| f << REP }
|
48
|
+
puts "reports file: lib/reports/#{ARGV[1]}.rb"
|
57
49
|
puts "test file: test/test_#{ARGV[1]}.rb"
|
58
50
|
puts "class name: #{class_name}"
|
59
51
|
File.open("test/test_#{ARGV[1]}.rb","w") { |f| f << TEST }
|
52
|
+
|
53
|
+
elsif ARGV[0].eql? "renderer"
|
54
|
+
|
55
|
+
check_for_files
|
56
|
+
File.open("lib/renderers.rb","a") { |f|
|
57
|
+
f.puts("require \"lib/renderers/#{ARGV[1]}\"")
|
58
|
+
}
|
59
|
+
REP = <<EOR
|
60
|
+
require "lib/init"
|
61
|
+
|
62
|
+
class #{class_name} < Ruport::Renderer
|
63
|
+
stage :#{class_name.downcase}
|
64
|
+
end
|
65
|
+
|
66
|
+
class #{class_name}Formatter < Ruport::Formatter
|
67
|
+
|
68
|
+
# change to your format name, or add additional formats
|
69
|
+
renders :my_format, :for => #{class_name}
|
70
|
+
|
71
|
+
def build_#{class_name.downcase}
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
EOR
|
77
|
+
|
78
|
+
TEST = <<EOR
|
79
|
+
require "test/unit"
|
80
|
+
require "lib/renderers/#{ARGV[1]}"
|
81
|
+
|
82
|
+
class Test#{class_name} < Test::Unit::TestCase
|
83
|
+
def test_flunk
|
84
|
+
flunk "Write your real tests here or in any test/test_* file"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
EOR
|
88
|
+
puts "renderer file: lib/renderers/#{ARGV[1]}.rb"
|
89
|
+
File.open("lib/renderers/#{ARGV[1]}.rb", "w") { |f| f << REP }
|
90
|
+
puts "test file: test/test_#{ARGV[1]}.rb"
|
91
|
+
|
92
|
+
puts "class name: #{class_name}"
|
93
|
+
File.open("test/test_#{ARGV[1]}.rb","w") { |f| f << TEST }
|
60
94
|
else
|
61
95
|
puts "Incorrect usage."
|
62
96
|
end
|
@@ -10,9 +10,30 @@ Rake::TestTask.new do |test|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
task :build do
|
13
|
-
|
13
|
+
if ENV['report']
|
14
|
+
sh "ruby util/build report #{ENV['report']}"
|
15
|
+
elsif ENV['renderer']
|
16
|
+
sh "ruby util/build renderer #{ENV['renderer']}"
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
task :run do
|
17
21
|
sh "ruby lib/reports/#{ENV['report']}.rb"
|
18
22
|
end
|
23
|
+
|
24
|
+
task :use_utils do
|
25
|
+
raise "File lib/init_utils.rb exists!" if File.exist?('lib/init_utils.rb')
|
26
|
+
File.open('lib/init_utils.rb','w') { |f|
|
27
|
+
if ENV['only']
|
28
|
+
ENV['only'].split(',').each { |e|
|
29
|
+
f.puts "require 'ruport/util/#{e}'"
|
30
|
+
}
|
31
|
+
else
|
32
|
+
f.puts "require 'ruport/util'"
|
33
|
+
end
|
34
|
+
}
|
35
|
+
File.open('lib/init.rb','a') { |f|
|
36
|
+
f.puts '#comment out the line below to disable auto-loading of utils'
|
37
|
+
f.puts 'require "lib/init_utils.rb"'
|
38
|
+
}
|
39
|
+
end
|
@@ -1,9 +1,39 @@
|
|
1
1
|
begin
|
2
2
|
require "rubygems"
|
3
|
-
gem "ruport","=0.
|
3
|
+
gem "ruport","=0.9.6"
|
4
4
|
rescue LoadError
|
5
5
|
nil
|
6
6
|
end
|
7
7
|
require "ruport"
|
8
8
|
require "lib/helpers"
|
9
|
-
require "config/
|
9
|
+
require "config/environment"
|
10
|
+
|
11
|
+
class String
|
12
|
+
def /(other)
|
13
|
+
self + "/" + other
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Ruport::Report
|
18
|
+
|
19
|
+
def output_dir
|
20
|
+
config.output_dir or dir('output')
|
21
|
+
end
|
22
|
+
|
23
|
+
def data_dir
|
24
|
+
config.data_dir or dir('data')
|
25
|
+
end
|
26
|
+
|
27
|
+
def query_dir
|
28
|
+
config.query_dir or dir('sql')
|
29
|
+
end
|
30
|
+
|
31
|
+
def template_dir
|
32
|
+
config.template_dir or dir('templates')
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def dir(name)
|
37
|
+
"/Users/mikem836/sales_report/#{name}"
|
38
|
+
end
|
39
|
+
end
|
@@ -3,20 +3,16 @@ require "lib/init"
|
|
3
3
|
module MyModule
|
4
4
|
class SalesRenderer < Ruport::Renderer
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
required_option :report_title
|
6
|
+
option :report_title
|
9
7
|
required_option :titles
|
10
8
|
|
11
|
-
stage :document_header
|
12
|
-
stage :document_body
|
9
|
+
stage :document_header, :document_body
|
13
10
|
|
14
11
|
finalize :document
|
15
12
|
end
|
16
13
|
|
17
|
-
class Text < Ruport::
|
18
|
-
|
19
|
-
SalesRenderer.add_format self, :txt
|
14
|
+
class Text < Ruport::Formatter
|
15
|
+
renders :txt, :for => SalesRenderer
|
20
16
|
|
21
17
|
def pad(str, len)
|
22
18
|
return "".ljust(len) if str.nil?
|
@@ -50,20 +46,18 @@ module MyModule
|
|
50
46
|
output << "".ljust(75,"#") << "\n"
|
51
47
|
end
|
52
48
|
|
53
|
-
def finalize_document; output end
|
54
|
-
|
55
49
|
end
|
56
50
|
|
57
|
-
class PDF < Ruport::
|
58
|
-
|
51
|
+
class PDF < Ruport::Formatter::PDF
|
52
|
+
renders :pdf, :for => SalesRenderer
|
59
53
|
|
60
54
|
def add_title( title )
|
61
55
|
rounded_text_box("<b>#{title}</b>") do |o|
|
62
56
|
o.fill_color = Color::RGB::Gray80
|
63
57
|
o.radius = 5
|
64
|
-
o.width =
|
65
|
-
o.height =
|
66
|
-
o.font_size =
|
58
|
+
o.width = options.header_width || 200
|
59
|
+
o.height = options.header_height || 20
|
60
|
+
o.font_size = options.header_font_size || 12
|
67
61
|
o.x = pdf_writer.absolute_right_margin - o.width
|
68
62
|
o.y = pdf_writer.absolute_top_margin
|
69
63
|
end
|
@@ -86,7 +80,7 @@ module MyModule
|
|
86
80
|
end
|
87
81
|
|
88
82
|
def finalize_document
|
89
|
-
|
83
|
+
render_pdf
|
90
84
|
end
|
91
85
|
|
92
86
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
|
+
require 'lib/init.rb'
|
5
|
+
require "ruport/generator"
|
4
6
|
include FileUtils
|
5
|
-
|
6
|
-
def format_class_name(string)
|
7
|
-
string.downcase.split("_").map { |s| s.capitalize }.join
|
8
|
-
end
|
7
|
+
include Ruport::Generator::Helpers
|
9
8
|
|
10
9
|
unless ARGV.length > 1
|
11
10
|
puts "usage: build [command] [options]"
|
@@ -14,31 +13,23 @@ end
|
|
14
13
|
|
15
14
|
class_name = format_class_name(ARGV[1])
|
16
15
|
|
17
|
-
exit if File.exist? "lib/reports/#{ARGV[1]}.rb"
|
18
16
|
if ARGV[0].eql? "report"
|
17
|
+
check_for_files
|
19
18
|
File.open("lib/reports.rb", "a") { |f|
|
20
19
|
f.puts("require \"lib/reports/#{ARGV[1]}\"")
|
21
20
|
}
|
22
21
|
REP = <<EOR
|
23
22
|
require "lib/init"
|
24
23
|
class #{class_name} < Ruport::Report
|
25
|
-
|
26
|
-
def prepare
|
27
24
|
|
28
|
-
end
|
29
|
-
|
30
25
|
def generate
|
31
26
|
|
32
27
|
end
|
33
|
-
|
34
|
-
def cleanup
|
35
|
-
|
36
|
-
end
|
37
|
-
|
28
|
+
|
38
29
|
end
|
39
30
|
|
40
31
|
if __FILE__ == $0
|
41
|
-
|
32
|
+
puts #{class_name}.run
|
42
33
|
end
|
43
34
|
EOR
|
44
35
|
|
@@ -52,11 +43,54 @@ class Test#{class_name} < Test::Unit::TestCase
|
|
52
43
|
end
|
53
44
|
end
|
54
45
|
EOR
|
55
|
-
|
46
|
+
|
56
47
|
File.open("lib/reports/#{ARGV[1]}.rb", "w") { |f| f << REP }
|
48
|
+
puts "reports file: lib/reports/#{ARGV[1]}.rb"
|
57
49
|
puts "test file: test/test_#{ARGV[1]}.rb"
|
58
50
|
puts "class name: #{class_name}"
|
59
51
|
File.open("test/test_#{ARGV[1]}.rb","w") { |f| f << TEST }
|
52
|
+
|
53
|
+
elsif ARGV[0].eql? "renderer"
|
54
|
+
|
55
|
+
check_for_files
|
56
|
+
File.open("lib/renderers.rb","a") { |f|
|
57
|
+
f.puts("require \"lib/renderers/#{ARGV[1]}\"")
|
58
|
+
}
|
59
|
+
REP = <<EOR
|
60
|
+
require "lib/init"
|
61
|
+
|
62
|
+
class #{class_name} < Ruport::Renderer
|
63
|
+
stage :#{class_name.downcase}
|
64
|
+
end
|
65
|
+
|
66
|
+
class #{class_name}Formatter < Ruport::Formatter
|
67
|
+
|
68
|
+
# change to your format name, or add additional formats
|
69
|
+
renders :my_format, :for => #{class_name}
|
70
|
+
|
71
|
+
def build_#{class_name.downcase}
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
EOR
|
77
|
+
|
78
|
+
TEST = <<EOR
|
79
|
+
require "test/unit"
|
80
|
+
require "lib/renderers/#{ARGV[1]}"
|
81
|
+
|
82
|
+
class Test#{class_name} < Test::Unit::TestCase
|
83
|
+
def test_flunk
|
84
|
+
flunk "Write your real tests here or in any test/test_* file"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
EOR
|
88
|
+
puts "renderer file: lib/renderers/#{ARGV[1]}.rb"
|
89
|
+
File.open("lib/renderers/#{ARGV[1]}.rb", "w") { |f| f << REP }
|
90
|
+
puts "test file: test/test_#{ARGV[1]}.rb"
|
91
|
+
|
92
|
+
puts "class name: #{class_name}"
|
93
|
+
File.open("test/test_#{ARGV[1]}.rb","w") { |f| f << TEST }
|
60
94
|
else
|
61
95
|
puts "Incorrect usage."
|
62
96
|
end
|