structured_changelog 0.4.0 → 0.5.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 +4 -4
- data/CHANGELOG.md +8 -1
- data/README.md +26 -6
- data/lib/structured_changelog.rb +4 -4
- data/lib/structured_changelog/release.rb +1 -1
- data/lib/structured_changelog/release_filters.rb +32 -0
- data/lib/structured_changelog/{release_comparators → release_filters}/base.rb +1 -5
- data/lib/structured_changelog/release_filters/matches_all_versions.rb +15 -0
- data/lib/structured_changelog/release_filters/matches_current_version.rb +15 -0
- data/lib/structured_changelog/release_filters/matches_single_version.rb +17 -0
- data/lib/structured_changelog/{release_comparators → release_filters}/matches_versions_between.rb +6 -4
- data/lib/structured_changelog/{release_comparators → release_filters}/matches_versions_greater_than_or_equal_to.rb +6 -4
- data/lib/structured_changelog/{release_comparators → release_filters}/matches_versions_less_than_or_equal_to.rb +6 -4
- data/lib/structured_changelog/roadmap.rb +1 -1
- data/lib/structured_changelog/tasks/notes.rb +2 -4
- data/lib/structured_changelog/tasks/version.rb +10 -0
- data/lib/structured_changelog/version.rb +1 -3
- metadata +11 -9
- data/lib/structured_changelog/release_comparators.rb +0 -31
- data/lib/structured_changelog/release_comparators/matches_all_versions.rb +0 -15
- data/lib/structured_changelog/release_comparators/matches_single_version.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0278b9063784473fbb20ccbf450c0b88df4c5295
|
4
|
+
data.tar.gz: 048479b8e751253f690a60d325ec50c15aba2062
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc9651df70ac1ead474b14ece1ebac6f8a612da52dc6c72a68e0844915a27f0799a042473c975b33a9e98dba9af34e5c2235968901215c8e8c36501b73ced105
|
7
|
+
data.tar.gz: baf20d1048c3742f2330ce418e1dc73c07606999ea5f148e6289fb4a64d475d849ccd3351ae14bc3061d094ab1783cc711cba63d6d3bf1f29481e818bc1293ea
|
data/CHANGELOG.md
CHANGED
@@ -3,10 +3,17 @@
|
|
3
3
|
* validate that each line starts with BREAKING:/FEATURE:/FIX:
|
4
4
|
* validate that each release has the appropriate version
|
5
5
|
* validate that release numbers increase monotonically
|
6
|
-
* have a README
|
7
6
|
* support variant versions (rc1, pre, alpha, etc..)
|
8
7
|
* centralize the version regex (if possible)
|
9
8
|
|
9
|
+
## RELEASE 0.5.0
|
10
|
+
|
11
|
+
* FEATURE: a `rake changelog:version` to display the current version
|
12
|
+
|
13
|
+
## RELEASE 0.4.1
|
14
|
+
|
15
|
+
* FIX: with no query, `rake changelog:notes` outputs the notes of the current version (instead of all versions)
|
16
|
+
|
10
17
|
## RELEASE 0.4.0
|
11
18
|
|
12
19
|
* FEATURE: view the release notes for a version (or range of versions) with "rake changelog:notes"
|
data/README.md
CHANGED
@@ -2,16 +2,12 @@
|
|
2
2
|
|
3
3
|
You have a changelog in your repo, right? Great! Then what do you need with a `VERSION` constant?
|
4
4
|
|
5
|
-
To parse your gem's current version
|
5
|
+
To parse your gem's current version from your changelog, put this in `lib/myproject/version.rb`:
|
6
6
|
|
7
7
|
```ruby
|
8
8
|
require 'structured_changelog'
|
9
9
|
|
10
|
-
|
11
|
-
...
|
12
|
-
spec.version = StructuredChangeog.new("path/to/CHANGELOG.md").version
|
13
|
-
...
|
14
|
-
end
|
10
|
+
MyProject::VERSION = StructuredChangeog.new("path/to/CHANGELOG.md").version
|
15
11
|
```
|
16
12
|
|
17
13
|
To add `rake structured_changelog:validate` and make it part of `rake release`, add this to your `Rakefile`:
|
@@ -20,8 +16,32 @@ To add `rake structured_changelog:validate` and make it part of `rake release`,
|
|
20
16
|
require 'structured_changelog/tasks'
|
21
17
|
```
|
22
18
|
|
19
|
+
## Shiny Rake Tasks
|
23
20
|
|
21
|
+
To validate your changelog:
|
24
22
|
|
23
|
+
$ bundle exec rake changelog:validate
|
24
|
+
|
25
|
+
To view your the release notes of every release:
|
26
|
+
|
27
|
+
$ bundle exec rake changelog:notes
|
28
|
+
$ bundle exec rake changelog:notes[ALL]
|
29
|
+
|
30
|
+
for a specific release:
|
31
|
+
|
32
|
+
$ bundle exec rake changelog:notes[1.0.4]
|
33
|
+
|
34
|
+
for all releases inclusively after a given release:
|
35
|
+
|
36
|
+
$ bundle exec rake changelog:notes[1.0.4<]
|
37
|
+
|
38
|
+
for all releases inclusively before a given release:
|
39
|
+
|
40
|
+
$ bundle exec rake changelog:notes[<2.0.4]
|
41
|
+
|
42
|
+
for all releases inclusively between two releases:
|
43
|
+
|
44
|
+
$ bundle exec rake changelog:notes[1.0.4<2.0.4]
|
25
45
|
|
26
46
|
## Installation
|
27
47
|
|
data/lib/structured_changelog.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'structured_changelog/release'
|
3
3
|
require 'structured_changelog/roadmap'
|
4
|
-
require 'structured_changelog/
|
4
|
+
require 'structured_changelog/release_filters'
|
5
5
|
|
6
6
|
class StructuredChangelog
|
7
7
|
attr_reader :path, :releases, :roadmaps
|
@@ -34,9 +34,9 @@ class StructuredChangelog
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def find_releases(query)
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
ReleaseFilters
|
38
|
+
.filter_for(query)
|
39
|
+
.filter_releases(releases)
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), "release_filters", "*.rb")].each(&method(:require))
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
IllegalQuery = Class.new(StandardError)
|
5
|
+
|
6
|
+
module ReleaseFilters
|
7
|
+
def self.filter_for(query)
|
8
|
+
filter_class = filter_class_for_query(query)
|
9
|
+
|
10
|
+
raise IllegalQuery.new(query) unless filter_class
|
11
|
+
|
12
|
+
filter_class.new(query)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.filter_class_for_query(query)
|
16
|
+
filter_classes.find do |filter_class|
|
17
|
+
filter_class.appropriate_for_query?(query)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.filter_classes
|
22
|
+
[
|
23
|
+
MatchesCurrentVersion,
|
24
|
+
MatchesAllVersions,
|
25
|
+
MatchesSingleVersion,
|
26
|
+
MatchesVersionsGreaterThanOrEqualTo,
|
27
|
+
MatchesVersionsLessThanOrEqualTo,
|
28
|
+
MatchesVersionsBetween
|
29
|
+
]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class StructuredChangelog
|
2
|
-
module
|
2
|
+
module ReleaseFilters
|
3
3
|
class Base
|
4
4
|
def self.appropriate_for_query?(query)
|
5
5
|
!query.match(pattern).nil?
|
@@ -9,10 +9,6 @@ class StructuredChangelog
|
|
9
9
|
@query = query
|
10
10
|
end
|
11
11
|
|
12
|
-
def to_proc
|
13
|
-
method(:call).to_proc
|
14
|
-
end
|
15
|
-
|
16
12
|
private
|
17
13
|
|
18
14
|
attr_reader :query
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'structured_changelog/release_filters/base'
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
module ReleaseFilters
|
5
|
+
class MatchesCurrentVersion < Base
|
6
|
+
def self.pattern
|
7
|
+
/^current$/
|
8
|
+
end
|
9
|
+
|
10
|
+
def filter_releases(releases)
|
11
|
+
[releases.max]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'structured_changelog/release_filters/base'
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
module ReleaseFilters
|
5
|
+
class MatchesSingleVersion < Base
|
6
|
+
def self.pattern
|
7
|
+
/^\d+\.\d+\.\d+$/
|
8
|
+
end
|
9
|
+
|
10
|
+
def filter_releases(releases)
|
11
|
+
releases.select do |release|
|
12
|
+
release.version == query
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/structured_changelog/{release_comparators → release_filters}/matches_versions_between.rb
RENAMED
@@ -1,14 +1,16 @@
|
|
1
|
-
require 'structured_changelog/
|
1
|
+
require 'structured_changelog/release_filters/base'
|
2
2
|
|
3
3
|
class StructuredChangelog
|
4
|
-
module
|
4
|
+
module ReleaseFilters
|
5
5
|
class MatchesVersionsBetween < Base
|
6
6
|
def self.pattern
|
7
7
|
/^(?<floor>\d+\.\d+\.\d+)\<(?<ceiling>\d+\.\d+\.\d+)$/
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
10
|
+
def filter_releases(releases)
|
11
|
+
releases.select do |release|
|
12
|
+
floor <= release.version && release.version <= ceiling
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
@@ -1,14 +1,16 @@
|
|
1
|
-
require 'structured_changelog/
|
1
|
+
require 'structured_changelog/release_filters/base'
|
2
2
|
|
3
3
|
class StructuredChangelog
|
4
|
-
module
|
4
|
+
module ReleaseFilters
|
5
5
|
class MatchesVersionsGreaterThanOrEqualTo < Base
|
6
6
|
def self.pattern
|
7
7
|
/^(?<version>\d+\.\d+\.\d+)\<$/
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
10
|
+
def filter_releases(releases)
|
11
|
+
releases.select do |release|
|
12
|
+
version <= release.version
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
@@ -1,14 +1,16 @@
|
|
1
|
-
require 'structured_changelog/
|
1
|
+
require 'structured_changelog/release_filters/base'
|
2
2
|
|
3
3
|
class StructuredChangelog
|
4
|
-
module
|
4
|
+
module ReleaseFilters
|
5
5
|
class MatchesVersionsLessThanOrEqualTo < Base
|
6
6
|
def self.pattern
|
7
7
|
/^\<(?<version>\d+\.\d+\.\d+)$/
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
10
|
+
def filter_releases(releases)
|
11
|
+
releases.select do |release|
|
12
|
+
release.version <= version
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
@@ -2,14 +2,12 @@ require 'structured_changelog'
|
|
2
2
|
|
3
3
|
desc "Display Release Notes for One or Multiple Versions"
|
4
4
|
task "changelog:notes", [:query, :path] do |_task, arguments|
|
5
|
-
query = arguments.to_h.fetch(:query) { "
|
5
|
+
query = arguments.to_h.fetch(:query) { "current" }
|
6
6
|
path = arguments.to_h.fetch(:path) { "CHANGELOG.md" }
|
7
7
|
|
8
8
|
changelog = StructuredChangelog.new(path)
|
9
9
|
releases = changelog.find_releases(query)
|
10
10
|
|
11
|
-
releases.
|
12
|
-
puts release.contents
|
13
|
-
end
|
11
|
+
puts releases.map(&:contents).join("\n\n")
|
14
12
|
end
|
15
13
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'structured_changelog'
|
2
|
+
|
3
|
+
desc 'Display the Current Version'
|
4
|
+
task 'changelog:version', [:path] do |_task, arguments|
|
5
|
+
path = arguments.to_h.fetch(:path) { "CHANGELOG.md" }
|
6
|
+
|
7
|
+
changelog = StructuredChangelog.new(path)
|
8
|
+
|
9
|
+
puts changelog.version
|
10
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: structured_changelog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Hoffman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -113,17 +113,19 @@ files:
|
|
113
113
|
- bin/setup
|
114
114
|
- lib/structured_changelog.rb
|
115
115
|
- lib/structured_changelog/release.rb
|
116
|
-
- lib/structured_changelog/
|
117
|
-
- lib/structured_changelog/
|
118
|
-
- lib/structured_changelog/
|
119
|
-
- lib/structured_changelog/
|
120
|
-
- lib/structured_changelog/
|
121
|
-
- lib/structured_changelog/
|
122
|
-
- lib/structured_changelog/
|
116
|
+
- lib/structured_changelog/release_filters.rb
|
117
|
+
- lib/structured_changelog/release_filters/base.rb
|
118
|
+
- lib/structured_changelog/release_filters/matches_all_versions.rb
|
119
|
+
- lib/structured_changelog/release_filters/matches_current_version.rb
|
120
|
+
- lib/structured_changelog/release_filters/matches_single_version.rb
|
121
|
+
- lib/structured_changelog/release_filters/matches_versions_between.rb
|
122
|
+
- lib/structured_changelog/release_filters/matches_versions_greater_than_or_equal_to.rb
|
123
|
+
- lib/structured_changelog/release_filters/matches_versions_less_than_or_equal_to.rb
|
123
124
|
- lib/structured_changelog/roadmap.rb
|
124
125
|
- lib/structured_changelog/tasks.rb
|
125
126
|
- lib/structured_changelog/tasks/notes.rb
|
126
127
|
- lib/structured_changelog/tasks/validate.rb
|
128
|
+
- lib/structured_changelog/tasks/version.rb
|
127
129
|
- lib/structured_changelog/version.rb
|
128
130
|
- structured_changelog.gemspec
|
129
131
|
homepage: https://www.github.com/yarmiganosca/structured_changelog
|
@@ -1,31 +0,0 @@
|
|
1
|
-
Dir[File.join(File.dirname(__FILE__), "release_comparators", "*.rb")].each(&method(:require))
|
2
|
-
|
3
|
-
class StructuredChangelog
|
4
|
-
IllegalQuery = Class.new(StandardError)
|
5
|
-
|
6
|
-
module ReleaseComparators
|
7
|
-
def self.comparator_for(query)
|
8
|
-
comparator_class = comparator_class_for_query(query)
|
9
|
-
|
10
|
-
raise IllegalQuery.new(query) unless comparator_class
|
11
|
-
|
12
|
-
comparator_class.new(query)
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.comparator_class_for_query(query)
|
16
|
-
comparator_classes.find do |comparator_class|
|
17
|
-
comparator_class.appropriate_for_query?(query)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.comparator_classes
|
22
|
-
[
|
23
|
-
MatchesAllVersions,
|
24
|
-
MatchesSingleVersion,
|
25
|
-
MatchesVersionsGreaterThanOrEqualTo,
|
26
|
-
MatchesVersionsLessThanOrEqualTo,
|
27
|
-
MatchesVersionsBetween
|
28
|
-
]
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'structured_changelog/release_comparators/base'
|
2
|
-
|
3
|
-
class StructuredChangelog
|
4
|
-
module ReleaseComparators
|
5
|
-
class MatchesSingleVersion < Base
|
6
|
-
def self.pattern
|
7
|
-
/^\d+\.\d+\.\d+$/
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(release)
|
11
|
-
release.version == query
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|