danger-changelog 0.7.0 → 0.7.1

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
  SHA256:
3
- metadata.gz: 03270bfff2f0983bbf17c710358dfb6850d727f28afa131593deaed8c6824c0f
4
- data.tar.gz: 8723e715d8f3f357e3d72d8e181c3d9174085de6c32ea79a87fbdbcf61160085
3
+ metadata.gz: e13e8dd279d1b68b2703760929b9c2ab4420db154c5420f27c8f6e6a25834719
4
+ data.tar.gz: a6d5eb4a335dc87df1d586f7f644da0965bb88f7040049797684ac315b3c1ee8
5
5
  SHA512:
6
- metadata.gz: 21fe62c2ce3142983ad12dcdee2dca0e3e1246ed376924619dba25151bd4556608f978d1e1b2225a9cfc5ae548eca5302e48a589b1e70711fafc01f759a09d2e
7
- data.tar.gz: 02c819d7ec4819b83c76c146778beb44f9a9c716726113d41d5cbaee70523ca91ed0c137b5dd92c52540b34a1e24faaa8dab846f73ea72c4cbd73a99e2232d22
6
+ metadata.gz: 7ad171e3366fafab0a20cbf65b5a67e8b77d1fd0d0833f8c45d2668b7e796d51556e939c337ecb08ea67f23462a13902c31034a315102a596747a08e48ef8699
7
+ data.tar.gz: d191579322f931bbc1e4848cc7c4252c3a5a617a1e3291f9c96d11ceb2171156b487b9879ff5f6631a3de8c44c10b1388dcf2d8b1ce491588cb4248605dc0b7d
@@ -7,7 +7,7 @@ jobs:
7
7
  strategy:
8
8
  fail-fast: false
9
9
  matrix:
10
- ruby-version: [ '2.7' ]
10
+ ruby-version: [ '2.7', '3.1', '3.3' ]
11
11
  steps:
12
12
  - name: Checkout
13
13
  uses: actions/checkout@v3
data/.rubocop.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ NewCops: enable
2
3
  Exclude:
3
4
  - vendor/**/*
4
5
 
@@ -11,7 +12,7 @@ Style/Documentation:
11
12
  Metrics:
12
13
  Enabled: false
13
14
 
14
- Metrics/LineLength:
15
+ Layout/LineLength:
15
16
  Max: 256
16
17
 
17
18
  Style/FrozenStringLiteralComment:
@@ -19,9 +20,12 @@ Style/FrozenStringLiteralComment:
19
20
 
20
21
  Naming/PredicateName:
21
22
  Enabled: true
22
- NameWhitelist:
23
+ AllowedMethods:
23
24
  - is_a?
24
25
  - have_you_updated_changelog?
25
26
  - is_changelog_format_correct?
26
27
 
27
28
  inherit_from: .rubocop_todo.yml
29
+ require:
30
+ - rubocop-rake
31
+ - rubocop-rspec
data/.rubocop_todo.yml CHANGED
@@ -1,7 +1,133 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-05-08 17:23:39 -0400 using RuboCop version 0.73.0.
3
+ # on 2024-04-12 18:13:29 UTC using RuboCop version 1.63.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ # Configuration parameters: Severity, Include.
11
+ # Include: **/*.gemspec
12
+ Gemspec/RequiredRubyVersion:
13
+ Exclude:
14
+ - 'danger-changelog.gemspec'
15
+
16
+ # Offense count: 3
17
+ # This cop supports safe autocorrection (--autocorrect).
18
+ # Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
19
+ # URISchemes: http, https
20
+ Layout/LineLength:
21
+ Exclude:
22
+ - 'spec/intridea/changelog_spec.rb'
23
+
24
+ # Offense count: 1
25
+ # Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.
26
+ Lint/DuplicateBranch:
27
+ Exclude:
28
+ - 'lib/changelog/plugin.rb'
29
+
30
+ # Offense count: 2
31
+ Lint/MixedRegexpCaptureTypes:
32
+ Exclude:
33
+ - 'lib/changelog/changelog_line/changelog_header_line.rb'
34
+
35
+ # Offense count: 30
36
+ # Configuration parameters: Prefixes, AllowedPatterns.
37
+ # Prefixes: when, with, without
38
+ RSpec/ContextWording:
39
+ Exclude:
40
+ - 'spec/changelog_spec.rb'
41
+ - 'spec/config_spec.rb'
42
+ - 'spec/intridea/changelog_entry_line_spec.rb'
43
+ - 'spec/intridea/changelog_file_spec.rb'
44
+ - 'spec/intridea/changelog_header_line_spec.rb'
45
+ - 'spec/intridea/changelog_line_parser_spec.rb'
46
+ - 'spec/intridea/changelog_spec.rb'
47
+ - 'spec/keep_a_changelog/changelog_spec.rb'
48
+
49
+ # Offense count: 9
50
+ # Configuration parameters: CountAsOne.
51
+ RSpec/ExampleLength:
52
+ Max: 12
53
+
54
+ # Offense count: 10
55
+ # Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
56
+ # Include: **/*_spec*rb*, **/spec/**/*
57
+ RSpec/FilePath:
58
+ Exclude:
59
+ - 'spec/changelog_spec.rb'
60
+ - 'spec/config_spec.rb'
61
+ - 'spec/intridea/changelog_entry_line_spec.rb'
62
+ - 'spec/intridea/changelog_file_spec.rb'
63
+ - 'spec/intridea/changelog_header_line_spec.rb'
64
+ - 'spec/intridea/changelog_line_parser_spec.rb'
65
+ - 'spec/intridea/changelog_placeholder_line_spec.rb'
66
+ - 'spec/intridea/changelog_spec.rb'
67
+ - 'spec/keep_a_changelog/changelog_spec.rb'
68
+ - 'spec/plugin_spec.rb'
69
+
70
+ # Offense count: 25
71
+ RSpec/MultipleExpectations:
72
+ Max: 8
73
+
74
+ # Offense count: 44
75
+ # Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
76
+ # SupportedStyles: always, named_only
77
+ RSpec/NamedSubject:
78
+ Exclude:
79
+ - 'spec/changelog_spec.rb'
80
+ - 'spec/intridea/changelog_file_spec.rb'
81
+ - 'spec/intridea/changelog_spec.rb'
82
+ - 'spec/keep_a_changelog/changelog_spec.rb'
83
+ - 'spec/plugin_spec.rb'
84
+
85
+ # Offense count: 32
86
+ # Configuration parameters: AllowedGroups.
87
+ RSpec/NestedGroups:
88
+ Max: 7
89
+
90
+ # Offense count: 2
91
+ RSpec/RepeatedExampleGroupBody:
92
+ Exclude:
93
+ - 'spec/intridea/changelog_header_line_spec.rb'
94
+
95
+ # Offense count: 2
96
+ RSpec/RepeatedExampleGroupDescription:
97
+ Exclude:
98
+ - 'spec/intridea/changelog_header_line_spec.rb'
99
+
100
+ # Offense count: 4
101
+ RSpec/RepeatedIncludeExample:
102
+ Exclude:
103
+ - 'spec/intridea/changelog_entry_line_spec.rb'
104
+ - 'spec/intridea/changelog_header_line_spec.rb'
105
+
106
+ # Offense count: 10
107
+ # Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata.
108
+ # Include: **/*_spec.rb
109
+ RSpec/SpecFilePathFormat:
110
+ Exclude:
111
+ - '**/spec/routing/**/*'
112
+ - 'spec/changelog_spec.rb'
113
+ - 'spec/config_spec.rb'
114
+ - 'spec/intridea/changelog_entry_line_spec.rb'
115
+ - 'spec/intridea/changelog_file_spec.rb'
116
+ - 'spec/intridea/changelog_header_line_spec.rb'
117
+ - 'spec/intridea/changelog_line_parser_spec.rb'
118
+ - 'spec/intridea/changelog_placeholder_line_spec.rb'
119
+ - 'spec/intridea/changelog_spec.rb'
120
+ - 'spec/keep_a_changelog/changelog_spec.rb'
121
+ - 'spec/plugin_spec.rb'
122
+
123
+ # Offense count: 1
124
+ # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
125
+ RSpec/VerifiedDoubles:
126
+ Exclude:
127
+ - 'spec/intridea/changelog_entry_line_spec.rb'
128
+
129
+ # Offense count: 1
130
+ # This cop supports safe autocorrection (--autocorrect).
131
+ Rake/Desc:
132
+ Exclude:
133
+ - 'Rakefile'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## Changelog
2
2
 
