newgem 1.3.0 → 1.4.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 (53) hide show
  1. data/History.txt +9 -0
  2. data/Manifest.txt +9 -1
  3. data/Rakefile +2 -1
  4. data/TODO.markdown +9 -3
  5. data/app_generators/newgem/newgem_generator.rb +5 -1
  6. data/app_generators/newgem/templates/README.rdoc +1 -1
  7. data/app_generators/newgem/templates/Rakefile +2 -1
  8. data/app_generators/newgem_simple/templates/Rakefile +1 -1
  9. data/bin/newgem +1 -1
  10. data/features/development.feature +5 -5
  11. data/features/executable_generator.feature +46 -29
  12. data/features/extconf.feature +27 -26
  13. data/features/install_cucumber.feature +29 -19
  14. data/features/install_website.feature +6 -6
  15. data/features/newgem_cli.feature +86 -42
  16. data/features/rubygem_tasks.feature +26 -18
  17. data/features/step_definitions/cli_steps.rb +22 -17
  18. data/features/step_definitions/common_steps.rb +45 -67
  19. data/features/step_definitions/rubygems_steps.rb +1 -1
  20. data/features/support/cli.rb +8 -0
  21. data/features/support/common.rb +29 -0
  22. data/features/support/env.rb +2 -7
  23. data/features/support/matchers.rb +11 -0
  24. data/lib/newgem.rb +1 -1
  25. data/lib/newgem/rubyforge-ext.rb +1 -1
  26. data/newgem_generators/install_website/install_website_generator.rb +1 -1
  27. data/newgem_generators/install_website/templates/features/website.feature +4 -4
  28. data/newgem_theme_generators/long_box_theme/long_box_theme_generator.rb +1 -1
  29. data/rubygems_generators/executable/executable_generator.rb +1 -1
  30. data/rubygems_generators/executable/templates/spec/cli_spec.rb.erb +2 -2
  31. data/rubygems_generators/executable/templates/test/test_cli.rb.erb +2 -2
  32. data/rubygems_generators/extconf/extconf_generator.rb +1 -1
  33. data/rubygems_generators/install_cucumber/install_cucumber_generator.rb +2 -0
  34. data/rubygems_generators/install_cucumber/templates/features/development.feature +5 -5
  35. data/rubygems_generators/install_cucumber/templates/features/step_definitions/common_steps.rb +45 -67
  36. data/rubygems_generators/install_cucumber/templates/features/support/common.rb +29 -0
  37. data/rubygems_generators/install_rspec/install_rspec_generator.rb +1 -1
  38. data/rubygems_generators/install_rspec/templates/spec.rb +1 -1
  39. data/rubygems_generators/install_rspec/templates/spec/spec_helper.rb +1 -1
  40. data/rubygems_generators/install_rspec/templates/tasks/rspec.rake +1 -1
  41. data/rubygems_generators/install_shoulda/USAGE +5 -0
  42. data/rubygems_generators/install_shoulda/install_shoulda_generator.rb +35 -0
  43. data/rubygems_generators/install_shoulda/templates/tasks/shoulda.rake +15 -0
  44. data/rubygems_generators/install_shoulda/templates/test/test.rb +13 -0
  45. data/rubygems_generators/install_shoulda/templates/test/test_helper.rb +9 -0
  46. data/rubygems_generators/install_test_unit/install_test_unit_generator.rb +1 -1
  47. data/script/destroy +1 -1
  48. data/script/generate +1 -1
  49. data/test/test_generator_helper.rb +1 -1
  50. data/website/index.html +2 -2
  51. data/website/rubyforge.html +2 -2
  52. metadata +21 -6
  53. data/features/expected_outputs/newgem.out +0 -27
@@ -0,0 +1,11 @@
1
+ module Matchers
2
+ def contain(expected)
3
+ simple_matcher("contain #{expected.inspect}") do |given, matcher|
4
+ matcher.failure_message = "expected #{given.inspect} to contain #{expected.inspect}"
5
+ matcher.negative_failure_message = "expected #{given.inspect} not to contain #{expected.inspect}"
6
+ given.index expected
7
+ end
8
+ end
9
+ end
10
+
11
+ World(Matchers)
@@ -4,5 +4,5 @@ $:.unshift(File.dirname(__FILE__)) unless
4
4
  require "hoe-patched"
