gem-this 0.2.1 → 0.3.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/Rakefile CHANGED
@@ -2,8 +2,13 @@ require "rubygems"
2
2
  require "rake/gempackagetask"
3
3
  require "rake/rdoctask"
4
4
 
5
- task :default => :package do
6
- puts "Don't forget to write some tests!"
5
+ task :default => :test
6
+
7
+ require "rake/testtask"
8
+ Rake::TestTask.new do |t|
9
+ t.libs = [File.expand_path("lib"), "test"]
10
+ t.test_files = FileList["test/**/*_test.rb"]
11
+ t.verbose = true
7
12
  end
8
13
 
9
14
  # This builds the actual gem. For details of what all these options
@@ -12,10 +17,10 @@ end
12
17
  # http://rubygems.org/read/chapter/20
13
18
  #
14
19
  spec = Gem::Specification.new do |s|
15
-
20
+
16
21
  # Change these as appropriate
17
22
  s.name = "gem-this"
18
- s.version = "0.2.1"
23
+ s.version = "0.3.0"
19
24
  s.summary = "Make existing code into a gem, without any fuss."
20
25
  s.author = "James Adam"
21
26
  s.email = "james@lazyatom.com"
@@ -29,28 +34,30 @@ spec = Gem::Specification.new do |s|
29
34
  s.files = %w(Rakefile Readme.markdown Rakefile.erb) + Dir.glob("{bin,lib}/**/*")
30
35
  s.executables = FileList["bin/**"].map { |f| File.basename(f) }
31
36
  s.require_paths = ["bin", "lib"]
32
-
37
+
33
38
  # If you want to depend on other gems, add them here, along with any
34
39
  # relevant versions
35
40
  # s.add_dependency("some_other_gem", "~> 0.1.0")
36
-
41
+
37
42
  # If your tests use any gems, include them here
38
- # s.add_development_dependency("mocha")
43
+ s.add_development_dependency("shoulda")
44
+ s.add_development_dependency("rspec")
45
+ s.add_development_dependency("cucumber")
39
46
 
40
47
  # If you want to publish automatically to rubyforge, you'll may need
41
48
  # to tweak this, and the publishing task below too.
42
49
  s.rubyforge_project = "gem-this"
43
-
50
+
44
51
  s.required_rubygems_version = Gem::Requirement.new(">= 1.3")
45
52
  end
46
53
 
47
- # This task actually builds the gem. We also regenerate a static
54
+ # This task actually builds the gem. We also regenerate a static
48
55
  # .gemspec file, which is useful if something (i.e. GitHub) will
49
56
  # be automatically building a gem for this project. If you're not
50
57
  # using GitHub, edit as appropriate.
51
58
  Rake::GemPackageTask.new(spec) do |pkg|
52
59
  pkg.gem_spec = spec
53
-
60
+
54
61
  # Generate the gemspec file for github.
55
62
  file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
56
63
  File.open(file, "w") {|f| f << spec.to_ruby }
@@ -68,7 +75,7 @@ task :clean => [:clobber_rdoc, :clobber_package] do
68
75
  rm "#{spec.name}.gemspec"
69
76
  end
70
77
 
71
- # If you want to publish to RubyForge automatically, here's a simple
78
+ # If you want to publish to RubyForge automatically, here's a simple
72
79
  # task to help do that. If you don't, just get rid of this.
73
80
  # Be sure to set up your Rubyforge account details with the Rubyforge
74
81
  # gem; you'll need to run `rubyforge setup` and `rubyforge config` at
@@ -76,10 +83,10 @@ end
76
83
  begin
77
84
  require "rake/contrib/sshpublisher"
78
85
  namespace :rubyforge do
79
-
86
+
80
87
  desc "Release gem and RDoc documentation to RubyForge"
81
88
  task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
82
-
89
+
83
90
  namespace :release do
84
91
  desc "Release a new version of this gem"
85
92
  task :gem => [:package] do
@@ -92,17 +99,17 @@ begin
92
99
  puts "Publishing #{spec.name}-#{spec.version.to_s} to Rubyforge..."
93
100
  rubyforge.add_release(spec.rubyforge_project, spec.name, spec.version.to_s, path_to_gem)
94
101
  end
95
-
102
+
96
103
  desc "Publish RDoc to RubyForge."
