gemsmith 7.7.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +114 -118
  5. data/bin/gemsmith +2 -1
  6. data/lib/gemsmith/cli.rb +195 -99
  7. data/lib/gemsmith/cli_helpers.rb +8 -19
  8. data/lib/gemsmith/credentials.rb +2 -2
  9. data/lib/gemsmith/gem/inspector.rb +30 -0
  10. data/lib/gemsmith/gem/module_formatter.rb +51 -0
  11. data/lib/gemsmith/gem/requirement.rb +2 -0
  12. data/lib/gemsmith/{aids/gem_spec.rb → gem/specification.rb} +19 -26
  13. data/lib/gemsmith/generators/base.rb +33 -0
  14. data/lib/gemsmith/generators/bundler.rb +15 -0
  15. data/lib/gemsmith/generators/cli.rb +17 -0
  16. data/lib/gemsmith/generators/code_climate.rb +14 -0
  17. data/lib/gemsmith/generators/documentation.rb +28 -0
  18. data/lib/gemsmith/generators/gem.rb +17 -0
  19. data/lib/gemsmith/{skeletons/git_skeleton.rb → generators/git.rb} +13 -7
  20. data/lib/gemsmith/generators/git_hub.rb +14 -0
  21. data/lib/gemsmith/generators/guard.rb +13 -0
  22. data/lib/gemsmith/generators/pragma.rb +40 -0
  23. data/lib/gemsmith/generators/rails.rb +85 -0
  24. data/lib/gemsmith/generators/rake.rb +40 -0
  25. data/lib/gemsmith/generators/reek.rb +13 -0
  26. data/lib/gemsmith/generators/rspec.rb +23 -0
  27. data/lib/gemsmith/generators/rubocop.rb +16 -0
  28. data/lib/gemsmith/{skeletons/ruby_skeleton.rb → generators/ruby.rb} +5 -5
  29. data/lib/gemsmith/generators/scss_lint.rb +13 -0
  30. data/lib/gemsmith/generators/travis.rb +13 -0
  31. data/lib/gemsmith/git.rb +19 -0
  32. data/lib/gemsmith/identity.rb +1 -1
  33. data/lib/gemsmith/rake/builder.rb +65 -0
  34. data/lib/gemsmith/rake/{release.rb → publisher.rb} +14 -5
  35. data/lib/gemsmith/rake/tasks.rb +32 -20
  36. data/lib/gemsmith/template_helper.rb +28 -0
  37. data/lib/gemsmith/templates/%gem_name%/%gem_name%.gemspec.tt +30 -28
  38. data/lib/gemsmith/templates/%gem_name%/.codeclimate.yml.tt +36 -0
  39. data/lib/gemsmith/templates/%gem_name%/.rubocop.yml.tt +9 -1
  40. data/lib/gemsmith/templates/%gem_name%/.travis.yml.tt +4 -1
  41. data/lib/gemsmith/templates/%gem_name%/{CHANGELOG.md.tt → CHANGES.md.tt} +0 -0
  42. data/lib/gemsmith/templates/%gem_name%/Guardfile.tt +1 -1
  43. data/lib/gemsmith/templates/%gem_name%/README.md.tt +20 -18
  44. data/lib/gemsmith/templates/%gem_name%/Rakefile.tt +6 -1
  45. data/lib/gemsmith/templates/%gem_name%/bin/%gem_name%.tt +4 -4
  46. data/lib/gemsmith/templates/%gem_name%/bin/setup.tt +1 -1
  47. data/lib/gemsmith/templates/%gem_name%/lib/%gem_path%.rb.tt +4 -0
  48. data/lib/gemsmith/templates/%gem_name%/lib/%gem_path%/cli.rb.tt +54 -0
  49. data/lib/gemsmith/templates/%gem_name%/lib/{%gem_name% → %gem_path%}/engine.rb.tt +2 -4
  50. data/lib/gemsmith/templates/%gem_name%/lib/{%gem_name% → %gem_path%}/identity.rb.tt +3 -5
  51. data/lib/gemsmith/templates/%gem_name%/lib/generators/{%gem_name% → %gem_path%}/install/USAGE.tt +0 -0
  52. data/lib/gemsmith/templates/%gem_name%/lib/generators/{%gem_name% → %gem_path%}/install/install_generator.rb.tt +2 -5
  53. data/lib/gemsmith/templates/%gem_name%/lib/generators/{%gem_name% → %gem_path%}/upgrade/USAGE.tt +0 -0
  54. data/lib/gemsmith/templates/%gem_name%/lib/generators/{%gem_name% → %gem_path%}/upgrade/upgrade_generator.rb.tt +2 -5
  55. data/lib/gemsmith/templates/%gem_name%/lib/tasks/reek.rake.tt +6 -0
  56. data/lib/gemsmith/templates/%gem_name%/lib/tasks/scss_lint.rake.tt +6 -0
  57. data/lib/gemsmith/templates/%gem_name%/spec/lib/%gem_path%/cli_spec.rb.tt +83 -0
  58. data/lib/gemsmith/templates/%gem_name%/spec/rails_helper.rb.tt +14 -0
  59. data/lib/gemsmith/templates/%gem_name%/spec/spec_helper.rb.tt +29 -16
  60. data/lib/gemsmith/templates/%gem_name%/spec/support/shared_contexts/temp_dir.rb.tt +9 -0
  61. data/lib/tasks/reek.rake +8 -0
  62. data/lib/tasks/rspec.rake +2 -0
  63. data/lib/tasks/rubocop.rake +2 -0
  64. metadata +138 -149
  65. metadata.gz.sig +0 -0
  66. data/lib/gemsmith/aids/git.rb +0 -12
  67. data/lib/gemsmith/aids/spec.rb +0 -46
  68. data/lib/gemsmith/configuration.rb +0 -200
  69. data/lib/gemsmith/rake/build.rb +0 -38
  70. data/lib/gemsmith/skeletons/base_skeleton.rb +0 -29
  71. data/lib/gemsmith/skeletons/bundler_skeleton.rb +0 -15
  72. data/lib/gemsmith/skeletons/cli_skeleton.rb +0 -16
  73. data/lib/gemsmith/skeletons/documentation_skeleton.rb +0 -28
  74. data/lib/gemsmith/skeletons/gem_skeleton.rb +0 -17
  75. data/lib/gemsmith/skeletons/git_hub_skeleton.rb +0 -14
  76. data/lib/gemsmith/skeletons/guard_skeleton.rb +0 -13
  77. data/lib/gemsmith/skeletons/pry_skeleton.rb +0 -13
  78. data/lib/gemsmith/skeletons/rails_skeleton.rb +0 -61
  79. data/lib/gemsmith/skeletons/rake_skeleton.rb +0 -37
  80. data/lib/gemsmith/skeletons/rspec_skeleton.rb +0 -26
  81. data/lib/gemsmith/skeletons/rubocop_skeleton.rb +0 -15
  82. data/lib/gemsmith/skeletons/travis_skeleton.rb +0 -13
  83. data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%.rb.tt +0 -6
  84. data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%/cli.rb.tt +0 -40
  85. data/lib/gemsmith/templates/%gem_name%/lib/tasks/console.rake.tt +0 -7
  86. data/lib/gemsmith/templates/%gem_name%/spec/lib/%gem_name%/%gem_name%_spec.rb.tt +0 -7
  87. data/lib/gemsmith/templates/%gem_name%/spec/support/extensions/pry.rb.tt +0 -5
  88. data/lib/gemsmith/templates/%gem_name%/spec/support/kit/default_config.rb.tt +0 -18
  89. data/lib/gemsmith/templates/%gem_name%/spec/support/kit/stderr.rb.tt +0 -9
  90. data/lib/gemsmith/templates/%gem_name%/spec/support/kit/stdout.rb.tt +0 -9
  91. data/lib/gemsmith/templates/%gem_name%/spec/support/kit/temp_dir.rb.tt +0 -25
  92. data/lib/tasks/console.rake +0 -7
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates Guard support.
6
+ class Guard < Base
7
+ def run
8
+ return unless configuration.dig(:generate, :guard)
9
+ cli.template "%gem_name%/Guardfile.tt", configuration
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pragmater"
4
+ require "pathname"
5
+
6
+ module Gemsmith
7
+ module Generators
8
+ # Formats pragma comments in source files.
9
+ class Pragma < Base
10
+ def self.comments
11
+ ["# frozen_string_literal: true"]
12
+ end
13
+
14
+ # rubocop:disable Metrics/MethodLength
15
+ def whitelist
16
+ %W[
17
+ Gemfile
18
+ Guardfile
19
+ Rakefile
20
+ config.ru
21
+ bin/#{configuration.dig :gem, :name}
22
+ bin/rails
23
+ .gemspec
24
+ .rake
25
+ .rb
26
+ ]
27
+ end
28
+
29
+ def run
30
+ whitelisted_files.each { |file| Pragmater::Writer.new(file, self.class.comments).add }
31
+ end
32
+
33
+ private
34
+
35
+ def whitelisted_files
36
+ Pathname.glob(%(#{cli.destination_root}/**/*{#{whitelist.join ","}})).select(&:file?)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates Ruby on Rails support.
6
+ class Rails < Base
7
+ def rails?
8
+ cli.run "command -v rails > /dev/null"
9
+ end
10
+
11
+ def install_rails
12
+ return if rails?
13
+ return unless cli.yes?("Ruby on Rails is not installed. Would you like to install it (y/n)?")
14
+ cli.run "gem install rails"
15
+ end
16
+
17
+ def create_engine
18
+ cli.template "#{lib_root}/%gem_path%/engine.rb.tt", configuration
19
+ cli.run "rails plugin new --skip #{configuration.dig :gem, :name} #{engine_options}"
20
+ end
21
+
22
+ def create_generator_files
23
+ cli.empty_directory "#{generator_root}/templates"
24
+ cli.template "#{generator_root}/install/install_generator.rb.tt", configuration
25
+ cli.template "#{generator_root}/install/USAGE.tt", configuration
26
+ cli.template "#{generator_root}/upgrade/upgrade_generator.rb.tt", configuration
27
+ cli.template "#{generator_root}/upgrade/USAGE.tt", configuration
28
+ end
29
+
30
+ def create_travis_gemfiles
31
+ return unless configuration.dig(:generate, :travis)
32
+ cli.template "%gem_name%/gemfiles/rails-%rails_version%.x.gemfile.tt", configuration
33
+ end
34
+
35
+ def add_comments
36
+ file = "%gem_name%/app/controllers/%gem_path%/application_controller.rb"
37
+ comment = "#{indentation}# The application controller.\n"
38
+ cli.insert_into_file file, comment, before: /.+class.+/
39
+
40
+ file = "%gem_name%/app/mailers/%gem_path%/application_mailer.rb"
41
+ comment = "#{indentation}# The application mailer.\n"
42
+ cli.insert_into_file file, comment, before: /.+class.+/
43
+
44
+ file = "%gem_name%/app/models/%gem_path%/application_record.rb"
45
+ comment = "#{indentation}# The application record.\n"
46
+ cli.insert_into_file file, comment, before: /.+class.+/
47
+ end
48
+
49
+ def remove_files
50
+ gem_name = configuration.dig :gem, :name
51
+ gem_path = configuration.dig :gem, :path
52
+
53
+ cli.remove_file "#{gem_name}/app/helpers/#{gem_path}/application_helper.rb", configuration
54
+ cli.remove_file "#{gem_name}/lib/#{gem_path}/version.rb", configuration
55
+ cli.remove_file "#{gem_name}/MIT-LICENSE", configuration
56
+ cli.remove_file "#{gem_name}/README.rdoc", configuration
57
+ end
58
+
59
+ def run
60
+ return unless configuration.dig(:generate, :rails)
61
+
62
+ install_rails
63
+ create_engine
64
+ create_generator_files
65
+ create_travis_gemfiles
66
+ add_comments
67
+ remove_files
68
+ end
69
+
70
+ private
71
+
72
+ def engine_options
73
+ "--skip-bundle --skip-test --skip-keeps --skip-git --mountable --dummy-path=spec/dummy"
74
+ end
75
+
76
+ def generator_root
77
+ "#{lib_root}/generators/%gem_path%"
78
+ end
79
+
80
+ def indentation
81
+ " " * (configuration.dig(:gem, :path).scan("/").size + 1)
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates Rake support.
6
+ class Rake < Base
7
+ def run
8
+ cli.template "%gem_name%/Rakefile.tt", configuration
9
+ configure_rakefile
10
+ end
11
+
12
+ private
13
+
14
+ def rspec_task
15
+ "spec" if configuration.dig(:generate, :rspec)
16
+ end
17
+
18
+ def reek_task
19
+ "reek" if configuration.dig(:generate, :reek)
20
+ end
21
+
22
+ def rubocop_task
23
+ "rubocop" if configuration.dig(:generate, :rubocop)
24
+ end
25
+
26
+ def scss_lint_task
27
+ "scss_lint" if configuration.dig(:generate, :scss_lint)
28
+ end
29
+
30
+ def default_tasks
31
+ [rspec_task, reek_task, rubocop_task, scss_lint_task].compact
32
+ end
33
+
34
+ def configure_rakefile
35
+ return if default_tasks.empty?
36
+ cli.append_to_file "%gem_name%/Rakefile", %(\ntask default: %w[#{default_tasks.join(" ")}]\n)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates Reek support.
6
+ class Reek < Base
7
+ def run
8
+ return unless configuration.dig(:generate, :reek)
9
+ cli.template "%gem_name%/lib/tasks/reek.rake.tt", configuration
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates RSpec support.
6
+ class Rspec < Base
7
+ def run
8
+ return unless configuration.dig(:generate, :rspec)
9
+
10
+ cli.template "%gem_name%/lib/tasks/rspec.rake.tt", configuration
11
+ cli.template "#{rspec_root}/spec_helper.rb.tt", configuration
12
+ cli.template("#{rspec_root}/rails_helper.rb.tt", configuration) if configuration.dig(:generate, :rails)
13
+ cli.template "#{rspec_root}/support/shared_contexts/temp_dir.rb.tt", configuration
14
+ end
15
+
16
+ private
17
+
18
+ def rspec_root
19
+ "%gem_name%/spec"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates Rubocop support.
6
+ class Rubocop < Base
7
+ def run
8
+ return unless configuration.dig(:generate, :rubocop)
9
+
10
+ cli.template "%gem_name%/.rubocop.yml.tt", configuration
11
+ cli.template "%gem_name%/lib/tasks/rubocop.rake.tt", configuration
12
+ cli.run "rubocop --auto-correct > /dev/null"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gemsmith
4
- module Skeletons
5
- # Configures Ruby support.
6
- class RubySkeleton < BaseSkeleton
7
- def create
8
- cli.template "%gem_name%/.ruby-version.tt", configuration.to_h
4
+ module Generators
5
+ # Generates Ruby support.
6
+ class Ruby < Base
7
+ def run
8
+ cli.template "%gem_name%/.ruby-version.tt", configuration
9
9
  end
10
10
  end
11
11
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates SCSS Lint support.
6
+ class SCSSLint < Base
7
+ def run
8
+ return unless configuration.dig(:generate, :scss_lint)
9
+ cli.template "%gem_name%/lib/tasks/scss_lint.rake.tt", configuration
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Generators
5
+ # Generates Travis CI support.
6
+ class Travis < Base
7
+ def run
8
+ return unless configuration.dig(:generate, :travis)
9
+ cli.template "%gem_name%/.travis.yml.tt", configuration
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ # A thin wrapper to Git.
5
+ class Git
6
+ def self.config_value key
7
+ `git config #{key}`.chomp
8
+ end
9
+
10
+ def self.github_user
11
+ config_value "github.user"
12
+ end
13
+
14
+ def self.github_url project
15
+ return "" if github_user.empty?
16
+ "https://github.com/#{github_user}/#{project}"
17
+ end
18
+ end
19
+ end
@@ -12,7 +12,7 @@ module Gemsmith
12
12
  end
13
13
 
14
14
  def self.version
15
- "7.7.0"
15
+ "8.0.0"
16
16
  end
17
17
 
18
18
  def self.version_label
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/ui/shell"
4
+ require "fileutils"
5
+ require "tocer"
6
+
7
+ module Gemsmith
8
+ module Rake
9
+ # Provides gem build functionality. Meant to be wrapped in Rake tasks.
10
+ class Builder
11
+ def initialize tocer: Tocer::Writer, shell: Bundler::UI::Shell.new, kernel: Kernel
12
+ @tocer = tocer
13
+ @shell = shell
14
+ @kernel = kernel
15
+ end
16
+
17
+ def doc
18
+ readme = File.join Dir.pwd, "README.md"
19
+ tocer.new(readme).write
20
+ shell.confirm "Updated gem documentation."
21
+ end
22
+
23
+ def clean
24
+ FileUtils.rm_rf "pkg"
25
+ shell.confirm "Cleaned gem artifacts."
26
+ end
27
+
28
+ def validate
29
+ return if `git status --porcelain`.empty?
30
+ shell.error "Build failed: Gem has uncommitted changes."
31
+ kernel.exit 1
32
+ end
33
+
34
+ def build gem_spec
35
+ path = package_path gem_spec
36
+
37
+ if kernel.system("gem build #{gem_spec.name}.gemspec")
38
+ FileUtils.mkdir_p "pkg"
39
+ FileUtils.mv gem_spec.package_file_name, path
40
+ shell.confirm "Built: #{path}."
41
+ else
42
+ shell.error "Unable to build: #{path}."
43
+ end
44
+ end
45
+
46
+ def install gem_spec
47
+ gem_name = "#{gem_spec.name} #{gem_spec.version_number}"
48
+
49
+ if kernel.system("gem install #{package_path gem_spec}")
50
+ shell.confirm "Installed: #{gem_name}."
51
+ else
52
+ shell.error "Unable to install: #{gem_name}."
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ attr_reader :tocer, :shell, :kernel
59
+
60
+ def package_path gem_spec
61
+ File.join "pkg", gem_spec.package_file_name
62
+ end
63
+ end
64
+ end
65
+ end
@@ -2,22 +2,27 @@
2
2
 
3
3
  require "milestoner"
4
4
  require "gemsmith/credentials"
5
+ require "gemsmith/git"
6
+ require "gemsmith/identity"
5
7
 
6
8
  module Gemsmith
7
9
  module Rake
8
10
  # Provides gem release functionality. Meant to be wrapped in Rake tasks.
9
- class Release
11
+ class Publisher
10
12
  def self.gem_spec_path
11
13
  String Dir["#{Dir.pwd}/*.gemspec"].first
12
14
  end
13
15
 
14
- def initialize gem_spec: Gemsmith::Aids::GemSpec.new(self.class.gem_spec_path),
16
+ # rubocop:disable Metrics/ParameterLists
17
+ def initialize gem_spec: Gemsmith::Gem::Specification.new(self.class.gem_spec_path),
18
+ gem_config: {},
15
19
  credentials: Gemsmith::Credentials,
16
20
  publisher: Milestoner::Publisher.new,
17
21
  shell: Bundler::UI::Shell.new,
18
22
  kernel: Kernel
19
23
 
20
24
  @gem_spec = gem_spec
25
+ @gem_config = gem_config
21
26
  @credentials = credentials
22
27
  @publisher = publisher
23
28
  @shell = shell
@@ -33,16 +38,20 @@ module Gemsmith
33
38
  process_push status
34
39
  end
35
40
 
36
- def publish sign: true
37
- publisher.publish gem_spec.version_number, sign: sign
41
+ def publish
42
+ publisher.publish gem_spec.version_number, sign: signed?
38
43
  push
39
44
  rescue Milestoner::Errors::Base => error
40
45
  shell.error error.message
41
46
  end
42
47
 
48
+ def signed?
49
+ gem_config.dig :publish, :sign
50
+ end
51
+
43
52
  private
44
53
 
45
- attr_reader :gem_spec, :credentials, :publisher, :shell, :kernel
54
+ attr_reader :gem_spec, :gem_config, :credentials, :publisher, :shell, :kernel
46
55
 
47
56
  def translate_key key
48
57
  key == credentials.default_key ? :rubygems : key
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "gemsmith/aids/gem_spec"
3
+ require "gemsmith/gem/specification"
5
4
  require "gemsmith/errors/base"
6
5
  require "gemsmith/errors/specification"
7
- require "gemsmith/rake/build"
8
- require "gemsmith/rake/release"
6
+ require "gemsmith/rake/builder"
7
+ require "gemsmith/rake/publisher"
9
8
 
10
9
  module Gemsmith
11
10
  module Rake
@@ -13,48 +12,61 @@ module Gemsmith
13
12
  class Tasks
14
13
  include ::Rake::DSL
15
14
 
15
+ def self.default_gem_spec
16
+ Dir.glob("#{Dir.pwd}/*.gemspec").first
17
+ end
18
+
16
19
  def self.setup
17
20
  new.install
18
21
  end
19
22
 
20
- def initialize
21
- @gem_spec = Gemsmith::Aids::GemSpec.new Dir.glob("#{Dir.pwd}/*.gemspec").first
22
- @build = Gemsmith::Rake::Build.new
23
- @release = Gemsmith::Rake::Release.new
23
+ def initialize gem_spec: Gem::Specification.new(self.class.default_gem_spec),
24
+ builder: Rake::Builder.new,
25
+ publisher: Rake::Publisher.new
26
+ @gem_spec = gem_spec
27
+ @builder = builder
28
+ @publisher = publisher
24
29
  end
25
30
 
26
31
  def install
27
- ::Rake::Task[:build].enhance [:clean, :doc, :validate]
28
- ::Rake::Task[:release].clear
29
-
30
32
  desc "Update README (table of contents)"
31
33
  task :doc do
32
- build.doc
34
+ builder.doc
33
35
  end
34
36
 
35
37
  desc "Clean gem artifacts"
36
38
  task :clean do
37
- build.clean
39
+ builder.clean
38
40
  end
39
41
 
40
42
  task :validate do
41
- build.validate
43
+ builder.validate
42
44
  end
43
45
 
44
- desc "Build, tag #{gem_spec.version_label} (unsigned), and push #{gem_spec.package_file_name} to RubyGems"
45
- task release: :build do
46
- release.publish sign: false
46
+ desc "Build #{gem_spec.package_file_name} package"
47
+ task build: [:clean, :doc, :validate] do
48
+ builder.build gem_spec
47
49
  end
48
50
 
49
- desc "Build, tag #{gem_spec.version_label} (signed), and push #{gem_spec.package_file_name} to RubyGems"
51
+ desc "Install #{gem_spec.package_file_name} package"
52
+ task install: :build do
53
+ builder.install gem_spec
54
+ end
55
+
56
+ desc "Build, tag as #{gem_spec.version_label} (#{signed_label}), " \
57
+ "and push #{gem_spec.package_file_name} to RubyGems"
50
58
  task publish: :build do
51
- release.publish
59
+ publisher.publish
52
60
  end
53
61
  end
54
62
 
55
63
  private
56
64
 
57
- attr_reader :gem_spec, :build, :release
65
+ attr_reader :gem_spec, :builder, :publisher
66
+
67
+ def signed_label
68
+ publisher.signed? ? "signed" : "unsigned"
69
+ end
58
70
  end
59
71
  end
60
72
  end