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
between_tags exclude_tags since_tag max_issues
github_site github_endpoint simple_list
future_release verbose release_url )

Instance Method Summary collapse

Constructor Details

#initialize(*args, &task_block) ⇒ RakeTask

Public: Initialise a new GitHubChangelogGenerator::RakeTask.

Example

GitHubChangelogGenerator::RakeTask.new


30
31
32
33
34
# File 'lib/github_changelog_generator/task.rb', line 30

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

  define(args, &task_block)
end

Instance Method Details

#define(args, &task_block) ⇒ Object



36
37
38
39
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 36

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

  task_block.call(*[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.get_default_options

    if options[:user].nil? || options[:project].nil?
      Parser.detect_user_and_project(options)
    end

    OPTIONS.each do |o|
      v = instance_variable_get("@#{o}")
      options[o.to_sym] = v if v
    end

    generator = Generator.new options

    log = generator.compound_changelog

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