Sha256: da241aaf00f9bb5c7007b74319eb84eba08c12e1f3f6a00fdd5630bd164238bb

Contents?: true

Size: 1.92 KB

Versions: 11

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

require "rake"
require "gemsmith/gem/specification"
require "gemsmith/errors/base"
require "gemsmith/errors/specification"
require "gemsmith/rake/builder"
require "gemsmith/rake/publisher"

module Gemsmith
  module Rake
    # Provides Rake tasks for use in all gems built by this gem.
    class Tasks
      include ::Rake::DSL

      def self.default_gem_spec
        Dir.glob("#{Dir.pwd}/*.gemspec").first
      end

      def self.setup
        new.install
      end

      def initialize gem_spec: Gem::Specification.new(self.class.default_gem_spec),
                     builder: Rake::Builder.new,
                     publisher: Rake::Publisher.new
        @gem_spec = gem_spec
        @builder = builder
        @publisher = publisher
      end

      # rubocop:disable Metrics/AbcSize
      # rubocop:disable Metrics/MethodLength
      # :reek:TooManyStatements
      def install
        desc "Update Table of Contents (README)"
        task :toc do
          builder.toc
        end

        desc "Clean gem artifacts"
        task :clean do
          builder.clean
        end

        task :validate do
          builder.validate
        end

        desc "Build #{gem_package} package"
        task build: %i[clean toc validate] do
          builder.build gem_spec
        end

        desc "Install #{gem_package} package"
        task install: :build do
          builder.install gem_spec
        end

        desc "Build, tag as #{gem_spec.version} (#{signed_label}), " \
             "and push #{gem_package} to RubyGems"
        task publish: :build do
          publisher.publish
        end
      end
      # rubocop:enable Metrics/AbcSize
      # rubocop:enable Metrics/MethodLength

      private

      attr_reader :gem_spec, :builder, :publisher

      def gem_package
        gem_spec.package_file_name
      end

      def signed_label
        publisher.signed? ? "signed" : "unsigned"
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
gemsmith-13.5.0 lib/gemsmith/rake/tasks.rb
gemsmith-13.4.0 lib/gemsmith/rake/tasks.rb
gemsmith-13.3.0 lib/gemsmith/rake/tasks.rb
gemsmith-13.2.0 lib/gemsmith/rake/tasks.rb
gemsmith-13.1.0 lib/gemsmith/rake/tasks.rb
gemsmith-13.0.0 lib/gemsmith/rake/tasks.rb
gemsmith-12.4.0 lib/gemsmith/rake/tasks.rb
gemsmith-12.3.0 lib/gemsmith/rake/tasks.rb
gemsmith-12.2.0 lib/gemsmith/rake/tasks.rb
gemsmith-12.1.0 lib/gemsmith/rake/tasks.rb
gemsmith-12.0.0 lib/gemsmith/rake/tasks.rb