97
104
  task :docs => [:rdoc] do
98
105
  config = YAML.load(
99
106
  File.read(File.expand_path('~/.rubyforge/user-config.yml'))
100
107
  )
101
-
108
+
102
109
  host = "#{config['username']}@rubyforge.org"
103
110
  remote_dir = "/var/www/gforge-projects/gem-this/" # Should be the same as the rubyforge project name
104
111
  local_dir = 'rdoc'
105
-
112
+
106
113
  Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
107
114
  end
108
115
  end
data/Rakefile.erb CHANGED
@@ -3,8 +3,6 @@ require "rake/gempackagetask"
3
3
  require "rake/rdoctask"
4
4
 
5
5
  <% if using_rspec? %>
6
- task :default => :spec
7
-
8
6
  require "spec"
9
7
  require "spec/rake/spectask"
10
8
  Spec::Rake::SpecTask.new do |t|
@@ -12,18 +10,28 @@ Spec::Rake::SpecTask.new do |t|
12
10
  t.libs = ["spec"]
13
11
  end
14
12
  <% elsif using_test_unit? %>
15
- task :default => :test
16
-
17
13
  require "rake/testtask"
18
14
  Rake::TestTask.new do |t|
19
15
  t.libs << "test"
20
16
  t.test_files = FileList["test/**/*_test.rb"]
21
17
  t.verbose = true
22
18
  end
23
- <% else %>
19
+ <% end %>
20
+
21
+ <% if using_cucumber? %>
22
+ require 'cucumber'
23
+ require 'cucumber/rake/task'
24
+ Cucumber::Rake::Task.new('features') do |t|
25
+ t.cucumber_opts = %w{--format pretty}
26
+ end
27
+ <% end %>
28
+
29
+ <% if default_tasks.empty? %>
24
30
  task :default => :package do
25
31
  puts "Don't forget to write some tests!"
26
32
  end
33
+ <% else %>
34
+ task :default => <%= default_tasks.inspect %>
27
35
  <% end %>
28
36
 
29
37
  # This builds the actual gem. For details of what all these options
@@ -32,7 +40,7 @@ end
32
40
  # http://rubygems.org/read/chapter/20
33
41
  #
34
42
  spec = Gem::Specification.new do |s|
35
-
43
+
36
44
  # Change these as appropriate
37
45
  s.name = "<%= name %>"
38
46
  s.version = "0.1.0"
@@ -47,7 +55,7 @@ spec = Gem::Specification.new do |s|
47
55
  s.rdoc_options = %w(--main <%= readme %>)
48
56
 
49
57
  # Add any extra files to include in the gem
50
- <% else %>
58
+ <% else %>
51
59
  # You should probably have a README of some kind. Change the filename
52
60
  # as appropriate
53
61
  # s.extra_rdoc_files = %w(README)
@@ -55,21 +63,34 @@ spec = Gem::Specification.new do |s|
55
63
 
56
64
  # Add any extra files to include in the gem (like your README)
57
65
  <% end %>
58
- s.files = %w(<%= files_in_root %>) + Dir.glob("{<%= dirs_to_include %>}/**/*")
66
+ s.files = %w(<%= files_in_root %>) + Dir.glob("{<%= dirs_to_include_glob %>}")
59
67
  <% if has_executables? %>
60
68
  s.executables = FileList["bin/**"].map { |f| File.basename(f) }
61
- <% end %>
69
+ <% end %>
70
+ <% if has_lib_directory? %>
62
71
  s.require_paths = ["lib"]
63
-
72
+ <% else %>
73
+
74
+ # You need to put your code in a directory which can then be added to
75
+ # the $LOAD_PATH by rubygems. Typically this is lib, but you don't seem
76
+ # to have that directory. You'll need to set the line below to whatever
77
+ # directory your code is in. Rubygems is going to assume lib if you leave
78
+ # this blank.
79
+ #
80
+ # s.require_paths = ["lib"]
81
+ <% end %>
82
+
64
83
  # If you want to depend on other gems, add them here, along with any
65
84
  # relevant versions
66
85
  # s.add_dependency("some_other_gem", "~> 0.1.0")
67
-
68
- <% if using_rspec? %>
69
- s.add_development_dependency("rspec") # add any other gems for testing/development
70
- <% else %>
86
+
71
87
  # If your tests use any gems, include them here
