github_changelog_generator 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 948686ef4f1a5836227cc06e225a9a396b58b665
4
- data.tar.gz: d0c2c3d99e20dd16c2f649ceb82f321c67364bff
3
+ metadata.gz: 59c84fc6b47537cdca06c26c80e84ba2173eb941
4
+ data.tar.gz: 23353066809d7171627bce5d6ae88d004f685383
5
5
  SHA512:
6
- metadata.gz: d74933a7c4ca8db21f9de2549954397cad5ab316a0150b34fd1f84297acdfd1ac987ba6bf741494eaec5061780a256a041e9c20568d448794e3232cc9e0dd474
7
- data.tar.gz: 3fe8ffd4448569664696ed546dfcccb09ce45a61690f346849c3196aae4877a20677bf61551e7d56d856b7143777aaa4a2cebb1546b29809646364659b377288
6
+ metadata.gz: 3e62a0bcc2d7b58f4059b578dd2d5b8a3715768d29cc75b24e31660bae5f037551fdb2fa2d601e0c289b5eada5aad668d1e7dc38f93e482c2af998568eed06f0
7
+ data.tar.gz: bce9377b820a4cea95a2e209efa60e09b8abc3c0e2f6723b0b98a816fb18ea89880c508c2f437bc42a29dab6f950d75650a14c514bb26f06d476871fb27e931b
data/.gitignore CHANGED
@@ -0,0 +1 @@
1
+ coverage/
data/.travis.yml CHANGED
@@ -1,5 +1,8 @@
1
+ sudo: false
1
2
  language: ruby
2
- before_install: gem update --system
3
+ before_install:
4
+ - gem update --system
5
+ - gem install bundler
3
6
  rvm:
4
7
  - 2.1.0
5
8
  script:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Change Log
2
2
 
