Class: GitHubChangelogGenerator::RakeTask

Inherits:
Rake::TaskLib
  • Object
show all
Includes:
Rake::DSL
Defined in:
lib/github_changelog_generator/task.rb

Constant Summary collapse

OPTIONS =
%w[ user project token date_format output
bug_prefix enhancement_prefix issue_prefix
header merge_prefix issues
add_issues_wo_labels add_pr_wo_labels
pulls filter_issues_by_milestone author
unreleased_only unreleased unreleased_label
compare_link include_labels exclude_labels
bug_labels enhancement_labels include_tags_regex
between_tags exclude_tags exclude_tags_regex since_tag max_issues
github_site github_endpoint simple_list
future_release release_branch verbose release_url
base configure_sections add_sections http_cache]

Instance Method Summary collapse

Constructor Details

#initialize(*args, &task_block) ⇒ RakeTask

Public: Initialise a new GitHubChangelogGenerator::RakeTask.

Example

GitHubChangelogGenerator::RakeTask.new

33
34
35
36
37
38
# File 'lib/github_changelog_generator/task.rb', line 33

def initialize(*args, &task_block)
  super()
  @name = args.shift || :changelog

  define(args, &task_block)
end

Instance Method Details

#define(args) {|[self, args].slice(0, task_block.arity)| ... } ⇒ Object

Yields:

  • ([self, args].slice(0, task_block.arity))

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/github_changelog_generator/task.rb', line 40

def define(args, &task_block)
  desc "Generate a Changelog from GitHub"

  yield(*[self, args].slice(0, task_block.arity)) if task_block

  # clear any (auto-)pre-existing task
  Rake::Task[@name].clear if Rake::Task.task_defined?(@name)

  task @name do
    # mimick parse_options
    options = Parser.default_options

    OPTIONS.each do |o|
      v = instance_variable_get("@#{o}")
      options[o.to_sym] = v unless v.nil?
    end
    abort "user and project are required." unless options[:user] && options[:project]
    generator = Generator.new options

    log = generator.compound_changelog

    output_filename = (options[:output]).to_s
    File.open(output_filename, "w") { |file| file.write(log) }
    puts "Done!"
    puts "Generated log placed in #{Dir.pwd}/#{output_filename}"
  end
end