5
5
 
6
6
  module Newgem
7
- VERSION = '1.3.0'
7
+ VERSION = '1.4.0'
8
8
  end
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  require 'rubyforge'
3
3
  rescue LoadError
4
- require 'rubygems'
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
5
  gem 'rubyforge'
6
6
  require 'rubyforge'
7
7
  end
@@ -17,7 +17,7 @@ class InstallWebsiteGenerator < RubiGen::Base
17
17
  super
18
18
  @destination_root = File.expand_path(destination_root)
19
19
  @gem_name = base_name
20
- @module_name = @gem_name.camelcase
20
+ @module_name = @gem_name.gsub('-','_').camelize
21
21
  @rubyforge_username = ENV['RUBYFORGE_USERNAME'].nil? || ENV['RUBYFORGE_USERNAME'].empty? ? 'unknown' : ENV['RUBYFORGE_USERNAME']
22
22
  extract_options
23
23
  end
@@ -7,8 +7,8 @@ Feature: Can deploy a website to a remote server via rsycn
7
7
  Given copy this project for test
8
8
  Given a safe folder for dummy deployment
9
9
  Given project website configuration for safe folder on local machine
10
- When task 'rake website' is invoked
11
- Then file 'website/index.html' is created
12
- Then remote file 'index.html' is created after local rsync
13
- Then remote folder 'rdoc' is created after local rsync
10
+ When I invoke task "rake website"
11
+ Then file "website/index.html" is created
12
+ Then remote file "index.html" is created after local rsync
13
+ Then remote folder "rdoc" is created after local rsync
14
14
 
@@ -11,7 +11,7 @@ class LongBoxThemeGenerator < RubiGen::Base
11
11
  @destination_root = File.expand_path(destination_root)
12
12
  @gem_name = base_name
13
13
 
14
- @module_name = @gem_name.camelcase
14
+ @module_name = @gem_name.gsub('-','_').camelize
15
15
 
16
16
  extract_options
17
17
  end
@@ -11,7 +11,7 @@ class ExecutableGenerator < RubiGen::Base
11
11
  super
12
12
  usage if args.empty?
13
13
  @bin_name = args.shift
14
- @module_name = @bin_name.classify
14
+ @module_name = @bin_name.gsub('-','_').camelize
15
15
  @project_name = File.basename(File.expand_path(destination_root))
16
16
  extract_options
17
17
  end
@@ -9,7 +9,7 @@ describe <%= module_name %>::CLI, "execute" do
9
9
  @stdout = @stdout_io.read
10
10
  end
11
11
 
12
- it "should do something" do
13
- @stdout.should_not =~ /To update this executable/
12
+ it "should print default output" do
13
+ @stdout.should =~ /To update this executable/
14
14
  end
15
15
  end
@@ -8,7 +8,7 @@ class Test<%= module_name %>Cli < Test::Unit::TestCase
8
8
  @stdout = @stdout_io.read
9
9
  end
10
10
 
11
- def test_not_print_default_output
12
- assert_no_match(/To update this executable/, @stdout)
11
+ def test_print_default_output
12
+ assert_match(/To update this executable/, @stdout)
13
13
  end
14
14
  end
@@ -8,7 +8,7 @@ class ExtconfGenerator < RubiGen::Base
8
8
  super
9
9
  usage if args.empty?
10
10
  @name = args.shift
11
- @module_name = name.camelcase
11
+ @module_name = name.gsub('-','_').camelize
12
12
  @test_module_name = @module_name + "Extn"
13
13
  end
14
14
 
@@ -21,6 +21,8 @@ class InstallCucumberGenerator < RubiGen::Base
21
21
  m.file 'features/development.feature', 'features/development.feature'