3
+ ## [Unreleased](https://github.com/skywinder/github-changelog-generator/tree/HEAD)
4
+
5
+ [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.9.0...HEAD)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Rubocop: less complex methods in parser.rb [\#297](https://github.com/skywinder/github-changelog-generator/pull/297) ([olleolleolle](https://github.com/olleolleolle))
10
+ - Introduce ParserError exception class [\#296](https://github.com/skywinder/github-changelog-generator/pull/296) ([olleolleolle](https://github.com/olleolleolle))
11
+ - ParserFile: support values with equals signs [\#285](https://github.com/skywinder/github-changelog-generator/pull/285) ([olleolleolle](https://github.com/olleolleolle))
12
+
13
+ **Merged pull requests:**
14
+
15
+ - Update bundler [\#306](https://github.com/skywinder/github-changelog-generator/pull/306) ([SteveGilvarry](https://github.com/SteveGilvarry))
16
+ - Add options to def self.user\_and\_project\_from\_git to fix parser.rb:19… [\#303](https://github.com/skywinder/github-changelog-generator/pull/303) ([SteveGilvarry](https://github.com/SteveGilvarry))
17
+ - Git ignore coverage/ [\#300](https://github.com/skywinder/github-changelog-generator/pull/300) ([olleolleolle](https://github.com/olleolleolle))
18
+ - \[refactor\] Fix docblock datatype, use \#map [\#299](https://github.com/skywinder/github-changelog-generator/pull/299) ([olleolleolle](https://github.com/olleolleolle))
19
+ - \[refactor\] Reader: positive Boolean; unused \#map [\#298](https://github.com/skywinder/github-changelog-generator/pull/298) ([olleolleolle](https://github.com/olleolleolle))
20
+ - Add base option to RakeTask [\#287](https://github.com/skywinder/github-changelog-generator/pull/287) ([jkeiser](https://github.com/jkeiser))
21
+
22
+ ## [1.9.0](https://github.com/skywinder/github-changelog-generator/tree/1.9.0) (2015-09-17)
23
+ [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.8.5...1.9.0)
24
+
25
+ **Implemented enhancements:**
26
+
27
+ - Feature: exclude\_tags using regular expression [\#281](https://github.com/skywinder/github-changelog-generator/pull/281) ([olleolleolle](https://github.com/olleolleolle))
28
+ - Auto parse options from file .github\_changelog\_generator [\#278](https://github.com/skywinder/github-changelog-generator/pull/278) ([dlanileonardo](https://github.com/dlanileonardo))
29
+
3
30
  ## [1.8.5](https://github.com/skywinder/github-changelog-generator/tree/1.8.5) (2015-09-15)
4
31
  [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.8.4...1.8.5)
5
32
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- github_changelog_generator (1.8.5)
4
+ github_changelog_generator (1.9.0)
5
5
  colorize (~> 0.7)
6
6
  github_api (~> 0.12)
7
7
 
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/github_changelog_generator.svg)](http://badge.fury.io/rb/github_changelog_generator)
2
- [![Dependency Status](https://gemnasium.com/skywinder/github-changelog-generator.svg)](https://gemnasium.com/skywinder/github-changelog-generator)
2
+ [![Dependency Status](https://gemnasium.com/skywinder/github-changelog-generator.svg)](https://gemnasium.com/skywinder/github-changelog-generator)
3
3
  [![Build Status](https://travis-ci.org/skywinder/github-changelog-generator.svg?branch=master)](https://travis-ci.org/skywinder/github-changelog-generator)
4
4
  [![Inline docs](http://inch-ci.org/github/skywinder/github-changelog-generator.svg)](http://inch-ci.org/github/skywinder/github-changelog-generator)
5
5
  [![Code Climate](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/gpa.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator)
@@ -32,7 +32,7 @@ To make it easier for users and contributors to see precisely what notable chang
32
32
  ### *Why should I care?*
33
33
  Because software tools are for people. If you don’t care, why are you contributing to open source? Surely, there must be a kernel (ha!) of care somewhere in that lovely little brain of yours.
34
34
 
35
- > :copyright: *[http://keepachangelog.com](http://keepachangelog.com/)*
35
+ > :arrow_right: *[http://keepachangelog.com](http://keepachangelog.com/)*
36
36
 
37
37
  ## Installation
38
38
 
@@ -117,7 +117,7 @@ It's time to create this token or wait for 1 hour before GitHub reset the counte
117
117
  ## Migrating from a manual changelog
118
118
 
119
119
  Knowing how dedicated you are to your project, you probably haven't been waiting for github-changelog-generator to keep a changelog,
120
- but you most likely wouln't like to have to open issues and PRs for all past features listed in your historic changelog.
120
+ but you most likely wouldn't like to have to open issues and PRs for all past features listed in your historic changelog.
121
121
 
122
122
  That's where `--base` comes handy. This option lets you pass a static changelog to be appended at the end of the generated entries.
123
123
 
data/lib/CHANGELOG.md CHANGED
@@ -22,6 +22,7 @@
22
22
 
23
23
  **Merged pull requests:**
24
24
 
25
+ - Merged PR to Develop [\#19](https://github.com/skywinder/changelog_test/pull/19) ([skywinder](https://github.com/skywinder))
25
26
  - This a PR with a lot of comments and events [\#17](https://github.com/skywinder/changelog_test/pull/17) ([skywinder](https://github.com/skywinder))
26
27
  - This PR closes 14 from commit [\#15](https://github.com/skywinder/changelog_test/pull/15) ([skywinder](https://github.com/skywinder))
27
28
  - This PR to close \#12 from body [\#13](https://github.com/skywinder/changelog_test/pull/13) ([skywinder](https://github.com/skywinder))
@@ -7,22 +7,16 @@ module GitHubChangelogGenerator
7
7
  class Parser
8
8
  # parse options with optparse
9
9
  def self.parse_options
10
- options = get_default_options
10
+ options = default_options
11
11
 
12
- parser_file = ParserFile.new options
13
- parser_file.parse!
12
+ ParserFile.new(options).parse!
14
13
 
15
14
  parser = setup_parser(options)
16
15
  parser.parse!
17
16
 
18
- if options[:user].nil? || options[:project].nil?
19
- detect_user_and_project(options, ARGV[0], ARGV[1])
20
- end
17
+ user_and_project_from_git(options)
21
18
 
22
- if !options[:user] || !options[:project]
23
- puts parser.banner
24
- exit
25
- end
19
+ abort(parser.banner) unless options[:user] && options[:project]
26
20
 
27
21
  print_options(options)
28
22
 
@@ -165,8 +159,8 @@ module GitHubChangelogGenerator
165
159
  end
166
160
 
167
161
  # just get default options
168
- def self.get_default_options
169
- options = {
162
+ def self.default_options
163
+ {
170
164
  tag1: nil,
171
165
  tag2: nil,
172
166
  date_format: "%Y-%m-%d",
@@ -194,21 +188,25 @@ module GitHubChangelogGenerator
194
188
  enhancement_prefix: "**Implemented enhancements:**",
195
189
  git_remote: "origin"
196
190
  }
191
+ end
197
192
 
198
- options
193
+ def self.user_and_project_from_git(options)
194
+ if options[:user].nil? || options[:project].nil?
195
+ detect_user_and_project(options, ARGV[0], ARGV[1])
196
+ end
199
197
  end
200
198
 
201
199
  # Detects user and project from git
202
200
  def self.detect_user_and_project(options, arg0 = nil, arg1 = nil)
203
201
  options[:user], options[:project] = user_project_from_option(arg0, arg1, options[:github_site])
204
- if !options[:user] || !options[:project]
205
- if ENV["RUBYLIB"] =~ /ruby-debug-ide/
206
- options[:user] = "skywinder"
207
- options[:project] = "changelog_test"
208
- else
209
- remote = `git config --get remote.#{options[:git_remote]}.url`
210
- options[:user], options[:project] = user_project_from_remote(remote)
211
- end
202
+ return if options[:user] && options[:project]
203
+
204
+ if ENV["RUBYLIB"] =~ /ruby-debug-ide/
205
+ options[:user] = "skywinder"
206
+ options[:project] = "changelog_test"
207
+ else
208
+ remote = `git config --get remote.#{options[:git_remote]}.url`
209
+ options[:user], options[:project] = user_project_from_remote(remote)
212
210
  end
213
211
  end
214
212
 
@@ -1,36 +1,39 @@
1
1
  module GitHubChangelogGenerator
2
+ ParserError = Class.new(StandardError)
3
+
2
4
  class ParserFile
3
5
  def initialize(options)
4
6
  @options = options
5
7
  end
6
8
 
7
- def file
8
- File.expand_path(@options[:params_file] || ".github_changelog_generator")
9
+ def parse!
10
+ return unless File.exist?(file)
11
+
12
+ File.readlines(file).each { |line| parse_line!(line) }
9
13
  end
10
14
 
11
- def file?
12
- File.exist?(file)
15
+ private
16
+
17
+ def file
18
+ @file ||= File.expand_path(@options[:params_file] || ".github_changelog_generator")
13
19
  end
14
20
 
15
- def file_open
16
- File.open(file)
21
+ def parse_line!(line)
22
+ key_sym, value = extract_pair(line)
23
+ value = true if value =~ (/^(true|t|yes|y|1)$/i)
24
+ value = false if value =~ (/^(false|f|no|n|0)$/i)
25
+ @options[key_sym] = value
26
+ rescue
27
+ raise ParserError, "Config file #{file} is incorrect in line \"#{line.gsub(/[\n\r]+/, '')}\""
17
28
  end
18
29
 
19
- def parse!
20
- return unless file?
21
- file_open.each do |line|
22
- begin
23
- key, value = line.split("=")
24
- key_sym = key.sub("-", "_").to_sym
25
- value = value.gsub(/[\n\r]+/, "")
26
- value = true if value =~ (/^(true|t|yes|y|1)$/i)
27
- value = false if value =~ (/^(false|f|no|n|0)$/i)
28
- @options[key_sym] = value
29
- rescue
30
- raise "File #{file} is incorrect in line \"#{line.gsub(/[\n\r]+/, '')}\""
31
- end
32
- end
33
- @options
30
+ # Returns a the setting as a symbol and its string value sans newlines.
31
+ #
32
+ # @param line [String] unparsed line from config file
33
+ # @return [Array<Symbol, String>]
34
+ def extract_pair(line)
35
+ key, value = line.split("=", 2)
36
+ [key.sub("-", "_").to_sym, value.gsub(/[\n\r]+/, "")]
34
37
  end
35
38
  end
36
39
  end
@@ -53,31 +53,28 @@ module GitHubChangelogGenerator
53
53
 
54
54
  @heading_structures.each do |regexp|
55
55
  matches = Regexp.new(regexp).match(heading)
56
- captures.merge!(Hash[matches.names.map.zip(matches.captures)]) unless matches.nil?
57
-
58
- # Try Regular Expressions until you find one that delivers results
59
- break unless matches.nil?
56
+ if matches
57
+ captures.merge!(Hash[matches.names.zip(matches.captures)])
58
+ break
59
+ end
60
60
  end
61
61
 
62
62
  captures
63
63
  end
64
64
 
65
- # Parse the given ChangeLog data into a Hash
65
+ # Parse the given ChangeLog data into a list of Hashes
66
66
  #
67
67
  # @param [String] data File data from the ChangeLog.md
68
- # @return [Hash] Parsed data, e.g. [{ 'version' => ..., 'url' => ..., 'date' => ..., 'content' => ...}, ...]
68
+ # @return [Array<Hash>] Parsed data, e.g. [{ 'version' => ..., 'url' => ..., 'date' => ..., 'content' => ...}, ...]
69
69
  def parse(data)
70
70
  sections = data.split(/^## .+?$/)
71
71
  headings = data.scan(/^## .+?$/)
72
- changelog = []
73
72
 
74
- headings.each_with_index do |heading, index|
75
- captures = parse_heading(heading)
76
- captures["content"] = sections.at(index + 1)
77
- changelog.push captures
73
+ headings.each_with_index.map do |heading, index|
74
+ section = parse_heading(heading)
75
+ section["content"] = sections.at(index + 1)
76
+ section
78
77
  end
79
-
80
- changelog
81
78
  end
82
79
 
83
80
  def read(file_path)
@@ -16,7 +16,7 @@ module GitHubChangelogGenerator
16
16
  bug_labels enhancement_labels
17
17
  between_tags exclude_tags since_tag max_issues
18
18
  github_site github_endpoint simple_list
19
- future_release verbose release_url )
19
+ future_release verbose release_url base )
20
20
 
21
21
  OPTIONS.each do |o|
22
22
  attr_accessor o.to_sym
@@ -43,11 +43,9 @@ module GitHubChangelogGenerator
43
43
 
44
44
  task @name do
45
45
  # mimick parse_options
46
- options = Parser.get_default_options
46
+ options = Parser.default_options
47
47
 
48
- if options[:user].nil? || options[:project].nil?
49
- Parser.detect_user_and_project(options)
50
- end
48
+ Parser.user_and_project_from_git(options)
51
49
 
52
50
  OPTIONS.each do |o|
53
51
  v = instance_variable_get("@#{o}")
@@ -1,3 +1,3 @@
1
1
  module GitHubChangelogGenerator
2
- VERSION = "1.9.0"
2
+ VERSION = "1.10.0"
3
3
  end
@@ -1,2 +1,3 @@
1
1
  unreleased_label=staging
2
2
  unreleased=false
3
+ header==== Changelog ===
@@ -10,23 +10,32 @@ describe GitHubChangelogGenerator::ParserFile do
10
10
  context "when file is empty" do
11
11
  let(:options) { { params_file: "spec/files/github_changelog_params_empty" } }
12
12
  let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
13
- subject { parse.parse! }
14
- it { is_expected.to be_a(Hash) }
15
- it { is_expected.to eq(options) }
13
+
14
+ it "does not change the options" do
15
+ expect { parse.parse! }.to_not change { options }
16
+ end
16
17
  end
17
18
 
18
19
  context "when file is incorrect" do
19
20
  let(:options) { { params_file: "spec/files/github_changelog_params_incorrect" } }
21
+ let(:options_before_change) { options.dup }
20
22
  let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
21
- it { expect { fail.raise! }.to raise_error RuntimeError }
23
+ it { expect { parse.parse! }.to raise_error(GitHubChangelogGenerator::ParserError) }
22
24
  end
23
25
 
24
26
  context "when override default values" do
25
- let(:options) { { params_file: "spec/files/github_changelog_params_override" }.merge(GitHubChangelogGenerator::Parser.get_default_options) }
27
+ let(:default_options) { GitHubChangelogGenerator::Parser.default_options }
28
+ let(:options) { { params_file: "spec/files/github_changelog_params_override" }.merge(default_options) }
29
+ let(:options_before_change) { options.dup }
26
30
  let(:parse) { GitHubChangelogGenerator::ParserFile.new(options) }
27
- subject { parse.parse! }
28
- it { is_expected.to be_a(Hash) }
29
- it { is_expected.to eq(options.merge(unreleased_label: "staging", unreleased: false)) }
31
+
32
+ it "changes the options" do
33
+ expect { parse.parse! }.to change { options }
34
+ .from(options_before_change)
35
+ .to(options_before_change.merge(unreleased_label: "staging",
36
+ unreleased: false,
37
+ header: "=== Changelog ==="))
38
+ end
30
39
  end
31
40
  end
32
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_changelog_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Petr Korolev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-17 00:00:00.000000000 Z
11
+ date: 2016-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api