newgem 0.14.2 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +5 -0
- data/Manifest.txt +2 -17
- data/config/hoe.rb +1 -1
- data/lib/newgem/version.rb +2 -2
- data/script/txt2html.rb +70 -0
- data/tasks/generator_report.rake +19 -0
- data/website/index.html +1 -1
- data/website/rubyforge.html +2 -2
- data/website/version-raw.js +1 -1
- data/website/version.js +1 -1
- metadata +5 -22
- data/rubygems_generators/application_generator/USAGE +0 -28
- data/rubygems_generators/application_generator/application_generator_generator.rb +0 -62
- data/rubygems_generators/application_generator/templates/bin +0 -12
- data/rubygems_generators/application_generator/templates/generator.rb +0 -69
- data/rubygems_generators/application_generator/templates/readme +0 -19
- data/rubygems_generators/application_generator/templates/test.rb +0 -43
- data/rubygems_generators/application_generator/templates/test_generator_helper.rb +0 -20
- data/rubygems_generators/application_generator/templates/usage +0 -5
- data/rubygems_generators/component_generator/USAGE +0 -29
- data/rubygems_generators/component_generator/component_generator_generator.rb +0 -52
- data/rubygems_generators/component_generator/templates/generator.rb +0 -51
- data/rubygems_generators/component_generator/templates/readme +0 -28
- data/rubygems_generators/component_generator/templates/test.rb +0 -43
- data/rubygems_generators/component_generator/templates/test_generator_helper.rb +0 -20
- data/rubygems_generators/component_generator/templates/usage +0 -5
- data/test/test_application_generator_generator.rb +0 -60
- data/test/test_generate_component_generator.rb +0 -67
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 0.15.0 2007-11-05
|
2
|
+
|
3
|
+
* Promoted 'application_generator' and 'component_generator' to Rubigen
|
4
|
+
from NewGem project (they are available even if newgem not installed)
|
5
|
+
|
1
6
|
== 0.14.2 2007-11-03
|
2
7
|
|
3
8
|
* Application generator inserts scopes passed in at cmd line, not app name
|
data/Manifest.txt
CHANGED
@@ -49,21 +49,6 @@ newgem_theme_generators/plain_theme/plain_theme_generator.rb
|
|
49
49
|
newgem_theme_generators/plain_theme/templates/website/javascripts/rounded_corners_lite.inc.js
|
50
50
|
newgem_theme_generators/plain_theme/templates/website/stylesheets/screen.css
|
51
51
|
newgem_theme_generators/plain_theme/templates/website/template.rhtml
|
52
|
-
rubygems_generators/application_generator/USAGE
|
53
|
-
rubygems_generators/application_generator/application_generator_generator.rb
|
54
|
-
rubygems_generators/application_generator/templates/bin
|
55
|
-
rubygems_generators/application_generator/templates/generator.rb
|
56
|
-
rubygems_generators/application_generator/templates/readme
|
57
|
-
rubygems_generators/application_generator/templates/test.rb
|
58
|
-
rubygems_generators/application_generator/templates/test_generator_helper.rb
|
59
|
-
rubygems_generators/application_generator/templates/usage
|
60
|
-
rubygems_generators/component_generator/USAGE
|
61
|
-
rubygems_generators/component_generator/component_generator_generator.rb
|
62
|
-
rubygems_generators/component_generator/templates/generator.rb
|
63
|
-
rubygems_generators/component_generator/templates/readme
|
64
|
-
rubygems_generators/component_generator/templates/test.rb
|
65
|
-
rubygems_generators/component_generator/templates/test_generator_helper.rb
|
66
|
-
rubygems_generators/component_generator/templates/usage
|
67
52
|
rubygems_generators/executable/USAGE
|
68
53
|
rubygems_generators/executable/executable_generator.rb
|
69
54
|
rubygems_generators/executable/templates/app.rb
|
@@ -79,15 +64,15 @@ rubygems_generators/install_rspec/templates/tasks/rspec.rake
|
|
79
64
|
script/destroy
|
80
65
|
script/generate
|
81
66
|
script/txt2html
|
67
|
+
script/txt2html.rb
|
82
68
|
script/txt2js
|
83
69
|
setup.rb
|
84
70
|
tasks/bundles.rake
|
85
71
|
tasks/deployment.rake
|
86
72
|
tasks/environment.rake
|
73
|
+
tasks/generator_report.rake
|
87
74
|
tasks/website.rake
|
88
|
-
test/test_application_generator_generator.rb
|
89
75
|
test/test_executable_generator.rb
|
90
|
-
test/test_generate_component_generator.rb
|
91
76
|
test/test_generator_helper.rb
|
92
77
|
test/test_helper.rb
|
93
78
|
test/test_install_jruby_generator.rb
|
data/config/hoe.rb
CHANGED
data/lib/newgem/version.rb
CHANGED
data/script/txt2html.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'redcloth'
|
5
|
+
require 'syntax/convertors/html'
|
6
|
+
require 'erb'
|
7
|
+
|
8
|
+
class Fixnum
|
9
|
+
def ordinal
|
10
|
+
# teens
|
11
|
+
return 'th' if (10..19).include?(self % 100)
|
12
|
+
# others
|
13
|
+
case self % 10
|
14
|
+
when 1: return 'st'
|
15
|
+
when 2: return 'nd'
|
16
|
+
when 3: return 'rd'
|
17
|
+
else return 'th'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Time
|
23
|
+
def pretty
|
24
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Txt2Html
|
29
|
+
def convert_syntax(syntax, source)
|
30
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
31
|
+
end
|
32
|
+
|
33
|
+
require File.dirname(__FILE__) + '/../lib/newgem/version.rb'
|
34
|
+
|
35
|
+
version = Newgem::VERSION::STRING
|
36
|
+
download = ENV['HOMEPAGE']
|
37
|
+
|
38
|
+
if ARGV.length >= 1
|
39
|
+
src, template = ARGV
|
40
|
+
template ||= File.dirname(__FILE__) + '/../website/template.rhtml'
|
41
|
+
|
42
|
+
else
|
43
|
+
puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
|
44
|
+
exit!
|
45
|
+
end
|
46
|
+
|
47
|
+
template = ERB.new(File.open(template).read)
|
48
|
+
|
49
|
+
title = nil
|
50
|
+
body = nil
|
51
|
+
File.open(src) do |fsrc|
|
52
|
+
title_text = fsrc.readline
|
53
|
+
body_text = fsrc.read
|
54
|
+
syntax_items = []
|
55
|
+
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
|
56
|
+
ident = syntax_items.length
|
57
|
+
element, syntax, source = $1, $2, $3
|
58
|
+
syntax_items << "<#{element} class=\"syntax\">#{convert_syntax(syntax, source)}</#{element}>"
|
59
|
+
"syntax-temp-#{ident}"
|
60
|
+
}
|
61
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
62
|
+
body = RedCloth.new(body_text).to_html
|
63
|
+
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
64
|
+
end
|
65
|
+
stat = File.stat(src)
|
66
|
+
created = stat.ctime
|
67
|
+
modified = stat.mtime
|
68
|
+
|
69
|
+
$stdout << template.result(binding)
|
70
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
desc 'Check that files included in generators match those in use by newgem itself'
|
2
|
+
task :generator_report do
|
3
|
+
files = [
|
4
|
+
%w( script/generate app_generators/newgem ),
|
5
|
+
%w( script/destroy app_generators/newgem ),
|
6
|
+
%w( tasks/deployment.rake app_generators/newgem ),
|
7
|
+
%w( tasks/environment.rake app_generators/newgem ),
|
8
|
+
%w( test/test_generator_helper.rb rubygems_generators/component_generator ),
|
9
|
+
%w( tasks/website.rake newgem_generators/website ),
|
10
|
+
]
|
11
|
+
# add "templates/#{source}" to each 2nd string
|
12
|
+
end
|
13
|
+
|
14
|
+
# def identical?(source, destination, &block)
|
15
|
+
# return false if File.directory? destination
|
16
|
+
# source = block_given? ? File.open(source) {|sf| yield(sf)} : IO.read(source)
|
17
|
+
# destination = IO.read(destination)
|
18
|
+
# source == destination
|
19
|
+
# end
|
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>New Gem Generator</h1>
|
34
34
|
<div id="version"> <!-- class="clickable" onclick='document.location = ""; return true' -->
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="" class="numbers">0.
|
36
|
+
<a href="" class="numbers">0.15.0</a>
|
37
37
|
<p>Featured in</p>
|
38
38
|
<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2FBeginning-Ruby-Novice-Professional-Experts%2Fdp%2F1590597664%2F&tag=drnic-20&linkCode=ur2&camp=1789&creative=9325" class="book"><img src="images/beginning-ruby.jpg" /></a>
|
39
39
|
</div>
|
data/website/rubyforge.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>New Gem Generator</h1>
|
34
34
|
<div id="version"> <!-- class="clickable" onclick='document.location = ""; return true' -->
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="" class="numbers">0.
|
36
|
+
<a href="" class="numbers">0.15.0</a>
|
37
37
|
<p>Featured in</p>
|
38
38
|
<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2FBeginning-Ruby-Novice-Professional-Experts%2Fdp%2F1590597664%2F&tag=drnic-20&linkCode=ur2&camp=1789&creative=9325" class="book"><img src="images/beginning-ruby.jpg" /></a>
|
39
39
|
</div>
|
@@ -263,7 +263,7 @@ OPTIONS
|
|
263
263
|
specify whether release_notes/changes are preformatted
|
264
264
|
</pre>
|
265
265
|
<p class="coda">
|
266
|
-
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>,
|
266
|
+
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 23rd June 2007<br>
|
267
267
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
268
268
|
</p>
|
269
269
|
</div>
|
data/website/version-raw.js
CHANGED
data/website/version.js
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4.3
|
|
3
3
|
specification_version: 1
|
4
4
|
name: newgem
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.15.0
|
7
|
+
date: 2007-11-05 00:00:00 -08:00
|
8
8
|
summary: Make your own gems at home
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -80,21 +80,6 @@ files:
|
|
80
80
|
- newgem_theme_generators/plain_theme/templates/website/javascripts/rounded_corners_lite.inc.js
|
81
81
|
- newgem_theme_generators/plain_theme/templates/website/stylesheets/screen.css
|
82
82
|
- newgem_theme_generators/plain_theme/templates/website/template.rhtml
|
83
|
-
- rubygems_generators/application_generator/USAGE
|
84
|
-
- rubygems_generators/application_generator/application_generator_generator.rb
|
85
|
-
- rubygems_generators/application_generator/templates/bin
|
86
|
-
- rubygems_generators/application_generator/templates/generator.rb
|
87
|
-
- rubygems_generators/application_generator/templates/readme
|
88
|
-
- rubygems_generators/application_generator/templates/test.rb
|
89
|
-
- rubygems_generators/application_generator/templates/test_generator_helper.rb
|
90
|
-
- rubygems_generators/application_generator/templates/usage
|
91
|
-
- rubygems_generators/component_generator/USAGE
|
92
|
-
- rubygems_generators/component_generator/component_generator_generator.rb
|
93
|
-
- rubygems_generators/component_generator/templates/generator.rb
|
94
|
-
- rubygems_generators/component_generator/templates/readme
|
95
|
-
- rubygems_generators/component_generator/templates/test.rb
|
96
|
-
- rubygems_generators/component_generator/templates/test_generator_helper.rb
|
97
|
-
- rubygems_generators/component_generator/templates/usage
|
98
83
|
- rubygems_generators/executable/USAGE
|
99
84
|
- rubygems_generators/executable/executable_generator.rb
|
100
85
|
- rubygems_generators/executable/templates/app.rb
|
@@ -110,15 +95,15 @@ files:
|
|
110
95
|
- script/destroy
|
111
96
|
- script/generate
|
112
97
|
- script/txt2html
|
98
|
+
- script/txt2html.rb
|
113
99
|
- script/txt2js
|
114
100
|
- setup.rb
|
115
101
|
- tasks/bundles.rake
|
116
102
|
- tasks/deployment.rake
|
117
103
|
- tasks/environment.rake
|
104
|
+
- tasks/generator_report.rake
|
118
105
|
- tasks/website.rake
|
119
|
-
- test/test_application_generator_generator.rb
|
120
106
|
- test/test_executable_generator.rb
|
121
|
-
- test/test_generate_component_generator.rb
|
122
107
|
- test/test_generator_helper.rb
|
123
108
|
- test/test_helper.rb
|
124
109
|
- test/test_install_jruby_generator.rb
|
@@ -140,9 +125,7 @@ files:
|
|
140
125
|
- website/version.js
|
141
126
|
- website/version.txt
|
142
127
|
test_files:
|
143
|
-
- test/test_application_generator_generator.rb
|
144
128
|
- test/test_executable_generator.rb
|
145
|
-
- test/test_generate_component_generator.rb
|
146
129
|
- test/test_generator_helper.rb
|
147
130
|
- test/test_helper.rb
|
148
131
|
- test/test_install_jruby_generator.rb
|
@@ -217,7 +200,7 @@ dependencies:
|
|
217
200
|
requirements:
|
218
201
|
- - ">="
|
219
202
|
- !ruby/object:Gem::Version
|
220
|
-
version: 1.0
|
203
|
+
version: 1.1.0
|
221
204
|
version:
|
222
205
|
- !ruby/object:Gem::Dependency
|
223
206
|
name: hoe
|
@@ -1,28 +0,0 @@
|
|
1
|
-
How to create an Application Generator
|
2
|
-
======================================
|
3
|
-
|
4
|
-
1. Create a new RubyGem (using newgem or hoe) or you can use an existing one.
|
5
|
-
2. Run the generator: script/generate application_generator foobar
|
6
|
-
3. Using the generated test class, assert what directories, files, classes etc should
|
7
|
-
be generated.
|
8
|
-
4. Add these files into the app_genearators/foobar/templates folder. Your files can use
|
9
|
-
ERb (that is, <%= ... %>).
|
10
|
-
5. Specify who the files in /templates are copied/templated at generation time within app_generators/foobar/foobar_generators.rb 's #manifest method.
|
11
|
-
Use m.file for files to copy over.
|
12
|
-
Use m.template for files containing ERb. Create attr_reader accessors for any variables your
|
13
|
-
templates need access to.
|
14
|
-
6. Run unit tests.
|
15
|
-
7. If your application generator uses other generators (m.dependency "gen-name", [arg1, arg2], :option1 => 'value')
|
16
|
-
then you must add this into the generated bin/foobar file.
|
17
|
-
For example, if you wanted to use a rubygems and/or merb generator, then replace the use_application_sources!
|
18
|
-
call in bin/foobar:
|
19
|
-
|
20
|
-
RubiGen::Base.use_application_sources! :rubygems, :merb
|
21
|
-
|
22
|
-
Without this, RubiGen will not be able to find your dependent generators.
|
23
|
-
8. Update your Manifest.txt with the new files (if you are using Hoe; using newgem? it uses Hoe; so you need to do this)
|
24
|
-
9. Build and install your RubyGem locally. Run: rake install_gem
|
25
|
-
10. Test your foobar application to ensure that it connects to the generator correctly and generates files.
|
26
|
-
11. Done.
|
27
|
-
|
28
|
-
You will see this message again after running the generator and by using the -h/--help option.
|
@@ -1,62 +0,0 @@
|
|
1
|
-
class ApplicationGeneratorGenerator < RubiGen::Base
|
2
|
-
|
3
|
-
default_options
|
4
|
-
|
5
|
-
attr_reader :name, :class_name, :generator_path, :scopes, :scope_str
|
6
|
-
|
7
|
-
def initialize(runtime_args, runtime_options = {})
|
8
|
-
super
|
9
|
-
usage if args.empty?
|
10
|
-
@name = args.shift
|
11
|
-
@scopes = args
|
12
|
-
@scopes = [name] if scopes.blank?
|
13
|
-
@scope_str = scopes.map { |scope| "'#{scope}'" }.join ', '
|
14
|
-
@class_name = "#{name}_generator".camelize
|
15
|
-
@generator_path = "app_generators"
|
16
|
-
extract_options
|
17
|
-
end
|
18
|
-
|
19
|
-
def manifest
|
20
|
-
path = "#{generator_path}/#{name}"
|
21
|
-
record do |m|
|
22
|
-
# Ensure appropriate generators folder exists
|
23
|
-
m.directory "#{path}/templates"
|
24
|
-
m.directory "bin"
|
25
|
-
m.directory "test"
|
26
|
-
|
27
|
-
# Generator stub
|
28
|
-
m.template "generator.rb", "#{path}/#{name}_generator.rb"
|
29
|
-
m.template "test.rb", "test/test_#{name}_generator.rb"
|
30
|
-
m.file "test_generator_helper.rb", "test/test_generator_helper.rb"
|
31
|
-
m.file "usage", "#{path}/USAGE"
|
32
|
-
m.template "bin", "bin/#{name}"
|
33
|
-
m.readme 'readme'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
protected
|
38
|
-
def banner
|
39
|
-
<<-EOS
|
40
|
-
Creates a application generator stub within your RubyGem.
|
41
|
-
|
42
|
-
Application Generators are used to create new applications
|
43
|
-
from scratch, and create the default scaffolding for
|
44
|
-
an application (directories) plus any starter files
|
45
|
-
that are useful to developers.
|
46
|
-
|
47
|
-
USAGE: #{$0} #{spec.name} name
|
48
|
-
EOS
|
49
|
-
end
|
50
|
-
|
51
|
-
def add_options!(opts)
|
52
|
-
# opts.separator ''
|
53
|
-
# opts.separator 'Options:'
|
54
|
-
# opts.on("-a", "--author=\"Your Name\"", String,
|
55
|
-
# "Generated app file will include your name.",
|
56
|
-
# "Default: none") { |options[:author]| }
|
57
|
-
end
|
58
|
-
|
59
|
-
def extract_options
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rubigen'
|
3
|
-
|
4
|
-
if %w(-v --version).include? ARGV.first
|
5
|
-
require 'newgem/version'
|
6
|
-
puts "#{File.basename($0)} #{Newgem::VERSION::STRING}"
|
7
|
-
exit(0)
|
8
|
-
end
|
9
|
-
|
10
|
-
require 'rubigen/scripts/generate'
|
11
|
-
RubiGen::Base.use_application_sources! <%= name.to_sym.inspect %>
|
12
|
-
RubiGen::Scripts::Generate.new.run(ARGV, :generator => '<%= name %>')
|
@@ -1,69 +0,0 @@
|
|
1
|
-
class <%= class_name %> < RubiGen::Base
|
2
|
-
|
3
|
-
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
4
|
-
Config::CONFIG['ruby_install_name'])
|
5
|
-
|
6
|
-
default_options :author => nil
|
7
|
-
|
8
|
-
attr_reader :name
|
9
|
-
|
10
|
-
def initialize(runtime_args, runtime_options = {})
|
11
|
-
super
|
12
|
-
usage if args.empty?
|
13
|
-
@destination_root = File.expand_path(args.shift)
|
14
|
-
@name = base_name
|
15
|
-
extract_options
|
16
|
-
end
|
17
|
-
|
18
|
-
def manifest
|
19
|
-
record do |m|
|
20
|
-
# Ensure appropriate folder(s) exists
|
21
|
-
m.directory ''
|
22
|
-
BASEDIRS.each { |path| m.directory path }
|
23
|
-
|
24
|
-
# Create stubs
|
25
|
-
# m.template "template.rb", "some_file_after_erb.rb"
|
26
|
-
# m.file "file", "some_file_copied"
|
27
|
-
|
28
|
-
m.dependency "install_rubigen_scripts", [destination_root, <%= scope_str %>],
|
29
|
-
:shebang => options[:shebang], :collision => :force
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
protected
|
34
|
-
def banner
|
35
|
-
<<-EOS
|
36
|
-
Creates a ...
|
37
|
-
|
38
|
-
USAGE: #{spec.name} name"
|
39
|
-
EOS
|
40
|
-
end
|
41
|
-
|
42
|
-
def add_options!(opts)
|
43
|
-
opts.separator ''
|
44
|
-
opts.separator 'Options:'
|
45
|
-
# For each option below, place the default
|
46
|
-
# at the top of the file next to "default_options"
|
47
|
-
# opts.on("-a", "--author=\"Your Name\"", String,
|
48
|
-
# "Some comment about this option",
|
49
|
-
# "Default: none") { |options[:author]| }
|
50
|
-
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
51
|
-
end
|
52
|
-
|
53
|
-
def extract_options
|
54
|
-
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
55
|
-
# Templates can access these value via the attr_reader-generated methods, but not the
|
56
|
-
# raw instance variable value.
|
57
|
-
# @author = options[:author]
|
58
|
-
end
|
59
|
-
|
60
|
-
# Installation skeleton. Intermediate directories are automatically
|
61
|
-
# created so don't sweat their absence here.
|
62
|
-
BASEDIRS = %w(
|
63
|
-
lib
|
64
|
-
log
|
65
|
-
script
|
66
|
-
test
|
67
|
-
tmp
|
68
|
-
)
|
69
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
How to create a Generator (aka Application Generator)
|
2
|
-
======================================
|
3
|
-
|
4
|
-
1. DONE - Run the generator: script/generate application_generator myapp
|
5
|
-
2. Using the generated test class, assert what directories, files, classes etc should
|
6
|
-
be generated.
|
7
|
-
3. Add these files into the app_genearators/myapp/templates folder. Your files can use
|
8
|
-
ERb (that is, <%= ... %>).
|
9
|
-
4. Specify who the files in /templates are copied/templated at generation time within app_genearators/myapp/myapp_generators.rb's #manifest method.
|
10
|
-
Use m.file for files to copy over.
|
11
|
-
Use m.template for files containing ERb. Create attr_reader accessors for any variables your
|
12
|
-
templates need access to.
|
13
|
-
5. Run unit tests.
|
14
|
-
6. Update your Manifest.txt with the new files (rake manifest:refresh)
|
15
|
-
7. Build and install your RubyGem locally. Run: rake install_gem
|
16
|
-
8. Go to a directory where you can create new test apps.
|
17
|
-
9. Run 'myapp [path]' and your application skeleton will be created.
|
18
|
-
|
19
|
-
See this message again using the -h/--help option.
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
-
|
3
|
-
class Test<%= class_name %> < Test::Unit::TestCase
|
4
|
-
include RubiGen::GeneratorTestHelper
|
5
|
-
|
6
|
-
def setup
|
7
|
-
bare_setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
bare_teardown
|
12
|
-
end
|
13
|
-
|
14
|
-
# Some generator-related assertions:
|
15
|
-
# assert_generated_file(name, &block) # block passed the file contents
|
16
|
-
# assert_directory_exists(name)
|
17
|
-
# assert_generated_class(name, &block)
|
18
|
-
# assert_generated_module(name, &block)
|
19
|
-
# assert_generated_test_for(name, &block)
|
20
|
-
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
21
|
-
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
22
|
-
#
|
23
|
-
# Other helper methods are:
|
24
|
-
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
25
|
-
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
26
|
-
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
27
|
-
|
28
|
-
def test_generator_without_options
|
29
|
-
run_generator('<%= name %>', [APP_ROOT], sources)
|
30
|
-
assert_directory_exists "path/to/included/folder"
|
31
|
-
assert_generated_file "path/to/included/folder/some_file"
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def sources
|
36
|
-
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
|
37
|
-
]
|
38
|
-
end
|
39
|
-
|
40
|
-
def generator_path
|
41
|
-
"<%= generator_path %>"
|
42
|
-
end
|
43
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
# Must set before requiring generator libs.
|
5
|
-
TMP_ROOT = File.dirname(__FILE__) + "/tmp" unless defined?(TMP_ROOT)
|
6
|
-
PROJECT_NAME = "myproject" unless defined?(PROJECT_NAME)
|
7
|
-
app_root = File.join(TMP_ROOT, PROJECT_NAME)
|
8
|
-
if defined?(APP_ROOT)
|
9
|
-
APP_ROOT.replace(app_root)
|
10
|
-
else
|
11
|
-
APP_ROOT = app_root
|
12
|
-
end
|
13
|
-
|
14
|
-
begin
|
15
|
-
require 'rubigen'
|
16
|
-
rescue LoadError
|
17
|
-
require 'rubygems'
|
18
|
-
require 'rubigen'
|
19
|
-
end
|
20
|
-
require 'rubigen/helpers/generator_test_helper'
|
@@ -1,29 +0,0 @@
|
|
1
|
-
How to create a Generator (aka Component Generator)
|
2
|
-
======================================
|
3
|
-
|
4
|
-
1. Run this generator: script/generate component_generator foobar rubygems
|
5
|
-
Where "foobar" is the name of the generator, and "rubygems" is the optional (but recommended)
|
6
|
-
scope. A scope of "rubygems" means this generator will only be available to RubyGems
|
7
|
-
developers. A scope of "merb" means the generator is only available to Merb applications, etc.
|
8
|
-
If you use "rails", then your generator WILL be accessible by Rails applications
|
9
|
-
for Edge Rails or Rails releases after 1.2.3 (due to patch in Rails' own generator system)
|
10
|
-
2. Using the generated test class, assert what directories, files, classes etc should
|
11
|
-
be generated.
|
12
|
-
3. Add these files into the rubygems_genearators/foobar/templates folder. Your files can use
|
13
|
-
ERb (that is, <%= ... %>).
|
14
|
-
4. Specify who the files in /templates are copied/templated at generation time within rubygems_genearators/foobar/foobar_generators.rb's #manifest method.
|
15
|
-
Use m.file for files to copy over.
|
16
|
-
Use m.template for files containing ERb. Create attr_reader accessors for any variables your
|
17
|
-
templates need access to.
|
18
|
-
5. Run unit tests.
|
19
|
-
6. If your generator uses other generators (m.dependency "gen-name", [arg1, arg2], :option1 => 'value')
|
20
|
-
it should only use generates from the same scope ('rubygems' in this example),
|
21
|
-
otherwise RubiGen may not be able to find the dependent generators.
|
22
|
-
7. Update your Manifest.txt with the new files (if you are using Hoe; using newgem? it uses Hoe; so you need to do this)
|
23
|
-
8. Build and install your RubyGem locally. Run: rake install_gem
|
24
|
-
9. Go to a work area whose script/generate is scoped to 'rubygems' (e.g. a RubyGem scaffold created by newgem has a script/generate that can use rubygems, newgem, and newgem_template scoped generators)
|
25
|
-
10. Run "script/generate" and your generator should appear in the list of available generators.
|
26
|
-
11. Run "script/generate foobar" to see the options and usage information for your generator.
|
27
|
-
12. Run "script/generator foobar arguments" to execute the generator.
|
28
|
-
|
29
|
-
You will see this message again when you run the generator and by using the -h/--help option.
|
@@ -1,52 +0,0 @@
|
|
1
|
-
class ComponentGeneratorGenerator < RubiGen::Base
|
2
|
-
|
3
|
-
default_options
|
4
|
-
|
5
|
-
attr_reader :name, :class_name, :generator_type, :generator_path
|
6
|
-
|
7
|
-
def initialize(runtime_args, runtime_options = {})
|
8
|
-
super
|
9
|
-
usage if args.empty?
|
10
|
-
@name = args.shift
|
11
|
-
@class_name = "#{name}_generator".camelize
|
12
|
-
@generator_type = args.shift # optional
|
13
|
-
@generator_path = @generator_type ? "#{generator_type}_generators" : "generators"
|
14
|
-
extract_options
|
15
|
-
end
|
16
|
-
|
17
|
-
def manifest
|
18
|
-
path = "#{generator_path}/#{name}"
|
19
|
-
record do |m|
|
20
|
-
# Ensure appropriate generators folder exists
|
21
|
-
m.directory "#{path}/templates"
|
22
|
-
m.directory "test"
|
23
|
-
|
24
|
-
# Generator stub
|
25
|
-
m.template "generator.rb", "#{path}/#{name}_generator.rb"
|
26
|
-
m.template "test.rb", "test/test_#{name}_generator.rb"
|
27
|
-
m.file "test_generator_helper.rb", "test/test_generator_helper.rb"
|
28
|
-
m.file "usage", "#{path}/USAGE"
|
29
|
-
m.readme 'readme'
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
protected
|
34
|
-
def banner
|
35
|
-
<<-EOS
|
36
|
-
Creates a generator stub within your RubyGem.
|
37
|
-
|
38
|
-
USAGE: #{$0} #{spec.name} name [generator_type]
|
39
|
-
EOS
|
40
|
-
end
|
41
|
-
|
42
|
-
def add_options!(opts)
|
43
|
-
# opts.separator ''
|
44
|
-
# opts.separator 'Options:'
|
45
|
-
# opts.on("-a", "--author=\"Your Name\"", String,
|
46
|
-
# "Generated app file will include your name.",
|
47
|
-
# "Default: none") { |options[:author]| }
|
48
|
-
end
|
49
|
-
|
50
|
-
def extract_options
|
51
|
-
end
|
52
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
class <%= class_name %> < RubiGen::Base
|
2
|
-
|
3
|
-
default_options :author => nil
|
4
|
-
|
5
|
-
attr_reader :name
|
6
|
-
|
7
|
-
def initialize(runtime_args, runtime_options = {})
|
8
|
-
super
|
9
|
-
usage if args.empty?
|
10
|
-
@name = args.shift
|
11
|
-
extract_options
|
12
|
-
end
|
13
|
-
|
14
|
-
def manifest
|
15
|
-
record do |m|
|
16
|
-
# Ensure appropriate folder(s) exists
|
17
|
-
m.directory 'some_folder'
|
18
|
-
|
19
|
-
# Create stubs
|
20
|
-
# m.template "template.rb", "some_file_after_erb.rb"
|
21
|
-
# m.file "file", "some_file_copied"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
def banner
|
27
|
-
<<-EOS
|
28
|
-
Creates a ...
|
29
|
-
|
30
|
-
USAGE: #{$0} #{spec.name} name"
|
31
|
-
EOS
|
32
|
-
end
|
33
|
-
|
34
|
-
def add_options!(opts)
|
35
|
-
# opts.separator ''
|
36
|
-
# opts.separator 'Options:'
|
37
|
-
# For each option below, place the default
|
38
|
-
# at the top of the file next to "default_options"
|
39
|
-
# opts.on("-a", "--author=\"Your Name\"", String,
|
40
|
-
# "Some comment about this option",
|
41
|
-
# "Default: none") { |options[:author]| }
|
42
|
-
# opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
43
|
-
end
|
44
|
-
|
45
|
-
def extract_options
|
46
|
-
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
47
|
-
# Templates can access these value via the attr_reader-generated methods, but not the
|
48
|
-
# raw instance variable value.
|
49
|
-
# @author = options[:author]
|
50
|
-
end
|
51
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
How to create an Application Generator
|
2
|
-
======================================
|
3
|
-
|
4
|
-
1. DONE - Create a new RubyGem (using newgem or hoe) or you can use an existing one.
|
5
|
-
2. DONE - Run the generator: script/generate application_generator foobar
|
6
|
-
3. Using the generated test class, assert what directories, files, classes etc should
|
7
|
-
be generated.
|
8
|
-
4. Add these files into the app_genearators/foobar/templates folder. Your files can use
|
9
|
-
ERb (that is, <%= ... %>).
|
10
|
-
5. Specify who the files in /templates are copied/templated at generation time within app_generators/foobar/foobar_generators.rb 's #manifest method.
|
11
|
-
Use m.file for files to copy over.
|
12
|
-
Use m.template for files containing ERb. Create attr_reader accessors for any variables your
|
13
|
-
templates need access to.
|
14
|
-
6. Run unit tests.
|
15
|
-
7. If your application generator uses other generators (m.dependency "gen-name", [arg1, arg2], :option1 => 'value')
|
16
|
-
then you must add this into the generated bin/foobar file.
|
17
|
-
For example, if you wanted to use a rubygems and/or merb generator, then replace the use_application_sources!
|
18
|
-
call in bin/foobar:
|
19
|
-
|
20
|
-
RubiGen::Base.use_application_sources! :rubygems, :merb
|
21
|
-
|
22
|
-
Without this, RubiGen will not be able to find your dependent generators.
|
23
|
-
8. Update your Manifest.txt with the new files (if you are using Hoe; using newgem? it uses Hoe; so you need to do this)
|
24
|
-
9. Build and install your RubyGem locally. Run: rake install_gem
|
25
|
-
10. Test your foobar application to ensure that it connects to the generator correctly and generates files.
|
26
|
-
11. Done.
|
27
|
-
|
28
|
-
See this message again using the -h/--help option.
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
-
|
3
|
-
class Test<%= class_name %> < Test::Unit::TestCase
|
4
|
-
include RubiGen::GeneratorTestHelper
|
5
|
-
|
6
|
-
def setup
|
7
|
-
bare_setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
bare_teardown
|
12
|
-
end
|
13
|
-
|
14
|
-
# Some generator-related assertions:
|
15
|
-
# assert_generated_file(name, &block) # block passed the file contents
|
16
|
-
# assert_directory_exists(name)
|
17
|
-
# assert_generated_class(name, &block)
|
18
|
-
# assert_generated_module(name, &block)
|
19
|
-
# assert_generated_test_for(name, &block)
|
20
|
-
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
21
|
-
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
22
|
-
#
|
23
|
-
# Other helper methods are:
|
24
|
-
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
25
|
-
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
26
|
-
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
27
|
-
|
28
|
-
def test_generator_without_options
|
29
|
-
name = "myapp"
|
30
|
-
run_generator('<%= name %>', [name], sources)
|
31
|
-
assert_generated_file("some_file")
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def sources
|
36
|
-
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
|
37
|
-
]
|
38
|
-
end
|
39
|
-
|
40
|
-
def generator_path
|
41
|
-
"<%= generator_path %>"
|
42
|
-
end
|
43
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
# Must set before requiring generator libs.
|
5
|
-
TMP_ROOT = File.dirname(__FILE__) + "/tmp" unless defined?(TMP_ROOT)
|
6
|
-
PROJECT_NAME = "myproject" unless defined?(PROJECT_NAME)
|
7
|
-
app_root = File.join(TMP_ROOT, PROJECT_NAME)
|
8
|
-
if defined?(APP_ROOT)
|
9
|
-
APP_ROOT.replace(app_root)
|
10
|
-
else
|
11
|
-
APP_ROOT = app_root
|
12
|
-
end
|
13
|
-
|
14
|
-
begin
|
15
|
-
require 'rubigen'
|
16
|
-
rescue LoadError
|
17
|
-
require 'rubygems'
|
18
|
-
require 'rubigen'
|
19
|
-
end
|
20
|
-
require 'rubigen/helpers/generator_test_helper'
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
-
|
3
|
-
class TestApplicationGeneratorGenerator < Test::Unit::TestCase
|
4
|
-
include RubiGen::GeneratorTestHelper
|
5
|
-
|
6
|
-
def setup
|
7
|
-
bare_setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
bare_teardown
|
12
|
-
end
|
13
|
-
|
14
|
-
# Some generator-related assertions:
|
15
|
-
# assert_generated_file(name, &block) # block passed the file contents
|
16
|
-
# assert_directory_exists(name)
|
17
|
-
# assert_generated_class(name, &block)
|
18
|
-
# assert_generated_module(name, &block)
|
19
|
-
# assert_generated_test_for(name, &block)
|
20
|
-
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
21
|
-
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
22
|
-
#
|
23
|
-
# Other helper methods are:
|
24
|
-
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
25
|
-
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
26
|
-
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
27
|
-
|
28
|
-
def test_generator_without_options
|
29
|
-
name = "genname"
|
30
|
-
run_generator('application_generator', [name], sources)
|
31
|
-
|
32
|
-
assert_directory_exists "app_generators"
|
33
|
-
assert_directory_exists "app_generators/#{name}"
|
34
|
-
assert_directory_exists "app_generators/#{name}/templates"
|
35
|
-
assert_generated_file "app_generators/#{name}/USAGE"
|
36
|
-
assert_generated_class "app_generators/#{name}/#{name}_generator" do |body|
|
37
|
-
assert_has_method "manifest"
|
38
|
-
end
|
39
|
-
assert_generated_test_for("#{name}_generator") do |body|
|
40
|
-
assert_has_method body, "setup"
|
41
|
-
assert_has_method body, "teardown"
|
42
|
-
assert_has_method body, "test_generator_without_options"
|
43
|
-
assert_has_method body, "sources"
|
44
|
-
assert_has_method body, "generator_path"
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_directory_exists "bin"
|
48
|
-
assert_generated_file "bin/#{name}"
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
def sources
|
53
|
-
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
|
54
|
-
]
|
55
|
-
end
|
56
|
-
|
57
|
-
def generator_path
|
58
|
-
"rubygems_generators"
|
59
|
-
end
|
60
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
-
|
3
|
-
class TestGenerateComponentGenerator < Test::Unit::TestCase
|
4
|
-
include RubiGen::GeneratorTestHelper
|
5
|
-
|
6
|
-
def setup
|
7
|
-
bare_setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
bare_teardown
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_generator_without_options
|
15
|
-
name = "genname"
|
16
|
-
run_generator('component_generator', [name], sources)
|
17
|
-
assert_generated_file("generators/#{name}/#{name}_generator.rb")
|
18
|
-
assert_generated_file("generators/#{name}/USAGE")
|
19
|
-
assert_generated_file("test/test_#{name}_generator.rb")
|
20
|
-
assert_generated_file("test/test_generator_helper.rb")
|
21
|
-
assert_directory_exists("generators/#{name}/templates")
|
22
|
-
assert_generated_class("generators/#{name}/#{name}_generator") do |body|
|
23
|
-
# assert_has_method body, "initialize" # as_has_m cannot pickup initialize(...) only initialize
|
24
|
-
assert_has_method body, "manifest"
|
25
|
-
end
|
26
|
-
assert_generated_class("test/test_#{name}_generator") do |body|
|
27
|
-
assert_has_method body, "setup"
|
28
|
-
assert_has_method body, "teardown"
|
29
|
-
assert_has_method body, "test_generator_without_options"
|
30
|
-
assert_has_method body, "sources"
|
31
|
-
assert_has_method body, "generator_path"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_generator_with_generator_type
|
36
|
-
name = "genname"
|
37
|
-
gen_type = "fooapp"
|
38
|
-
run_generator('component_generator', [name, gen_type], sources)
|
39
|
-
|
40
|
-
assert_generated_file "#{gen_type}_generators/#{name}/#{name}_generator.rb"
|
41
|
-
assert_generated_file "#{gen_type}_generators/#{name}/USAGE"
|
42
|
-
assert_generated_file "test/test_#{name}_generator.rb"
|
43
|
-
assert_generated_file "test/test_generator_helper.rb"
|
44
|
-
assert_directory_exists "#{gen_type}_generators/#{name}/templates"
|
45
|
-
assert_generated_class "#{gen_type}_generators/#{name}/#{name}_generator" do |body|
|
46
|
-
# assert_has_method body, "initialize" # as_has_m cannot pickup initialize(...) only initialize
|
47
|
-
assert_has_method body, "manifest"
|
48
|
-
end
|
49
|
-
assert_generated_class "test/test_#{name}_generator" do |body|
|
50
|
-
assert_has_method body, "setup"
|
51
|
-
assert_has_method body, "teardown"
|
52
|
-
assert_has_method body, "test_generator_without_options"
|
53
|
-
assert_has_method body, "sources"
|
54
|
-
assert_has_method body, "generator_path"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
def sources
|
60
|
-
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"../#{generator_path}"))
|
61
|
-
]
|
62
|
-
end
|
63
|
-
|
64
|
-
def generator_path
|
65
|
-
"rubygems_generators"
|
66
|
-
end
|
67
|
-
end
|