22
22
  m.file 'features/step_definitions/common_steps.rb', 'features/step_definitions/common_steps.rb'
23
23
  m.template 'features/support/env.rb.erb', 'features/support/env.rb'
24
+ m.file 'features/support/common.rb', 'features/support/common.rb'
25
+ m.file 'features/support/matchers.rb', 'features/support/matchers.rb'
24
26
  end
25
27
  end
26
28
 
@@ -6,8 +6,8 @@ Feature: Development processes of newgem itself (rake tasks)
6
6
 
7
7
  Scenario: Generate RubyGem
8
8
  Given this project is active project folder
9
- And 'pkg' folder is deleted
10
- When task 'rake gem' is invoked
11
- Then folder 'pkg' is created
12
- And file with name matching 'pkg/*.gem' is created else you should run "rake manifest" to fix this
13
- And gem spec key 'rdoc_options' contains /--mainREADME.rdoc/
9
+ And "pkg" folder is deleted
10
+ When I invoke task "rake gem"
11
+ Then folder "pkg" is created
12
+ And file with name matching "pkg/*.gem" is created else you should run "rake manifest" to fix this
13
+ And gem spec key "rdoc_options" contains /--mainREADME.rdoc/
@@ -1,51 +1,27 @@
1
- def in_project_folder(&block)
2
- project_folder = @active_project_folder || @tmp_root
3
- FileUtils.chdir(project_folder, &block)
4
- end
5
-
6
- def in_home_folder(&block)
7
- FileUtils.chdir(@home_path, &block)
8
- end
9
-
10
- Given %r{^a safe folder} do
1
+ Given /^a safe folder/ do
11
2
  FileUtils.rm_rf @tmp_root = File.dirname(__FILE__) + "/../../tmp"
12
3
  FileUtils.mkdir_p @tmp_root
13
4
  FileUtils.mkdir_p @home_path = File.expand_path(File.join(@tmp_root, "home"))
14
5
  @lib_path = File.expand_path(File.dirname(__FILE__) + '/../../lib')
15
- Given "env variable $HOME set to '#{@home_path}'"
6
+ Given %Q{env variable $HOME set to "#{@home_path}"}
16
7
  end
17
8
 
18
- Given %r{^this project is active project folder} do
9
+ Given /^this project is active project folder/ do
19
10
  Given "a safe folder"
20
11
  @active_project_folder = File.expand_path(File.dirname(__FILE__) + "/../..")
21
12
  end
22
13
 
23
- Given %r{^env variable \$([\w_]+) set to '(.*)'} do |env_var, value|
14
+ Given /^env variable \$([\w_]+) set to "(.*)"/ do |env_var, value|
24
15
  ENV[env_var] = value
25
16
  end
26
17
 
27
- def force_local_lib_override(project_name = @project_name)
28
- rakefile = File.read(File.join(project_name, 'Rakefile'))
29
- File.open(File.join(project_name, 'Rakefile'), "w+") do |f|
30
- f << "$:.unshift('#{@lib_path}')\n"
31
- f << rakefile
32
- end
33
- end
34
-
35
- def setup_active_project_folder project_name
36
- @active_project_folder = File.join(@tmp_root, project_name)
37
- @project_name = project_name
38
- end
39
-
40
- Given %r{'(.*)' folder is deleted} do |folder|
41
- in_project_folder do
42
- FileUtils.rm_rf folder
43
- end
18
+ Given /"(.*)" folder is deleted/ do |folder|
19
+ in_project_folder { FileUtils.rm_rf folder }
44
20
  end
45
21
 
46
- When %r{^'(.*)' generator is invoked with arguments '(.*)'$} do |generator, arguments|
22
+ When /^I invoke "(.*)" generator with arguments "(.*)"$/ do |generator, arguments|
47
23
  @stdout = StringIO.new
48
- FileUtils.chdir(@active_project_folder) do
24
+ in_project_folder do
49
25
  if Object.const_defined?("APP_ROOT")
50
26
  APP_ROOT.replace(FileUtils.pwd)
51
27
  else
