newgem 0.11.0 → 0.13.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.
Files changed (102) hide show
  1. data/History.txt +42 -0
  2. data/Manifest.txt +84 -17
  3. data/README.txt +3 -2
  4. data/Rakefile +4 -106
  5. data/Todo.txt +1 -1
  6. data/app_generators/newgem/newgem_generator.rb +172 -0
  7. data/{templates → app_generators/newgem/templates}/History.txt +1 -1
  8. data/{templates → app_generators/newgem/templates}/License.txt +1 -1
  9. data/app_generators/newgem/templates/README.txt +1 -0
  10. data/app_generators/newgem/templates/Rakefile +4 -0
  11. data/{templates → app_generators/newgem/templates}/app.rb +3 -3
  12. data/app_generators/newgem/templates/config/hoe.rb +73 -0
  13. data/app_generators/newgem/templates/config/requirements.rb +17 -0
  14. data/app_generators/newgem/templates/empty.log +0 -0
  15. data/app_generators/newgem/templates/module.rb +5 -0
  16. data/app_generators/newgem/templates/script/destroy +14 -0
  17. data/app_generators/newgem/templates/script/generate +14 -0
  18. data/{templates → app_generators/newgem/templates}/setup.rb +0 -0
  19. data/{templates → app_generators/newgem/templates}/spec.opts +0 -0
  20. data/{templates → app_generators/newgem/templates}/spec.rb +0 -0
  21. data/app_generators/newgem/templates/tasks/deployment.rake +27 -0
  22. data/app_generators/newgem/templates/tasks/environment.rake +7 -0
  23. data/app_generators/newgem/templates/tasks/website.rake +9 -0
  24. data/{templates → app_generators/newgem/templates}/test.rb +1 -1
  25. data/app_generators/newgem/templates/test_helper.rb +2 -0
  26. data/app_generators/newgem/templates/version.rb +9 -0
  27. data/bin/newgem +9 -272
  28. data/bundles/RubyGem.tmbundle/Snippets/History header trunk.tmSnippet +18 -0
  29. data/bundles/RubyGem.tmbundle/Snippets/History header.tmSnippet +18 -0
  30. data/bundles/RubyGem.tmbundle/Syntaxes/Rdoc.tmLanguage +70 -0
  31. data/bundles/RubyGem.tmbundle/info.plist +16 -0
  32. data/config/hoe.rb +48 -0
  33. data/config/svn_branch.rb +15 -0
  34. data/lib/newgem.rb +2 -3
  35. data/lib/newgem/quick_template.rb +28 -0
  36. data/lib/newgem/tasks.rb +1 -0
  37. data/lib/newgem/version.rb +1 -1
  38. data/newgem_generators/install_website/USAGE +5 -0
  39. data/newgem_generators/install_website/install_website_generator.rb +76 -0
  40. data/{templates/scripts → newgem_generators/install_website/templates/script}/txt2html +15 -8
  41. data/newgem_generators/install_website/templates/tasks/website.rake +17 -0
  42. data/{templates → newgem_generators/install_website/templates}/website/index.html +2 -2
  43. data/newgem_generators/install_website/templates/website/index.txt +39 -0
  44. data/newgem_theme_generators/plain/USAGE +5 -0
  45. data/newgem_theme_generators/plain/plain_generator.rb +54 -0
  46. data/{templates → newgem_theme_generators/plain/templates}/website/javascripts/rounded_corners_lite.inc.js +0 -0
  47. data/{templates → newgem_theme_generators/plain/templates}/website/stylesheets/screen.css +0 -0
  48. data/{templates → newgem_theme_generators/plain/templates}/website/template.rhtml +6 -6
  49. data/rubygems_generators/application_generator/USAGE +28 -0
  50. data/rubygems_generators/application_generator/application_generator_generator.rb +58 -0
  51. data/rubygems_generators/application_generator/templates/bin +12 -0
  52. data/rubygems_generators/application_generator/templates/generator.rb +51 -0
  53. data/rubygems_generators/application_generator/templates/readme +24 -0
  54. data/rubygems_generators/application_generator/templates/test.rb +43 -0
  55. data/rubygems_generators/application_generator/templates/test_generator_helper.rb +19 -0
  56. data/rubygems_generators/application_generator/templates/usage +5 -0
  57. data/rubygems_generators/component_generator/USAGE +29 -0
  58. data/rubygems_generators/component_generator/component_generator_generator.rb +52 -0
  59. data/rubygems_generators/component_generator/templates/generator.rb +51 -0
  60. data/rubygems_generators/component_generator/templates/readme +28 -0
  61. data/rubygems_generators/component_generator/templates/test.rb +43 -0
  62. data/rubygems_generators/component_generator/templates/test_generator_helper.rb +19 -0
  63. data/rubygems_generators/component_generator/templates/usage +5 -0
  64. data/rubygems_generators/executable/executable_generator.rb +53 -0
  65. data/rubygems_generators/executable/templates/app.rb +44 -0
  66. data/rubygems_generators/install_jruby/USAGE +5 -0
  67. data/rubygems_generators/install_jruby/install_jruby_generator.rb +48 -0
  68. data/rubygems_generators/install_jruby/templates/tasks/jruby.rake +7 -0
  69. data/rubygems_generators/install_rspec/USAGE +5 -0
  70. data/rubygems_generators/install_rspec/install_rspec_generator.rb +55 -0
  71. data/rubygems_generators/install_rspec/templates/spec.rb +11 -0
  72. data/rubygems_generators/install_rspec/templates/spec/spec.opts +1 -0
  73. data/rubygems_generators/install_rspec/templates/spec/spec_helper.rb +7 -0
  74. data/rubygems_generators/install_rspec/templates/tasks/rspec.rake +21 -0
  75. data/script/destroy +14 -0
  76. data/script/generate +14 -0
  77. data/{scripts → script}/txt2html +3 -3
  78. data/{scripts → script}/txt2js +0 -0
  79. data/tasks/bundles.rake +12 -0
  80. data/tasks/deployment.rake +27 -0
  81. data/tasks/environment.rake +7 -0
  82. data/tasks/website.rake +19 -0
  83. data/test/test_application_generator_generator.rb +60 -0
  84. data/test/test_executable_generator.rb +28 -0
  85. data/test/test_generate_component_generator.rb +67 -0
  86. data/test/test_generator_helper.rb +19 -0
  87. data/test/test_install_jruby_generator.rb +29 -0
  88. data/test/test_install_rspec_generator.rb +33 -0
  89. data/test/test_install_website_generator.rb +50 -0
  90. data/test/test_newgem_generator.rb +120 -0
  91. data/test/test_plain_generator.rb +37 -0
  92. data/website/images/beginning-ruby.jpg +0 -0
  93. data/website/index.html +8 -6
  94. data/website/index.txt +4 -2
  95. data/website/rubyforge.html +3 -3
  96. data/website/version-raw.js +1 -1
  97. data/website/version.js +1 -1
  98. metadata +111 -27
  99. data/templates/Manifest.txt +0 -15
  100. data/templates/Rakefile +0 -123
  101. data/templates/website/index.txt +0 -38
  102. data/test/test_svn.rb +0 -13
