gem-this 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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.