72
- # s.add_development_dependency("mocha")
88
+ <% if development_dependencies.any? %>
89
+ <% development_dependencies.each do |dependency| %>
90
+ s.add_development_dependency("<%= dependency %>")
91
+ <% end %>
92
+ <% else %>
93
+ # s.add_development_dependency("mocha") # for example
73
94
  <% end %>
74
95
 
75
96
  # If you want to publish automatically to rubyforge, you'll may need
@@ -77,13 +98,13 @@ spec = Gem::Specification.new do |s|
77
98
  s.rubyforge_project = "<%= name %>"
78
99
  end
79
100
 
80
- # This task actually builds the gem. We also regenerate a static
101
+ # This task actually builds the gem. We also regenerate a static
81
102
  # .gemspec file, which is useful if something (i.e. GitHub) will
82
103
  # be automatically building a gem for this project. If you're not
83
104
  # using GitHub, edit as appropriate.
84
105
  Rake::GemPackageTask.new(spec) do |pkg|
85
106
  pkg.gem_spec = spec
86
-
107
+
87
108
  # Generate the gemspec file for github.
88
109
  file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
89
110
  File.open(file, "w") {|f| f << spec.to_ruby }
@@ -101,7 +122,7 @@ task :clean => [:clobber_rdoc, :clobber_package] do
101
122
  rm "#{spec.name}.gemspec"
102
123
  end
103
124
 
104
- # If you want to publish to RubyForge automatically, here's a simple
125
+ # If you want to publish to RubyForge automatically, here's a simple
105
126
  # task to help do that. If you don't, just get rid of this.
106
127
  # Be sure to set up your Rubyforge account details with the Rubyforge
107
128
  # gem; you'll need to run `rubyforge setup` and `rubyforge config` at
@@ -109,10 +130,10 @@ end
109
130
  begin
110
131
  require "rake/contrib/sshpublisher"
111
132
  namespace :rubyforge do
112
-
133
+
113
134
  desc "Release gem and RDoc documentation to RubyForge"
114
135
  task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
115
-
136
+
116
137
  namespace :release do
117
138
  desc "Release a new version of this gem"
118
139
  task :gem => [:package] do
@@ -125,21 +146,21 @@ begin
125
146
  puts "Publishing #{spec.name}-#{spec.version.to_s} to Rubyforge..."
126
147
  rubyforge.add_release(spec.rubyforge_project, spec.name, spec.version.to_s, path_to_gem)
127
148
  end
128
-
149
+
129
150
  desc "Publish RDoc to RubyForge."
130
151
  task :docs => [:rdoc] do
131
152
  config = YAML.load(
132
153
  File.read(File.expand_path('~/.rubyforge/user-config.yml'))
133
154
  )
134
-
155
+
135
156
  host = "#{config['username']}@rubyforge.org"
136
157
  remote_dir = "/var/www/gforge-projects/<%= name %>/" # Should be the same as the rubyforge project name
137
158
  local_dir = 'rdoc'
138
-
159
+
139
160
  Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
140
161
  end
141
162
  end
142
163
  end
143
164
  rescue LoadError
144
165
  puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
145
- end
166
+ end
data/bin/gem-this CHANGED
@@ -15,6 +15,6 @@ end
15
15
 
16
16
  debug = args.delete("-d")
17
17
 
18
- GemThis.new(args.first || File.basename(Dir.pwd), debug).create_rakefile
18
+ GemThis.new(args.first || File.basename(Dir.pwd), :debug => debug).create_rakefile
19
19
 
20
20
  exit
data/lib/gem_this.rb CHANGED
@@ -4,14 +4,16 @@ require 'etc'
4
4
  class GemThis
5
5
  SUMMARY = "Creates a Rakefile suitable for turning the current project into a gem."
6
6
  DEBUG_MESSAGE = "debug, only prints out the generated Rakefile."
7
-
7
+
8
8
  attr_reader :name, :debug
9
-
10
- def initialize(name, debug)
9
+
10
+ def initialize(name, options={})
11
11
  @name = name
12
- @debug = debug
12
+ options = {:default => false, :silent => false}.update(options)
13
+ @debug = options[:debug]
14
+ @silent = options[:silent]
13
15
  end