3
+ ### 0.7.1 (2024/04/12)
4
+
5
+ * [#63](https://github.com/dblock/danger-changelog/pull/63): Fix: report on lines that start with a - and cannot be parsed - [@dblock](https://github.com/dblock).
6
+ * [#64](https://github.com/dblock/danger-changelog/pull/64): Upgraded to RuboCop 1.63.1 - [@dblock](https://github.com/dblock).
7
+
3
8
  ### 0.7.0 (2023/11/21)
4
9
 
5
10
  * [#62](https://github.com/dblock/danger-changelog/pull/62): Migrate CI from Travis to GitHub Actions - [@mathroule](https://github.com/mathroule).
data/Gemfile CHANGED
@@ -10,8 +10,10 @@ group :development, :test do
10
10
  gem 'guard-rspec', '~> 4.7'
11
11
  gem 'listen', '3.0.7'
12
12
  gem 'pry'
13
- gem 'rake', '~> 10.0'
13
+ gem 'rake', '~> 13.2.1'
14
14
  gem 'rspec', '~> 3.4'
15
- gem 'rubocop', '~> 0.73.0'
15
+ gem 'rubocop', '~> 1.63.1'
16
+ gem 'rubocop-rake'
17
+ gem 'rubocop-rspec'
16
18
  gem 'yard', '~> 0.9.11'
17
19
  end
@@ -1,6 +1,6 @@
1
1
  lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'changelog/gem_version.rb'
3
+ require 'changelog/gem_version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'danger-changelog'
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
17
  spec.require_paths = ['lib']
19
18
 
20
19
  spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0'
20
+ spec.metadata['rubygems_mfa_required'] = 'true'
21
21
  end
@@ -12,8 +12,8 @@ module Danger
12
12
  validation_result.error! 'too many parenthesis' unless balanced?(line)
13
13
  return false if validation_result.invalid?
14
14
 
15
- return true if line =~ %r{^\*\s[\`[:upper:]].*[^.,] \- \[\@[\w\d\-\_]+\]\(https:\/\/github\.com\/.*[\w\d\-\_]+\).$}
16
- return true if line =~ %r{^\*\s\[\#\d+\]\(https:\/\/github\.com\/.*\d+\)\: [\`[:upper:]].*[^.,] \- \[\@[\w\d\-\_]+\]\(https:\/\/github\.com\/.*[\w\d\-\_]+\).$}
15
+ return true if line =~ %r{^\*\s[`[:upper:]].*[^.,] - \[@[\w\d\-_]+\]\(https://github\.com/.*[\w\d\-_]+\).$}
16
+ return true if line =~ %r{^\*\s\[\#\d+\]\(https://github\.com/.*\d+\): [`[:upper:]].*[^.,] - \[@[\w\d\-_]+\]\(https://github\.com/.*[\w\d\-_]+\).$}
17
17
 
18
18
  validation_result.error! 'does not start with a star' unless ChangelogEntryLine.starts_with_star?(line)
19
19
  validation_result.error! 'does not include a pull request link' unless ChangelogEntryLine.with_pr_link?(line)
@@ -22,8 +22,8 @@ module Danger
22
22
  validation_result.error! 'has an extra trailing space' if ChangelogEntryLine.ends_with_space?(line)
23
23
  validation_result.error! 'is missing a period at the end of the line' unless ChangelogEntryLine.ends_with_period?(line)
24
24
  validation_result.error! 'has an extra period or comma at the end of the description' if
25
- line =~ %r{^\*\s[\`[:upper:]].*[.,] \- \[\@[\w\d\-\_]+\]\(https:\/\/github\.com\/.*[\w\d\-\_]+\).$} ||
26
- line =~ %r{^\*\s\[\#\d+\]\(https:\/\/github\.com\/.*\d+\)\: [\`[:upper:]].*[.,] \- \[\@[\w\d\-\_]+\]\(https:\/\/github\.com\/.*[\w\d\-\_]+\).$}
25
+ line =~ %r{^\*\s[`[:upper:]].*[.,] - \[@[\w\d\-_]+\]\(https://github\.com/.*[\w\d\-_]+\).$} ||
26
+ line =~ %r{^\*\s\[\#\d+\]\(https://github\.com/.*\d+\): [`[:upper:]].*[.,] - \[@[\w\d\-_]+\]\(https://github\.com/.*[\w\d\-_]+\).$}
27
27
 
28
28
  false
29
29
  end
@@ -72,21 +72,21 @@ module Danger
72
72
 
73
73
  # checks whether line contains a MARKDOWN link to a PR
74
74
  def self.with_pr_link?(line)
75
- return true if line =~ %r{\[\#\d+\]\(http[s]?:\/\/github\.com\/.*\d+[\/]?\)}
75
+ return true if line =~ %r{\[\#\d+\]\(https?://github\.com/.*\d+/?\)}
76
76
 
77
77
  false
78
78
  end
79
79
 
80
80
  # checks whether line contains a capitalized Text, treated as a description
81
81
  def self.with_changelog_description?(line)
82
- return true if line =~ /[\`[:upper:]].*/
82
+ return true if line =~ /[`[:upper:]].*/
83
83
 
84
84
  false
85
85
  end
86
86
 
87
87
  # checks whether line contains a MARKDOWN link to an author
88
88
  def self.with_author_link?(line)
89
- return true if line =~ %r{\[\@[\w\d\-\_]+\]\(http[s]?:\/\/github\.com\/.*[\w\d\-\_]+[\/]?\)}
89
+ return true if line =~ %r{\[@[\w\d\-_]+\]\(https?://github\.com/.*[\w\d\-_]+/?\)}
90
90
 
91
91
  false
92
92
  end
@@ -2,8 +2,8 @@ module Danger
2
2
  module Changelog
3
3
  # A CHANGELOG.md line represents the version header.
4
4
  class ChangelogHeaderLine < ChangelogLine
5
- OPEN_PARENS = /[\(\[\{]?/.freeze
6
- CLOSE_PARENS = /[\)\]\}]?/.freeze
5
+ OPEN_PARENS = /[(\[{]?/.freeze
6
+ CLOSE_PARENS = /[)\]}]?/.freeze
7
7
 
8
8
  HASHES = /\#{1,4}/.freeze
9
9
  SEMVER = /(?<semver>(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)/.freeze
@@ -12,9 +12,9 @@ module Danger
12
12
  def valid?
13
13
  stripped_line = line.strip
14
14
 
15
- m = stripped_line.match(/^#{HASHES}\s#{OPEN_PARENS}[\w\s\:]*#{CLOSE_PARENS}$/) # title
15
+ m = stripped_line.match(/^#{HASHES}\s#{OPEN_PARENS}[\w\s:]*#{CLOSE_PARENS}$/) # title
16
16
  m ||= stripped_line.match(/^#{HASHES}\s#{OPEN_PARENS}#{SEMVER}#{CLOSE_PARENS}$/) # semver only
17
- m ||= stripped_line.match(/^#{HASHES}\s#{OPEN_PARENS}#{SEMVER}#{CLOSE_PARENS}[\s\-]+#{OPEN_PARENS}(#{ISO8601_DATETIME}|\w*)#{CLOSE_PARENS}$/) # semver and ISO 8601 date & time or next version description
17
+ m ||= stripped_line.match(/^#{HASHES}\s#{OPEN_PARENS}#{SEMVER}#{CLOSE_PARENS}[\s-]+#{OPEN_PARENS}(#{ISO8601_DATETIME}|\w*)#{CLOSE_PARENS}$/) # semver and ISO 8601 date & time or next version description
18
18
 
19
19
  !m.nil? && balanced?(stripped_line)
20
20
  end
@@ -6,8 +6,7 @@ module Danger
6
6
  PAIRED = /\(#{NON_DELIMITERS}\)|\{#{NON_DELIMITERS}\}|\[#{NON_DELIMITERS}\]/.freeze
7
7
  DELIMITER = /[(){}\[\]]/.freeze
8
8
 
9
- attr_accessor :line
10
- attr_accessor :validation_result
9
+ attr_accessor :line, :validation_result
11
10
 
12
11
  def initialize(line)
13
12
  self.line = line
@@ -10,7 +10,7 @@ module Danger
10
10
  ignore_files
11
11
  ].freeze
12
12
 
13
- ACCESSORS = ATTRIBUTES.map { |name| "#{name}=".to_sym }
13
+ ACCESSORS = ATTRIBUTES.map { |name| :"#{name}=" }
14
14
 
15
15
  DELEGATORS = ATTRIBUTES + ACCESSORS
16
16
 
@@ -1,3 +1,3 @@
1
1
  module Changelog
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = '0.7.1'.freeze
3
3
  end
@@ -4,9 +4,9 @@ module Danger
4
4
  class IntrideaFormat < Base
5
5
  def bad_line_message(filename)
6
6
  "One of the lines below found in #{filename} doesn't match the " \
7
- '[expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). ' \
8
- 'Please make it look like the other lines, pay attention to version ' \
9
- 'numbers, periods, spaces and date formats.'
7
+ '[expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). ' \
8
+ 'Please make it look like the other lines, pay attention to version ' \
9
+ 'numbers, periods, spaces and date formats.'
10
10
  end
11
11
 
12
12
  def parse(filename)
@@ -17,7 +17,10 @@ module Danger
17
17
 
18
18
  changelog_line = ChangelogLineParser.parse(line)
19
19
 
20
- if changelog_line.nil? || changelog_line.invalid?
20
+ if changelog_line.nil?
21
+ notify_of_bad_line line, 'cannot be parsed'
22
+ next
23
+ elsif changelog_line.invalid?
21
24
  detail = changelog_line.validation_result.to_s if changelog_line.validation_result&.invalid?
22
25
  notify_of_bad_line line, detail
23
26
  next
@@ -4,14 +4,14 @@ module Danger
4
4
  class KeepAChangelog < Base
5
5
  def bad_line_message(filename)
6
6
  "One of the lines below found in #{filename} doesn't match the " \
7
- '[expected format](https://keepachangelog.com).'
7
+ '[expected format](https://keepachangelog.com).'
8
8
  end
9
9
 
10
10
  def parse(filename)
11
11
  blocks = parse_into_blocks(File.open(filename).each_line)
12
12
 
13
13
  if contains_header_block?(blocks.first)
14
- blocks = blocks[1..-1]
14
+ blocks = blocks[1..]
15
15
  else
16
16
  notify_of_global_failure(
17
17
  'The changelog is missing the version header for the Keep A ' \
@@ -61,9 +61,9 @@ module Danger
61
61
  return false unless block
62
62
  return false unless block.first == '# Changelog'
63
63
 
64
- regex = %r{All notable changes to this project will be documented in this file. The format is based on \[Keep a Changelog\]\(https://keepachangelog.com/en/\d\.\d\.\d/\), and this project adheres to \[Semantic Versioning\]\(https:\/\/semver.org\/spec\/v2.0.0.html\).}
64
+ regex = %r{All notable changes to this project will be documented in this file. The format is based on \[Keep a Changelog\]\(https://keepachangelog.com/en/\d\.\d\.\d/\), and this project adheres to \[Semantic Versioning\]\(https://semver.org/spec/v2.0.0.html\).}
65
65
 
66
- block_content = block[1..-1].join(' ')
66
+ block_content = block[1..].join(' ')
67
67
 
68
68
  regex.match?(block_content)
69
69
  end
@@ -73,7 +73,7 @@ module Danger
73
73
  end
74
74
 
75
75
  def markdown_list_item_or_continuation?(line)
76
- /^(?:[\*-]\s| )/.match?(line)
76
+ /^(?:[*-]\s| )/.match?(line)
77
77
  end
78
78
  end
79
79
  end
@@ -28,7 +28,7 @@ module Danger
28
28
  end
29
29
 
30
30
  # Run all checks.
31
- # @param format [Symbol] the format to check against
31
+ # @param parser [Symbol] the parser to check with
32
32
  # @return [Boolean] true when the check passes
33
33
  def check(parser = Danger::Changelog::Config.format)
34
34
  warn '[DEPRECATION] `check` is deprecated. Set format with `.format` and use `check!` instead.'
@@ -24,8 +24,7 @@ describe Danger::Changelog do
24
24
 
25
25
  context 'without CHANGELOG changes' do
26
26
  before do
27
- allow(changelog.git).to receive(:modified_files).and_return(['some-file.txt'])
28
- allow(changelog.git).to receive(:added_files).and_return(['some-file.txt'])
27
+ allow(changelog.git).to receive_messages(modified_files: ['some-file.txt'], added_files: ['some-file.txt'])
29
28
  end
30
29
 
31
30
  it 'complains when no CHANGELOG can be found' do
@@ -38,8 +37,7 @@ describe Danger::Changelog do
38
37
 
39
38
  context 'with CHANGELOG changes' do
40
39
  before do
41
- allow(changelog.git).to receive(:modified_files).and_return([changelog.filename])
42
- allow(changelog.git).to receive(:added_files).and_return([])
40
+ allow(changelog.git).to receive_messages(modified_files: [changelog.filename], added_files: [])
43
41
  end
44
42
 
45
43
  it 'has no complaints' do
@@ -59,8 +57,7 @@ describe Danger::Changelog do
59
57
  context 'without CHANGELOG changes' do
60
58
  context 'when something was modified' do
61
59
  before do
62
- allow(changelog.git).to receive(:modified_files).and_return(['some-file.txt'])
63
- allow(changelog.git).to receive(:added_files).and_return(['another-file.txt'])
60
+ allow(changelog.git).to receive_messages(modified_files: ['some-file.txt'], added_files: ['another-file.txt'])
64
61
  end
65
62
 
66
63
  it 'complains when no CHANGELOG can be found' do
@@ -73,9 +70,9 @@ describe Danger::Changelog do
73
70
 
74
71
  context 'with a README.md' do
75
72
  before do
76
- allow(changelog.git).to receive(:modified_files).and_return(['README.md'])
77
- allow(changelog.git).to receive(:added_files).and_return([])
73
+ allow(changelog.git).to receive_messages(modified_files: ['README.md'], added_files: [])
78
74
  end
75
+
79
76
  it 'has no complaints' do
80
77
  expect(subject).to be true
81
78
  expect(status_report[:errors]).to eq []
@@ -88,8 +85,7 @@ describe Danger::Changelog do
88
85
  context 'name' do
89
86
  before do
90
87
  changelog.ignore_files = ['WHATEVER.md']
91
- allow(changelog.git).to receive(:modified_files).and_return(['WHATEVER.md'])
92
- allow(changelog.git).to receive(:added_files).and_return([])
88
+ allow(changelog.git).to receive_messages(modified_files: ['WHATEVER.md'], added_files: [])
93
89
  end
94
90
 
95
91
  it 'has no complaints' do
@@ -99,11 +95,11 @@ describe Danger::Changelog do
99
95
  expect(status_report[:markdowns]).to eq []
100
96
  end
101
97
  end
98
+
102
99
  context 'mixed' do
103
100
  before do
104
101
  changelog.ignore_files = ['WHATEVER.md', /\.txt$/]
105
- allow(changelog.git).to receive(:modified_files).and_return(['WHATEVER.md'])
106
- allow(changelog.git).to receive(:added_files).and_return(['one.txt', 'two.txt'])
102
+ allow(changelog.git).to receive_messages(modified_files: ['WHATEVER.md'], added_files: ['one.txt', 'two.txt'])
107
103
  end
108
104
 
109
105
  it 'has no complaints' do
@@ -118,8 +114,7 @@ describe Danger::Changelog do
118
114
 
119
115
  context 'with a new CHANGELOG' do
120
116
  before do
121
- allow(changelog.git).to receive(:modified_files).and_return([])
122
- allow(changelog.git).to receive(:added_files).and_return([changelog.filename])
117
+ allow(changelog.git).to receive_messages(modified_files: [], added_files: [changelog.filename])
123
118
  end
124
119
 
125
120
  it 'has no complaints' do
@@ -132,8 +127,7 @@ describe Danger::Changelog do
132
127
 
133
128
  context 'with CHANGELOG changes' do
134
129
  before do
135
- allow(changelog.git).to receive(:modified_files).and_return([changelog.filename])
136
- allow(changelog.git).to receive(:added_files).and_return([])
130
+ allow(changelog.git).to receive_messages(modified_files: [changelog.filename], added_files: [])
137
131
  end
138
132
 
139
133
  it 'has no complaints' do
data/spec/config_spec.rb CHANGED
@@ -10,6 +10,7 @@ describe Danger::Changelog::Config do
10
10
  expect(changelog.placeholder_line).to eq "* Your contribution here.\n"
11
11
  end
12
12
  end
13
+
13
14
  context 'when without markdown star' do
14
15
  before do
15
16
  Danger::Changelog.config.placeholder_line = "Nothing yet.\n"
@@ -40,49 +41,61 @@ describe Danger::Changelog::Config do
40
41
  end
41
42
  end
42
43
  end
44
+
43
45
  describe 'format' do
44
46
  it 'default' do
45
47
  expect(Danger::Changelog.config.format).to eq :intridea
46
48
  end
49
+
47
50
  it 'with an invalid format' do
48
51
  expect { Danger::Changelog.config.format = :foobar }.to raise_error ArgumentError, 'Invalid format: foobar'
49
52
  end
53
+
50
54
  it 'with a string' do
51
- expect { Danger::Changelog.config.format = 'intridea' }.to_not raise_error
55
+ expect { Danger::Changelog.config.format = 'intridea' }.not_to raise_error
52
56
  end
57
+
53
58
  it 'with a symbol' do
54
- expect { Danger::Changelog.config.format = :intridea }.to_not raise_error
59
+ expect { Danger::Changelog.config.format = :intridea }.not_to raise_error
55
60
  end
61
+
56
62
  Danger::Changelog::Parsers::FORMATS.each_pair do |format, parser|
57
63
  context format do
58
64
  before do
59
65
  Danger::Changelog.config.format = format
60
66
  end
67
+
61
68
  it 'sets format' do
62
69
  expect(Danger::Changelog.config.format).to eq format
63
70
  end
71
+
64
72
  it 'creates parser' do
65
73
  expect(Danger::Changelog.config.parser).to be_a parser
66
74
  end
67
75
  end
68
76
  end
69
77
  end
78
+
70
79
  describe 'ignore_files' do
71
80
  it 'default' do
72
81
  expect(Danger::Changelog.config.ignore_files).to eq(['README.md'])
73
82
  end
83
+
74
84
  context 'with a file name' do
75
85
  before do
76
86
  Danger::Changelog.config.ignore_files = 'WHATEVER.md'
77
87
  end
88
+
78
89
  it 'transforms it into an array' do
79
90
  expect(Danger::Changelog.config.ignore_files).to eq(['WHATEVER.md'])
80
91
  end
81
92
  end
93
+
82
94
  context 'with multiple names' do
83
95
  before do
84
96
  Danger::Changelog.config.ignore_files = ['WHATEVER.md', /\*.md$/]
85
97
  end
98
+
86
99
  it 'transforms it into an array' do
87
100
  expect(Danger::Changelog.config.ignore_files).to eq(['WHATEVER.md', /\*.md$/])
88
101
  end
@@ -92,6 +92,7 @@ describe Danger::Changelog::ChangelogEntryLine do
92
92
 
93
93
  context 'no transformation required' do
94
94
  let(:pr_title) { 'Test' }
95
+
95
96
  it 'uses title as is' do
96
97
  expect(described_class.example(github)).to eq '* [#123](https://github.com/dblock/danger-changelog/pull/123): Test - [@dblock](https://github.com/dblock).'
97
98
  end
@@ -99,6 +100,7 @@ describe Danger::Changelog::ChangelogEntryLine do
99
100
 
100
101
  context 'with lowercase title' do
101
102
  let(:pr_title) { 'test' }
103
+
102
104
  it 'capitalizes it' do
103
105
  expect(described_class.example(github)).to eq '* [#123](https://github.com/dblock/danger-changelog/pull/123): Test - [@dblock](https://github.com/dblock).'
104
106
  end
@@ -106,6 +108,7 @@ describe Danger::Changelog::ChangelogEntryLine do
106
108
 
107
109
  context 'with a trailing period' do
108
110
  let(:pr_title) { 'Test.' }
111
+
109
112
  it 'removes it' do
110
113
  expect(described_class.example(github)).to eq '* [#123](https://github.com/dblock/danger-changelog/pull/123): Test - [@dblock](https://github.com/dblock).'
111
114
  end
@@ -2,50 +2,63 @@ require 'spec_helper'
2
2
 
3
3
  describe Danger::Changelog::ChangelogFile do
4
4
  subject do
5
- Danger::Changelog::ChangelogFile.new(filename).tap(&:parse)
5
+ described_class.new(filename).tap(&:parse)
6
6
  end
7
7
 
8
8
  describe 'with the default format checker' do
9
9
  context 'minimal example' do
10
10
  let(:filename) { File.expand_path('fixtures/minimal.md', __dir__) }
11
+
11
12
  it 'exists?' do
12
13
  expect(subject.exists?).to be true
13
14
  end
15
+
14
16
  it 'bad_lines?' do
15
17
  expect(subject.bad_lines).to eq []
16
18
  expect(subject.bad_lines?).to be false
17
19
  end
20
+
18
21
  it 'is valid' do
19
22
  expect(subject.bad_lines?).to be false
20
23
  end
24
+
21
25
  it 'has your contribution here' do
22
26
  expect(subject.global_failures?).to be false
23
27
  end
24
28
  end
29
+
25
30
  context 'missing your contribution here' do
26
31
  let(:filename) { File.expand_path('fixtures/missing_your_contribution_here.md', __dir__) }
32
+
27
33
  it 'is valid' do
28
34
  expect(subject.bad_lines?).to be false
29
35
  end
36
+
30
37
  it 'is missing your contribution here' do
31
38
  expect(subject.global_failures?).to be true
32
39
  end
33
40
  end
41
+
34
42
  context 'does not exist' do
35
43
  let(:filename) { 'whatever.md' }
44
+
36
45
  it 'exists?' do
37
46
  expect(subject.exists?).to be false
38
47
  end
48
+
39
49
  it 'bad_lines?' do
40
50
  expect(subject.bad_lines).to be_empty
41
51
  expect(subject.bad_lines?).to be false
42
52
  end
43
53
  end
54
+
44
55
  context 'with bad lines' do
45
56
  let(:filename) { File.expand_path('fixtures/lines.md', __dir__) }
57
+
46
58
  it 'is invalid' do
47
59
  expect(subject.bad_lines?).to be true
48
60
  end
61
+
49
62
  it 'reports all bad lines' do
50
63
  expect(subject.bad_lines).to eq [
51
64
  ["Missing star - [@dblock](https://github.com/dblock).\n", 'does not start with a star, does not include a pull request link'],
@@ -57,26 +70,33 @@ describe Danger::Changelog::ChangelogFile do
57
70
  ["* [#1](https://github.com/dblock/danger-changelog/pull/1): Unbalanced ] - [@dblock](https://github.com/dblock).\n", 'too many parenthesis']
58
71
  ]
59
72
  end
73
+
60
74
  it 'has your contribution here' do
61
75
  expect(subject.global_failures?).to be false
62
76
  end
63
77
  end
78
+
64
79
  context 'with a line that has an extra trailing space' do
65
80
  let(:filename) { File.expand_path('fixtures/extra_trailing_space.md', __dir__) }
81
+
66
82
  it 'is invalid' do
67
83
  expect(subject.bad_lines?).to be true
68
84
  end
85
+
69
86
  it 'reports all bad lines' do
70
87
  expect(subject.bad_lines).to eq [
71
88
  ["* [#1](https://github.com/dblock/danger-changelog/pull/1): Extra trailing space - [@dblock](https://github.com/dblock). \n", 'has an extra trailing space, is missing a period at the end of the line']
72
89
  ]
73
90
  end
74
91
  end
92
+
75
93
  context 'with bad dates' do
76
94
  let(:filename) { File.expand_path('fixtures/dates.md', __dir__) }
95
+
77
96
  it 'is invalid' do
78
97
  expect(subject.bad_lines?).to be true
79
98
  end
99
+
80
100
  it 'reports all bad dates' do
81
101
  expect(subject.bad_lines).to eq [
82
102
  ["### 1.2.3 (1/2/2018)\n"],
@@ -86,11 +106,14 @@ describe Danger::Changelog::ChangelogFile do
86
106
  ]
87
107
  end
88
108
  end
109
+
89
110
  context 'with bad semver' do
90
111
  let(:filename) { File.expand_path('fixtures/semver.md', __dir__) }
112
+
91
113
  it 'is invalid' do
92
114
  expect(subject.bad_lines?).to be true
93
115
  end
116
+
94
117
  it 'reports all bad dates' do
95
118
  expect(subject.bad_lines).to eq [
96
119
  ["### 0 (2018/1/1)\n"],
@@ -99,11 +122,14 @@ describe Danger::Changelog::ChangelogFile do
99
122
  ]
100
123
  end
101
124
  end
125
+
102
126
  context 'with imbalanced parenthesis' do
103
127
  let(:filename) { File.expand_path('fixtures/imbalanced.md', __dir__) }
128
+
104
129
  it 'is invalid' do
105
130
  expect(subject.bad_lines?).to be true
106
131
  end
132
+
107
133
  it 'reports all bad lines' do
108
134
  expect(subject.bad_lines).to eq [
109
135
  ["### 0.0.0)\n"],
@@ -5,6 +5,7 @@ describe Danger::Changelog::ChangelogLineParser do
5
5
  context 'changelog entry line' do
6
6
  context 'when valid' do
7
7
  let(:line) { '* [#123](https://github.com/dblock/danger-changelog/pull/123): Test - [@dblock](https://github.com/dblock).' }
8
+
8
9
  it 'returns ChangelogEntryLine' do
9
10
  expect(described_class.parse(line)).to be_a(Danger::Changelog::ChangelogEntryLine)
10
11
  end
@@ -26,6 +27,7 @@ describe Danger::Changelog::ChangelogLineParser do
26
27
 
27
28
  context 'changelog your contribution here line' do
28
29
  let(:line) { "* Your contribution here.\n" }
30
+
29
31
  it 'returns ChangelogPlaceholderLine' do
30
32
  expect(described_class.parse(line)).to be_a(Danger::Changelog::ChangelogPlaceholderLine)
31
33
  end
@@ -34,6 +36,7 @@ describe Danger::Changelog::ChangelogLineParser do
34
36
  context 'changelog header line' do
35
37
  context 'when one hash' do
36
38
  let(:line) { '# Version 1.1.1' }
39
+
37
40
  it 'returns ChangelogHeaderLine' do
38
41
  expect(described_class.parse(line)).to be_a(Danger::Changelog::ChangelogHeaderLine)
39
42
  end
@@ -41,6 +44,7 @@ describe Danger::Changelog::ChangelogLineParser do
41
44
 
42
45
  context 'when two hashes' do
43
46
  let(:line) { '## Version 1.1.1' }
47
+
44
48
  it 'returns ChangelogHeaderLine' do
45
49
  expect(described_class.parse(line)).to be_a(Danger::Changelog::ChangelogHeaderLine)
46
50
  end
@@ -48,6 +52,7 @@ describe Danger::Changelog::ChangelogLineParser do
48
52
 
49
53
  context 'when three hashes' do
50
54
  let(:line) { '### Version 1.1.1' }
55
+
51
56
  it 'returns ChangelogHeaderLine' do
52
57
  expect(described_class.parse(line)).to be_a(Danger::Changelog::ChangelogHeaderLine)
53
58
  end
@@ -27,6 +27,7 @@ describe Danger::Changelog do
27
27
 
28
28
  context 'without a CHANGELOG file' do
29
29
  let(:filename) { 'does-not-exist' }
30
+
30
31
  it 'complains' do
31
32
  expect(subject).to be false
32
33
  expect(status_report[:errors]).to eq ['The does-not-exist file does not exist.']
@@ -37,8 +38,7 @@ describe Danger::Changelog do
37
38
  let(:filename) { File.expand_path('fixtures/minimal.md', __dir__) }
38
39
 
39
40
  before do
40
- allow(changelog.git).to receive(:modified_files).and_return([filename])
41
- allow(changelog.git).to receive(:added_files).and_return([])
41
+ allow(changelog.git).to receive_messages(modified_files: [filename], added_files: [])
42
42
  end
43
43
 
44
44
  it 'has no complaints' do
@@ -54,6 +54,7 @@ describe Danger::Changelog do
54
54
  end
55
55
 
56
56
  let(:filename) { File.expand_path('fixtures/customized.md', __dir__) }
57
+
57
58
  it 'is ok' do
58
59
  expect(subject).to be true
59
60
  expect(status_report[:errors]).to eq []
@@ -103,6 +104,7 @@ describe Danger::Changelog do
103
104
 
104
105
  context 'minimal example' do
105
106
  let(:filename) { File.expand_path('fixtures/minimal.md', __dir__) }
107
+
106
108
  it 'is ok' do
107
109
  expect(subject).to be true
108
110
  expect(status_report[:errors]).to eq []
@@ -128,6 +130,7 @@ describe Danger::Changelog do
128
130
 
129
131
  context 'with bad lines' do
130
132
  let(:filename) { File.expand_path('fixtures/lines.md', __dir__) }
133
+
131
134
  it 'complains' do
132
135
  expect(subject).to be false
133
136
  expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the [expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
@@ -143,6 +146,21 @@ describe Danger::Changelog do
143
146
  ]
144
147
  end
145
148
  end
149
+
150
+ context 'with a contribution line starting with a -' do
151
+ let(:filename) { File.expand_path('fixtures/validation_result.md', __dir__) }
152
+
153
+ it 'cannot be parsed' do
154
+ expect(subject).to be false
155
+ expect(status_report[:errors]).to eq ["One of the lines below found in #{filename} doesn't match the [expected format](https://github.com/dblock/danger-changelog/blob/master/README.md#whats-a-correctly-formatted-changelog-file). Please make it look like the other lines, pay attention to version numbers, periods, spaces and date formats."]
156
+ expect(status_report[:warnings]).to eq []
157
+ expect(status_report[:markdowns].map(&:message)).to eq [
158
+ "```markdown\n- [#67](https://github.com/dblock/danger-changelog/pull/67): Various build updates - [@bob](https://github.com/bob).\ndoes not start with a star\n```\n",
159
+ "```markdown\n- [#68](https://github.com/dblock/danger-changelog/pull/68): Properly render `example` - [@janet](https://github.com/janet).\ndoes not start with a star\n```\n",
160
+ "```markdown\n- Your contribution here.\ncannot be parsed\n```\n"
161
+ ]
162
+ end
163
+ end
146
164
  end
147
165
  end
148
166
  end
@@ -0,0 +1,6 @@
1
+ ### Next
2
+ #### Fixes
3
+ - [#67](https://github.com/dblock/danger-changelog/pull/67): Various build updates - [@bob](https://github.com/bob).
4
+ - [#68](https://github.com/dblock/danger-changelog/pull/68): Properly render `example` - [@janet](https://github.com/janet).
5
+ - Your contribution here.
6
+ * Your contribution here.
@@ -26,12 +26,12 @@ describe Danger::Changelog do
26
26
 
27
27
  context 'with CHANGELOG changes' do
28
28
  before do
29
- allow(changelog.git).to receive(:modified_files).and_return([filename])
30
- allow(changelog.git).to receive(:added_files).and_return([])
29
+ allow(changelog.git).to receive_messages(modified_files: [filename], added_files: [])
31
30
  end
32
31
 
33
32
  context 'valid file' do
34
33
  let(:filename) { File.expand_path('fixtures/complete.md', __dir__) }
34
+
35
35
  it 'has no complaints' do
36
36
  expect(subject).to be true
37
37
  expect(status_report[:errors]).to eq []
@@ -42,6 +42,7 @@ describe Danger::Changelog do
42
42
 
43
43
  context 'with lines containing links' do
44
44
  let(:filename) { File.expand_path('fixtures/lines_with_links.md', __dir__) }
45
+
45
46
  it 'is valid' do
46
47
  expect(subject).to be true
47
48
  expect(status_report[:errors]).to eq []
@@ -52,6 +53,7 @@ describe Danger::Changelog do
52
53
 
53
54
  context 'missing a version header' do
54
55
  let(:filename) { File.expand_path('fixtures/missing_a_version_header.md', __dir__) }
56
+
55
57
  it 'complains' do
56
58
  expect(subject).to be false
57
59
  expect(status_report[:errors]).to eq [
@@ -67,6 +69,7 @@ describe Danger::Changelog do
67
69
 
68
70
  context 'invalid line' do
69
71
  let(:filename) { File.expand_path('fixtures/invalid_line.md', __dir__) }
72
+
70
73
  it 'complains' do
71
74
  expect(subject).to be false
72
75
  expect(status_report[:errors]).to eq [
data/spec/plugin_spec.rb CHANGED
@@ -2,8 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  describe Danger::DangerChangelog do
4
4
  subject do
5
- Danger::DangerChangelog.new(nil)
5
+ described_class.new(nil)
6
6
  end
7
+
7
8
  it 'is a Danger plugin' do
8
9
  expect(subject).to be_a Danger::Plugin
9
10
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'pathname'
2
2
  ROOT = Pathname.new(File.expand_path('..', __dir__))
3
- $LOAD_PATH.unshift((ROOT + 'lib').to_s)
4
- $LOAD_PATH.unshift((ROOT + 'spec').to_s)
3
+ $LOAD_PATH.unshift("#{ROOT}lib".to_s)
4
+ $LOAD_PATH.unshift("#{ROOT}spec".to_s)
5
5
 
6
6
  require 'bundler/setup'
7
7
  require 'pry'
@@ -42,6 +42,6 @@ end
42
42
 
43
43
  require 'active_support'
44
44
 
45
- Dir[File.join(File.dirname(__FILE__), 'support', '**/*.rb')].each do |file|
45
+ Dir[File.join(File.dirname(__FILE__), 'support', '**/*.rb')].sort.each do |file|
46
46
  require file
47
47
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-changelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - dblock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-21 00:00:00.000000000 Z
11
+ date: 2024-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-plugin-api
@@ -84,6 +84,7 @@ files:
84
84
  - spec/intridea/fixtures/minimal.md
85
85
  - spec/intridea/fixtures/missing_your_contribution_here.md
86
86
  - spec/intridea/fixtures/semver.md
87
+ - spec/intridea/fixtures/validation_result.md
87
88
  - spec/keep_a_changelog/changelog_spec.rb
88
89
  - spec/keep_a_changelog/fixtures/complete.md
89
90
  - spec/keep_a_changelog/fixtures/invalid_line.md
@@ -95,7 +96,8 @@ files:
95
96
  homepage: https://github.com/dblock/danger-changelog
96
97
  licenses:
97
98
  - MIT
98
- metadata: {}
99
+ metadata:
100
+ rubygems_mfa_required: 'true'
99
101
  post_install_message:
100
102
  rdoc_options: []
101
103
  require_paths:
@@ -111,32 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
113
  - !ruby/object:Gem::Version
112
114
  version: '0'
113
115
  requirements: []
114
- rubygems_version: 3.1.6
116
+ rubygems_version: 3.3.7
115
117
  signing_key:
116
118
  specification_version: 4
117
119
  summary: A danger.systems plugin that is OCD about your CHANGELOG.
118
- test_files:
119
- - spec/changelog_spec.rb
120
- - spec/config_spec.rb
121
- - spec/intridea/changelog_entry_line_spec.rb
122
- - spec/intridea/changelog_file_spec.rb
123
- - spec/intridea/changelog_header_line_spec.rb
124
- - spec/intridea/changelog_line_parser_spec.rb
125
- - spec/intridea/changelog_placeholder_line_spec.rb
126
- - spec/intridea/changelog_spec.rb
127
- - spec/intridea/fixtures/customized.md
128
- - spec/intridea/fixtures/dates.md
129
- - spec/intridea/fixtures/extra_trailing_space.md
130
- - spec/intridea/fixtures/imbalanced.md
131
- - spec/intridea/fixtures/lines.md
132
- - spec/intridea/fixtures/minimal.md
133
- - spec/intridea/fixtures/missing_your_contribution_here.md
134
- - spec/intridea/fixtures/semver.md
135
- - spec/keep_a_changelog/changelog_spec.rb
136
- - spec/keep_a_changelog/fixtures/complete.md
137
- - spec/keep_a_changelog/fixtures/invalid_line.md
138
- - spec/keep_a_changelog/fixtures/lines_with_links.md
139
- - spec/keep_a_changelog/fixtures/missing_a_version_header.md
140
- - spec/plugin_spec.rb
141
- - spec/spec_helper.rb
142
- - spec/support/shared/changelog.rb
120
+ test_files: []