data/History.txt CHANGED
@@ -1,3 +1,45 @@
1
+ == 0.13.0 2007-08-20
2
+
3
+ * HIGHLIGHT - RubiGen integration - using a Rails-like generator
4
+ * Now, each RubyGem has script/generate to access Rails-like generators too!!!
5
+ * newgem can be run ontop of existing RubyGems and all is not destroyed!
6
+ * Various included generators (application_generator, component_generator)
7
+ * Website creation is now a generator, and is optionally included via newgem -w
8
+ * Rspec support is now a generator, and is optionally included via newgem -t rspec
9
+ * JRuby support is now a generator, and is optionally included via newgem -j
10
+ * The Rakefile is now <5 lines - all config is in config/hoe.rb
11
+ * Generated gems:
12
+ * Started to add jruby specific features (-j option)
13
+ * Gems named xxx-1.2.3-jruby.gem
14
+ * Includes: require 'java'
15
+ * Add link to website for Using New Gem on Windows (without cygwin) [thx Jorge Cangas]
16
+ * index.txt "email me" now refers to forum url as well
17
+ * NewGem
18
+ * An error message is shown if Hoe gem isn't available when running rake on the gem
19
+ * Lots of tasks refactored into /tasks folder
20
+ * How To UPGRADE
21
+ * NOTE: We've never had a "How to Upgrade" before! :)
22
+ * Copy your Rakefile to Rakefile.old (to retain your configuration)
23
+ * Run: newgem .
24
+ * Press 'a' to allow all changes.
25
+ * Open config/hoe.rb
26
+ * Replace this with the equivalent lines/details from Rakefile.old
27
+ * Test all is well with "rake -T" and "rake check_manifest" (the manifest should have
28
+ been rebuilt by 'newgem .')
29
+
30
+ == 0.12.0 2007-06-24
31
+
32
+ * 2 major enhancement
33
+ * Using Erb for templates [thx http://snippets.dzone.com/posts/show/1723]
34
+ * RubyGem.tmbundle for TextMate - to install go to gem folder and run "rake bundles:tm"
35
+ * 1 minor enhancement
36
+ * -V option shows current newgem version [thx Gert Goet]
37
+ * Hoe#extra_deps permanently changes @extra_deps [thx MIYAMUKO Katsuyuki]
38
+ * Dev improvements
39
+ * Imports svn_branch for svn rake tasks
40
+ * Minor website changes
41
+ * Added link to Topfunky's tutorial on Hoe
42
+
1
43
  == 0.11.0
2
44
 
3
45
  * 1 major enhancement
data/Manifest.txt CHANGED
@@ -4,31 +4,98 @@ Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
6
  Todo.txt
7
+ app_generators/newgem/newgem_generator.rb
8
+ app_generators/newgem/templates/History.txt
9
+ app_generators/newgem/templates/License.txt
10
+ app_generators/newgem/templates/README.txt
11
+ app_generators/newgem/templates/Rakefile
12
+ app_generators/newgem/templates/app.rb
13
+ app_generators/newgem/templates/config/hoe.rb
14
+ app_generators/newgem/templates/config/requirements.rb
15
+ app_generators/newgem/templates/empty.log
16
+ app_generators/newgem/templates/module.rb
17
+ app_generators/newgem/templates/script/destroy
18
+ app_generators/newgem/templates/script/generate
19
+ app_generators/newgem/templates/setup.rb
20
+ app_generators/newgem/templates/spec.opts
21
+ app_generators/newgem/templates/spec.rb
22
+ app_generators/newgem/templates/tasks/deployment.rake
23
+ app_generators/newgem/templates/tasks/environment.rake
24
+ app_generators/newgem/templates/tasks/website.rake
25
+ app_generators/newgem/templates/test.rb
26
+ app_generators/newgem/templates/test_helper.rb
27
+ app_generators/newgem/templates/version.rb
7
28
  bin/newgem
29
+ bundles/RubyGem.tmbundle/Snippets/History header trunk.tmSnippet
30
+ bundles/RubyGem.tmbundle/Snippets/History header.tmSnippet
31
+ bundles/RubyGem.tmbundle/Syntaxes/Rdoc.tmLanguage
32
+ bundles/RubyGem.tmbundle/info.plist
33
+ config/hoe.rb
34
+ config/svn_branch.rb
8
35
  install.rb
9
36
  lib/newgem.rb
37
+ lib/newgem/quick_template.rb
10
38
  lib/newgem/rubyforge.rb
39
+ lib/newgem/tasks.rb
11
40
  lib/newgem/version.rb
12
- scripts/txt2html
13
- scripts/txt2js
41
+ newgem_generators/install_website/USAGE
42
+ newgem_generators/install_website/install_website_generator.rb
43
+ newgem_generators/install_website/templates/script/txt2html
44
+ newgem_generators/install_website/templates/tasks/website.rake
45
+ newgem_generators/install_website/templates/website/index.html
46
+ newgem_generators/install_website/templates/website/index.txt
47
+ newgem_theme_generators/plain/USAGE
48
+ newgem_theme_generators/plain/plain_generator.rb
49
+ newgem_theme_generators/plain/templates/website/javascripts/rounded_corners_lite.inc.js
50
+ newgem_theme_generators/plain/templates/website/stylesheets/screen.css
51
+ newgem_theme_generators/plain/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
+ rubygems_generators/executable/executable_generator.rb
68
+ rubygems_generators/executable/templates/app.rb
69
+ rubygems_generators/install_jruby/USAGE
70
+ rubygems_generators/install_jruby/install_jruby_generator.rb
71
+ rubygems_generators/install_jruby/templates/tasks/jruby.rake
72
+ rubygems_generators/install_rspec/USAGE
73
+ rubygems_generators/install_rspec/install_rspec_generator.rb
74
+ rubygems_generators/install_rspec/templates/spec.rb
75
+ rubygems_generators/install_rspec/templates/spec/spec.opts
76
+ rubygems_generators/install_rspec/templates/spec/spec_helper.rb
77
+ rubygems_generators/install_rspec/templates/tasks/rspec.rake
78
+ script/destroy
79
+ script/generate
80
+ script/txt2html
81
+ script/txt2js
14
82
  setup.rb
15
- templates/History.txt
16
- templates/License.txt
17
- templates/Manifest.txt
18
- templates/Rakefile
19
- templates/app.rb
20
- templates/scripts/txt2html
21
- templates/setup.rb
22
- templates/spec.opts
23
- templates/spec.rb
24
- templates/test.rb
25
- templates/website/index.html
26
- templates/website/index.txt
27
- templates/website/javascripts/rounded_corners_lite.inc.js
28
- templates/website/stylesheets/screen.css
29
- templates/website/template.rhtml
83
+ tasks/bundles.rake
84
+ tasks/deployment.rake
85
+ tasks/environment.rake
86
+ tasks/website.rake
87
+ test/test_application_generator_generator.rb
88
+ test/test_executable_generator.rb
89
+ test/test_generate_component_generator.rb
90
+ test/test_generator_helper.rb
30
91
  test/test_helper.rb
92
+ test/test_install_jruby_generator.rb
93
+ test/test_install_rspec_generator.rb
94
+ test/test_install_website_generator.rb
31
95
  test/test_newgem.rb
96
+ test/test_newgem_generator.rb
97
+ test/test_plain_generator.rb
98
+ website/images/beginning-ruby.jpg
32
99
  website/index.html
33
100
  website/index.txt
34
101
  website/javascripts/rounded_corners_lite.inc.js
data/README.txt CHANGED
@@ -28,7 +28,7 @@ creating: wizzo
28
28
  creating: wizzo/CHANGELOG.txt
29
29
  creating: wizzo/README.txt
30
30
  creating: wizzo/lib
31
- creating: wizzo/scripts
31
+ creating: wizzo/script
32
32
  creating: wizzo/website
33
33
  creating: wizzo/website/javascripts
34
34
  creating: wizzo/website/stylesheets
@@ -44,7 +44,8 @@ creating: wizzo/setup.rb
44
44
  creating: wizzo/Rakefile
45
45
  creating: wizzo/Manifest.txt
46
46
  creating: wizzo/History.txt
47
- creating: wizzo/scripts/txt2html
47
+ creating: wizzo/script/generate
48
+ creating: wizzo/script/txt2html
48
49
  creating: wizzo/website/index.txt
49
50
  creating: wizzo/website/template.rhtml
50
51
  copying: wizzo/website/javascripts/rounded_corners_lite.inc.js
data/Rakefile CHANGED
@@ -1,113 +1,11 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
  require 'rake/clean'
4
- require 'rake/testtask'
5
- require 'rake/packagetask'
6
- require 'rake/gempackagetask'
7
- require 'rake/rdoctask'
8
- require 'rake/contrib/rubyforgepublisher'
9
4
  require 'fileutils'
10
- require 'hoe'
11
5
  include FileUtils
12
- require File.join(File.dirname(__FILE__), 'lib', 'newgem', 'version')
13
6
 
14
- AUTHOR = "Dr Nic Williams"
15
- EMAIL = "drnicwilliams@gmail.com"
16
- DESCRIPTION = "Make your own gems at home"
17
- GEM_NAME = "newgem" # what ppl will type to install your gem
18
- config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
19
- RUBYFORGE_USERNAME = config["username"]
20
- RUBYFORGE_PROJECT = "newgem"
21
- HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
22
- DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
7
+ $:.unshift 'lib'
8
+ require 'config/hoe' # setup Hoe + all gem configuration
9
+ require 'config/svn_branch' # install svn_branch tasks if gem available
10
+ require 'newgem/tasks' # load /tasks/*.rake
23
11
 
24
- REV = nil #File.read(".svn/entries")[/committed-rev="(\d+)"/, 1] rescue nil
25
- # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
26
- VERS = Newgem::VERSION::STRING + (REV ? ".#{REV}" : "")
27
- CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
28
- RDOC_OPTS = ['--quiet', '--title', "newgem documentation",
29
- "--opname", "index.html",
30
- "--line-numbers",
31
- "--main", "README",
32
- "--inline-source"]
33
-
34
- # Generate all the Rake tasks
35
- # Run 'rake -T' to see list of generated tasks (from gem root directory)
36
- hoe = Hoe.new(GEM_NAME, VERS) do |p|
37
- p.author = AUTHOR
38
- p.description = DESCRIPTION
39
- p.email = EMAIL
40
- p.summary = DESCRIPTION
41
- p.url = HOMEPATH
42
- p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
43
- p.test_globs = ["test/**/test*.rb"]
44
- p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
45
-
46
- # == Optional
47
- p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
48
- p.extra_deps = [
49
- ['hoe', '>=1.2.1'],
50
- ['RedCloth','>=3.0.4'],
51
- ['syntax','>=1.0.0'],
52
- ['activesupport','>=1.4.2']
53
- ]
54
- #p.spec_extras - A hash of extra values to set in the gemspec.
55
- end
56
-
57
- CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n")
58
- PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "\#{RUBYFORGE_PROJECT}/\#{GEM_NAME}"
59
- hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
60
-
61
- desc 'Generate website files'
62
- task :website_generate => :load_consts do
63
- (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
64
- sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
65
- end
66
- sh %{ ruby scripts/txt2js website/version.txt > website/version.js }
67
- sh %{ ruby scripts/txt2js website/version-raw.txt > website/version-raw.js }
68
- end
69
-
70
- desc 'Upload website files to rubyforge'
71
- task :website_upload do
72
- config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
73
- host = "#{config["username"]}@rubyforge.org"
74
- remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/"
75
- local_dir = 'website'
76
- sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
77
- end
78
-
79
- desc 'Generate and upload website files'
80
- task :website => [:website_generate, :website_upload, :publish_docs]
81
-
82
- task :load_consts do
83
- ENV['AUTHOR'] = AUTHOR
84
- ENV['EMAIL'] = EMAIL
85
- ENV['DESCRIPTION'] = DESCRIPTION
86
- ENV['GEM_NAME'] = GEM_NAME
87
- ENV['RUBYFORGE_PROJECT'] = RUBYFORGE_PROJECT
88
- ENV['HOMEPATH'] = HOMEPATH
89
- ENV['DOWNLOAD_PATH'] = DOWNLOAD_PATH
90
- end
91
-
92
- desc 'Release the website and new gem version'
93
- task :deploy => [:check_version, :website, :release] do
94
- puts "Remember to create SVN tag:"
95
- puts "svn copy svn+ssh://#{RUBYFORGE_USERNAME}@rubyforge.org/var/svn/#{PATH}/trunk " +
96
- "svn+ssh://#{RUBYFORGE_USERNAME}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
97
- puts "Suggested comment:"
98
- puts "Tagging release #{CHANGES}"
99
- end
100
-
101
- desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
102
- task :local_deploy => [:website_generate, :install_gem]
103
-
104
- task :check_version do
105
- unless ENV['VERSION']
106
- puts 'Must pass a VERSION=x.y.z release version'
107
- exit
108
- end
109
- unless ENV['VERSION'] == VERS
110
- puts "Please update your version.rb to match the release version, currently #{VERS}"
111
- exit
112
- end
113
- end
data/Todo.txt CHANGED
@@ -1,4 +1,4 @@
1
1
  == Todo list
2
2
  * can generate rspec default tests (or still test::unit tests) using --with-test=rspec [thx Robby Russell]
3
3
  * website components are now optional (-w/--no-website)
4
- * provide option to generate <gemname>/trunk,branches,tags structure and insert files into trunk [-s/--svn]
4
+ * release name generator ("red moom", "flying leopard")
@@ -0,0 +1,172 @@
1
+ require 'rbconfig'
2
+
3
+ class NewgemGenerator < RubiGen::Base
4
+ DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
5
+ Config::CONFIG['ruby_install_name'])
6
+
7
+ default_options :shebang => DEFAULT_SHEBANG,
8
+ :bin_name => nil,
9
+ :email => nil,
10
+ :author => nil,
11
+ :import_path => nil,
12
+ :jruby => nil,
13
+ :test_framework => 'test::unit',
14
+ :version => '0.0.1',
15
+ :website => false
16
+
17
+
18
+ attr_reader :gem_name, :module_name
19
+ attr_reader :version, :version_str, :author, :email
20
+
21
+ # extensions/option
22
+ attr_reader :test_framework
23
+ attr_reader :bin_names_list
24
+ attr_reader :website
25
+ attr_reader :manifest
26
+ attr_reader :is_jruby
27
+
28
+ def initialize(runtime_args, runtime_options = {})
29
+ super
30
+ usage if args.empty?
31
+ @destination_root = args.shift
32
+ @gem_name = File.basename(File.expand_path(@destination_root))
33
+ @module_name = gem_name.camelize
34
+ extract_options
35
+ end
36
+
37
+ def manifest
38
+ # Use /usr/bin/env if no special shebang was specified
39
+ script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
40
+ dispatcher_options = { :chmod => 0755, :shebang => options[:shebang] }
41
+ windows = (RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/)
42
+
43
+ record do |m|
44
+ # Root directory and all subdirectories.
45
+ m.directory ''
46
+ BASEDIRS.each { |path| m.directory path }
47
+
48
+ m.directory "lib/#{gem_name}"
49
+
50
+ # Root
51
+ m.template_copy_each %w( History.txt License.txt Rakefile README.txt )
52
+ m.file_copy_each %w( setup.rb )
53
+
54
+ # Default module for app
55
+ m.template "module.rb", "lib/#{gem_name}.rb"
56
+ m.template "version.rb", "lib/#{gem_name}/version.rb"
57
+
58
+ # Config
59
+ m.template_copy_each %w( hoe.rb requirements.rb ), "config"
60
+
61
+ # Scripts
62
+ %w( generate destroy ).each do |file|
63
+ m.template "script/#{file}", "script/#{file}", script_options
64
+ m.template "script/win_script.cmd", "script/#{file}.cmd",
65
+ :assigns => { :filename => file } if windows
66
+ end
67
+
68
+ %w(debug).each { |file|
69
+ m.file "empty.log", "log/#{file}.log", :chmod => 0666
70
+ }
71
+
72
+ # Tasks
73
+ m.file_copy_each %w( deployment.rake environment.rake website.rake ), "tasks"
74
+
75
+ # Selecting a test framework
76
+ case test_framework
77
+ when "test::unit"
78
+ m.template "test_helper.rb", "test/test_helper.rb"
79
+ m.template "test.rb", "test/test_#{gem_name}.rb"
80
+ when "rspec"
81
+ m.dependency "install_rspec", [gem_name], :destination => destination_root
82
+ end
83
+
84
+ # Website
85
+ m.dependency "install_website", [gem_name],
86
+ :author => author, :email => email, :destination => destination_root if website
87
+
88
+ # JRuby
89
+ m.dependency "install_jruby", [gem_name], :destination => destination_root if is_jruby
90
+
91
+ # Executables
92
+ for bin_name in bin_names_list
93
+ m.dependency "executable", [bin_name], :destination => destination_root
94
+ end
95
+
96
+ m.write_manifest "Manifest.txt"
97
+ end
98
+ end
99
+
100
+ protected
101
+ def banner
102
+ <<-EOS
103
+ Take any library or Rails plugin or command line application,
104
+ gemify it, and easily share it with the Ruby world.
105
+
106
+ Usage: #{File.basename $0} /path/to/your/app [options]"
107
+ EOS
108
+ end
109
+
110
+ def add_options!(opts)
111
+ opts.separator ''
112
+ opts.separator 'Options:'
113
+ opts.on("-b", "--bin-name=BIN_NAME[,BIN_NAME2]", String,
114
+ "Sets up executable scripts in the bin folder.",
115
+ "Default: none") { |options[:bin_name]| }
116
+ opts.on("-e", "--email=PATH", String,
117
+ "Your email to be inserted into generated files.",
118
+ "Default: ~/.rubyforge/user-config.yml[email]") { |options[:email]| }
119
+ # TODO --import_path
120
+ # opts.on("-i", "--import_path=PATH", String,
121
+ # "Path where your files could be copied from.",
122
+ # "Default: none") { |options[:import_path]| }
123
+ opts.on("-j", "--jruby",
124
+ "Use if gem is for jruby.") { |options[:jruby]| }
125
+ opts.on("-a", "--author=PATH", String,
126
+ "Your name to be inserted into generated files.",
127
+ "Default: ~/.rubyforge/user-config.yml[user_name]") { |options[:author]| }
128
+ opts.on("-r", "--ruby=path", String,
129
+ "Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).",
130
+ "Default: #{DEFAULT_SHEBANG}") { |v| options[:shebang] = v }
131
+ opts.on("-T", "--test-with=TEST_FRAMEWORK", String,
132
+ "Select your preferred testing framework.",
133
+ "Options: test::unit (default), rspec.") { |options[:test_framework]| }
134
+ opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
135
+ opts.on("-V", "--set-version=YOUR_VERSION", String,
136
+ "Version of the gem you are creating.",
137
+ "Default: 0.0.1") { |options[:version]| }
138
+ opts.on("-w", "--website",
139
+ "Includes a website for your RubyGem.") { |options[:website]| }
140
+ end
141
+
142
+ def extract_options
143
+ @version = options[:version].to_s.split(/\./)
144
+ @version_str = @version.join('.')
145
+ @author = options[:author]
146
+ @email = options[:email]
147
+ unless @author && @email
148
+ require 'newgem/rubyforge'
149
+ rubyforge_config = Newgem::Rubyforge.new
150
+ @author ||= rubyforge_config.full_name
151
+ @email ||= rubyforge_config.email
152
+ end
153
+ @bin_names_list = (options[:bin_name] || "").split(',')
154
+ @website = options[:website]
155
+
156
+ @test_framework = options[:test_framework] || "test::unit"
157
+ @is_jruby = options[:jruby]
158
+ end
159
+
160
+ # Installation skeleton. Intermediate directories are automatically
161
+ # created so don't sweat their absence here.
162
+ BASEDIRS = %w(
163
+ config
164
+ doc
165
+ lib
166
+ log
167
+ script
168
+ tasks
169
+ test
170
+ tmp
171
+ )
172
+ end