14
-
16
+
15
17
  def create_rakefile
16
18
  template = ERB.new File.read(File.join(File.dirname(__FILE__), '..', 'Rakefile.erb')), nil, '<>'
17
19
  rakefile = template.result(binding)
@@ -20,18 +22,26 @@ class GemThis
20
22
  puts rakefile
21
23
  else
22
24
  if File.exist?('Rakefile')
23
- puts "Appended to existing Rakefile"
25
+ log "Appended to existing Rakefile"
24
26
  File.open('Rakefile', 'a') { |f| 2.times { f.puts }; f.write rakefile }
25
27
  else
26
- puts "Writing new Rakefile"
28
+ log "Writing new Rakefile"
27
29
  File.open('Rakefile', 'w') { |f| f.write rakefile }
28
30
  end
29
31
  add_to_gitignore if using_git?
30
32
  end
33
+ unless has_lib_directory?
34
+ log "You don't see to have a lib directory - please edit the Rakefile to set where your code is."
35
+ false
36
+ end
31
37
  end
32
-
38
+
33
39
  private
34
-
40
+
41
+ def log(message)
42
+ puts(message) unless @silent
43
+ end
44
+
35
45
  def author_name
36
46
  Etc.getpwnam(ENV['USER']).gecos rescue ENV['USER'] # for Windows
37
47
  end
@@ -48,6 +58,10 @@ class GemThis
48
58
  File.directory?('spec')
49
59
  end
50
60
 
61
+ def using_cucumber?
62
+ File.directory?('features')
63
+ end
64
+
51
65
  def using_test_unit?
52
66
  File.directory?('test')
53
67
  end
@@ -56,8 +70,17 @@ class GemThis
56
70
  File.directory?('bin')
57
71
  end
58
72
 
59
- def dirs_to_include
60
- %w(bin test spec lib).select { |d| File.directory?(d) }.join(",")
73
+ def has_lib_directory?
74
+ File.directory?("lib")
75
+ end
76
+
77
+ def dirs_to_include_glob
78
+ dirs = %w(bin test spec lib).select { |d| File.directory?(d) }
79
+ if dirs.any?
80
+ dirs.join(",") + "/**/*"
81
+ else
82
+ "**/*"
83
+ end
61
84
  end
62
85
 
63
86
  def readme
@@ -72,10 +95,25 @@ class GemThis
72
95
  File.exist?(".git")
73
96
  end
74
97
 
98
+ def default_tasks
99
+ tasks = []
100
+ tasks << "test" if using_test_unit?
101
+ tasks << "spec" if using_rspec?
102
+ tasks << "features" if using_cucumber?
103
+ tasks
104
+ end
105
+
106
+ def development_dependencies
107
+ deps = []
108
+ deps << "rspec" if using_rspec?
109
+ deps << "cucumber" if using_cucumber?
110
+ deps
111
+ end
112
+
75
113
  def add_to_gitignore
76
114
  return unless File.exist?(".gitignore")
77
115
  ignores = File.readlines(".gitignore")
78
116
  ignores += ["pkg", "rdoc"]
79
117
  File.open(".gitignore", "w") { |f| f.write ignores.map { |l| l.strip }.uniq.join("\n") }
80
118
  end
81
- end
119
+ end
@@ -15,7 +15,7 @@ class Gem::Commands::ThisCommand < Gem::Command
15
15
  end
16
16
 
17
17
  def execute
18
- GemThis.new(options[:args].first || File.basename(Dir.pwd), options[:debug]).create_rakefile
18
+ GemThis.new(options[:args].first || File.basename(Dir.pwd), options).create_rakefile
19
19
  end
20
20
  end
21
21
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-this
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Adam
@@ -9,10 +9,39 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-23 00:00:00 +01:00
12
+ date: 2009-12-22 00:00:00 +00:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: shoulda
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: cucumber
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
16
45
  description:
17
46
  email: james@lazyatom.com
18
47
  executables:
@@ -53,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
82
  requirements: []
54
83
 
55
84
  rubyforge_project: gem-this
56
- rubygems_version: 1.3.3
85
+ rubygems_version: 1.3.5
57
86
  signing_key:
58
87
  specification_version: 3
59
88
  summary: Make existing code into a gem, without any fuss.