@@ -59,21 +35,21 @@ When %r{^'(.*)' generator is invoked with arguments '(.*)'$} do |generator, argu
59
35
  end
60
36
  end
61
37
 
62
- When %r{run executable '(.*)' with arguments '(.*)'} do |executable, arguments|
38
+ When /^I run executable "(.*)" with arguments "(.*)"/ do |executable, arguments|
63
39
  @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
64
40
  in_project_folder do
65
41
  system "#{executable} #{arguments} > #{@stdout} 2> #{@stdout}"
66
42
  end
67
43
  end
68
44
 
69
- When %r{run project executable '(.*)' with arguments '(.*)'} do |executable, arguments|
45
+ When /^I run project executable "(.*)" with arguments "(.*)"/ do |executable, arguments|
70
46
  @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
71
47
  in_project_folder do
72
48
  system "ruby #{executable} #{arguments} > #{@stdout} 2> #{@stdout}"
73
49
  end
74
50
  end
75
51
 
76
- When %r{run local executable '(.*)' with arguments '(.*)'} do |executable, arguments|
52
+ When /^I run local executable "(.*)" with arguments "(.*)"/ do |executable, arguments|
77
53
  @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
78
54
  executable = File.expand_path(File.join(File.dirname(__FILE__), "/../../bin", executable))
79
55
  in_project_folder do
@@ -81,32 +57,41 @@ When %r{run local executable '(.*)' with arguments '(.*)'} do |executable, argum
81
57
  end
82
58
  end
83
59
 
84
- When %r{^task 'rake (.*)' is invoked$} do |task|
60
+ When /^I invoke task "rake (.*)"/ do |task|
85
61
  @stdout = File.expand_path(File.join(@tmp_root, "tests.out"))
86
- FileUtils.chdir(@active_project_folder) do
62
+ in_project_folder do
87
63
  system "rake #{task} --trace > #{@stdout} 2> #{@stdout}"
88
64
  end
89
65
  end
90
66
 
91
- Then %r{^folder '(.*)' (is|is not) created} do |folder, is|
67
+ Then /^folder "(.*)" (is|is not) created/ do |folder, is|
92
68
  in_project_folder do
93
69
  File.exists?(folder).should(is == 'is' ? be_true : be_false)
94
70
  end
95
71
  end
96
72
 
97
- Then %r{^file '(.*)' (is|is not) created} do |file, is|
73
+ Then /^file "(.*)" (is|is not) created/ do |file, is|
98
74
  in_project_folder do
99
75
  File.exists?(file).should(is == 'is' ? be_true : be_false)
100
76
  end
101
77
  end
102
78
 
103
- Then %r{^file with name matching '(.*)' is created} do |pattern|
79
+ Then /^file with name matching "(.*)" is created/ do |pattern|
104
80
  in_project_folder do
105
81
  Dir[pattern].should_not be_empty
106
82
  end
107
83
  end
108
84
 
