Sha256: e09f33442ff670a4307ffcea10b198c9370eb3ac4e3d47b6a47783638e41c857

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

module PkgForge
  ##
  # Add version methods to Forge
  class Forge
    attr_writer :version_block

    Contract None => Proc
    def version_block
      @version_block ||= proc { raise 'No version block provided' }
    end

    Contract None => String
    def version
      @version ||= Dir.chdir(tmpdir(:build)) do
        PkgForge::DSL::Version.new(self).instance_eval(&version_block)
      end
    end

    Contract None => Num
    def revision
      @revision ||= `git describe --abbrev=0 --tags`.split('-').last.to_i + 1
    end

    Contract None => String
    def full_version
      "#{version}-#{revision}"
    end
  end

  module DSL
    ##
    # Add version methods to Forge DSL
    class Forge
      Contract Func[None => Maybe[String]] => nil
      def version(&block)
        @forge.version_block = block
        nil
      end
    end

    ##
    # Add version methods to Version DSL
    class Version
      Contract Maybe[Regexp], Maybe[String] => String
      def git_tag(regex = nil, replace = '\1')
        tag = `git describe --tags`.rstrip
        tag.gsub!(regex, replace) if regex
        tag
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pkgforge-0.4.0 lib/pkgforge/components/version.rb
pkgforge-0.3.0 lib/pkgforge/components/version.rb