109
- Then %r{gem file '(.*)' and generated file '(.*)' should be the same} do |gem_file, project_file|
85
+ Then /^file "(.*)" contents (does|does not) match \/(.*)\// do |file, does, regex|
86
+ in_project_folder do
87
+ actual_output = File.read(file)
88
+ (does == 'does') ?
89
+ actual_output.should(match(/#{regex}/)) :
90
+ actual_output.should_not(match(/#{regex}/))
91
+ end
92
+ end
93
+
94
+ Then /gem file "(.*)" and generated file "(.*)" should be the same/ do |gem_file, project_file|
110
95
  File.exists?(gem_file).should be_true
111
96
  File.exists?(project_file).should be_true
112
97
  gem_file_contents = File.read(File.dirname(__FILE__) + "/../../#{gem_file}")
@@ -114,77 +99,70 @@ Then %r{gem file '(.*)' and generated file '(.*)' should be the same} do |gem_fi
114
99
  project_file_contents.should == gem_file_contents
115
100
  end
116
101
 
117
- Then %r{^output same as contents of '(.*)'$} do |file|
118
- expected_output = File.read(File.join(File.dirname(__FILE__) + "/../expected_outputs", file))
119
- actual_output = File.read(@stdout)
120
- actual_output.should == expected_output
121
- end
122
-
123
- Then %r{^(does|does not) invoke generator '(.*)'$} do |does_invoke, generator|
102
+ Then /^(does|does not) invoke generator "(.*)"$/ do |does_invoke, generator|
124
103
  actual_output = File.read(@stdout)
125
104
  does_invoke == "does" ?
126
105
  actual_output.should(match(/dependency\s+#{generator}/)) :
127
106
  actual_output.should_not(match(/dependency\s+#{generator}/))
128
107
  end
129
108
 
130
- Then %r{help options '(.*)' and '(.*)' are displayed} do |opt1, opt2|
109
+ Then /help options "(.*)" and "(.*)" are displayed/ do |opt1, opt2|
131
110
  actual_output = File.read(@stdout)
132
111
  actual_output.should match(/#{opt1}/)
133
112
  actual_output.should match(/#{opt2}/)
134
113
  end
135
114
 
136
- Then %r{^output (does|does not) match \/(.*)\/} do |does, regex|
115
+ Then /^I should see$/ do |text|
137
116
  actual_output = File.read(@stdout)
138
- (does == 'does') ?
139
- actual_output.should(match(/#{regex}/)) :
140
- actual_output.should_not(match(/#{regex}/))
117
+ actual_output.should contain(text)
141
118
  end
142
119
 
143
- Then %r{^contents of file '(.*)' (does|does not) match \/(.*)\/} do |file, does, regex|
144
- in_project_folder do
145
- actual_output = File.read(file)
146
- (does == 'does') ?
147
- actual_output.should(match(/#{regex}/)) :
148
- actual_output.should_not(match(/#{regex}/))
149
- end
120
+ Then /^I should not see$/ do |text|
121
+ actual_output = File.read(@stdout)
122
+ actual_output.should_not contain(text)
150
123
  end
151
124
 
152
- Then %r{^all (\d+) tests pass} do |expected_test_count|
125
+ Then /^I should see exactly$/ do |text|
126
+ actual_output = File.read(@stdout)
127
+ actual_output.should == text
128
+ end
129
+
130
+ Then /^I should see all (\d+) tests pass/ do |expected_test_count|
153
131
  expected = %r{^#{expected_test_count} tests, \d+ assertions, 0 failures, 0 errors}
154
132
  actual_output = File.read(@stdout)
155
133
  actual_output.should match(expected)
156
134
  end
157
135
 
158
- Then %r{^all (\d+) examples pass} do |expected_test_count|
136
+ Then /^I should see all (\d+) examples pass/ do |expected_test_count|
159
137
  expected = %r{^#{expected_test_count} examples?, 0 failures}
160
138
  actual_output = File.read(@stdout)
161
139
  actual_output.should match(expected)
162
140
  end
163
141
 
164
- Then %r{^yaml file '(.*)' contains (\{.*\})} do |file, yaml|
142
+ Then /^yaml file "(.*)" contains (\{.*\})/ do |file, yaml|
165
143
  in_project_folder do
166
144
  yaml = eval yaml
167
145
  YAML.load(File.read(file)).should == yaml
168
146
  end
169
147
  end
170
148
 
171
- Then %r{^Rakefile can display tasks successfully} do
149
+ Then /^Rakefile can display tasks successfully/ do
172
150
  @stdout = File.expand_path(File.join(@tmp_root, "rakefile.out"))
173
- FileUtils.chdir(@active_project_folder) do
151
+ in_project_folder do
174
152
  system "rake -T > #{@stdout} 2> #{@stdout}"
175
153
  end
176
154
  actual_output = File.read(@stdout)
177
155
  actual_output.should match(/^rake\s+\w+\s+#\s.*/)
178
156
  end
179
157
 
180
- Then %r{^task 'rake (.*)' is executed successfully} do |task|
158
+ Then /^task "rake (.*)" is executed successfully/ do |task|
181
159
  @stdout.should_not be_nil
182
160
  actual_output = File.read(@stdout)
183
161
  actual_output.should_not match(/^Don't know how to build task '#{task}'/)
184
162
  actual_output.should_not match(/Error/i)
185
163
  end
186
164
 
187
- Then %r{^gem spec key '(.*)' contains \/(.*)\/} do |key, regex|
165
+ Then /^gem spec key "(.*)" contains \/(.*)\// do |key, regex|
188
166
  in_project_folder do
189
167
  gem_file = Dir["pkg/*.gem"].first
190
168
  gem_spec = Gem::Specification.from_yaml(`gem spec #{gem_file}`)
@@ -0,0 +1,29 @@
1
+ module CommonHelpers
2
+ def in_tmp_folder(&block)
3
+ FileUtils.chdir(@tmp_root, &block)
4
+ end
5
+
6
+ def in_project_folder(&block)
7
+ project_folder = @active_project_folder || @tmp_root
8
+ FileUtils.chdir(project_folder, &block)
9
+ end
10
+
11
+ def in_home_folder(&block)
12
+ FileUtils.chdir(@home_path, &block)
13
+ end
14
+
15
+ def force_local_lib_override(project_name = @project_name)
16
+ rakefile = File.read(File.join(project_name, 'Rakefile'))
17
+ File.open(File.join(project_name, 'Rakefile'), "w+") do |f|
18
+ f << "$:.unshift('#{@lib_path}')\n"
19
+ f << rakefile
20
+ end
21
+ end
22
+
23
+ def setup_active_project_folder project_name
24
+ @active_project_folder = File.join(@tmp_root, project_name)
25
+ @project_name = project_name
26
+ end
27
+ end
28
+
29
+ World(CommonHelpers)
@@ -9,7 +9,7 @@ class InstallRspecGenerator < RubiGen::Base
9
9
  super
10
10
  @destination_root = File.expand_path(destination_root)
11
11
  @gem_name = base_name
12
- @module_name = @gem_name.camelcase
12
+ @module_name = @gem_name.gsub('-','_').camelize
13
13
  extract_options
14
14
  end
15
15
 
@@ -5,7 +5,7 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
5
5
  describe "Place your specs here" do
6
6
 
7
7
  it "find this spec in spec directory" do
8
- violated "Be sure to write your specs"
8
+ # violated "Be sure to write your specs"
9
9
  end
10
10
 
11
11
  end
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  require 'spec'
3
3
  rescue LoadError
4
- require 'rubygems'
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
5
  gem 'rspec'
6
6
  require 'spec'
7
7
  end
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  require 'spec'
3
3
  rescue LoadError
4
- require 'rubygems'
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
5
  require 'spec'
6
6
  end
7
7
  begin
@@ -0,0 +1,5 @@
1
+ Description:
2
+
3
+
4
+ Usage:
5
+
@@ -0,0 +1,35 @@
1
+
2
+ class InstallShouldaGenerator < RubiGen::Base
3
+ attr_reader :gem_name, :module_name
4
+
5
+ def initialize(runtime_args, runtime_options = {})
6
+ super
7
+ @destination_root = File.expand_path(destination_root)
8
+ @gem_name = base_name
9
+ @module_name = @gem_name.gsub('-','_').camelize
10
+ end
11
+
12
+ def manifest
13
+ record do |m|
14
+ # Ensure appropriate folder(s) exists
15
+ m.directory 'test'
16
+ m.directory 'tasks'
17
+
18
+ m.template 'test/test.rb', "test/test_#{gem_name}.rb"
19
+ m.template "test/test_helper.rb", "test/test_helper.rb"
20
+
21
+ m.file_copy_each %w( shoulda.rake ), 'tasks'
22
+ end
23
+ end
24
+
25
+ protected
26
+ def banner
27
+ <<-EOS
28
+ Install Shoulda testing support.
29
+
30
+ Includes a rake task (tasks/shoulda.rake) to be loaded by the root Rakefile,
31
+ which provides a "test" task.
32
+
33
+ EOS
34
+ end
35
+ end