milestoner 17.11.0 → 18.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +183 -79
- data/lib/milestoner/builders/ascii_doc.rb +30 -10
- data/lib/milestoner/builders/container.rb +1 -0
- data/lib/milestoner/builders/feed.rb +46 -0
- data/lib/milestoner/builders/markdown.rb +30 -10
- data/lib/milestoner/builders/stream.rb +19 -8
- data/lib/milestoner/builders/web.rb +46 -16
- data/lib/milestoner/cli/actions/build/basename.rb +27 -0
- data/lib/milestoner/cli/actions/build/format.rb +4 -4
- data/lib/milestoner/cli/actions/build/label.rb +3 -3
- data/lib/milestoner/cli/actions/build/layout.rb +3 -3
- data/lib/milestoner/cli/actions/build/max.rb +24 -0
- data/lib/milestoner/cli/actions/build/root.rb +3 -3
- data/lib/milestoner/cli/actions/build/stylesheet.rb +36 -0
- data/lib/milestoner/cli/actions/build/tail.rb +26 -0
- data/lib/milestoner/cli/actions/build/version.rb +7 -3
- data/lib/milestoner/cli/actions/cache/delete.rb +1 -1
- data/lib/milestoner/cli/actions/cache/find.rb +2 -2
- data/lib/milestoner/cli/actions/cache/info.rb +1 -1
- data/lib/milestoner/cli/actions/cache/list.rb +2 -2
- data/lib/milestoner/cli/actions/next.rb +2 -2
- data/lib/milestoner/cli/actions/publish.rb +19 -4
- data/lib/milestoner/cli/commands/build.rb +15 -25
- data/lib/milestoner/cli/commands/cache.rb +1 -1
- data/lib/milestoner/commits/categorizer.rb +2 -2
- data/lib/milestoner/commits/enricher.rb +1 -1
- data/lib/milestoner/commits/enrichers/body.rb +2 -2
- data/lib/milestoner/commits/enrichers/format.rb +2 -2
- data/lib/milestoner/commits/enrichers/issue.rb +2 -2
- data/lib/milestoner/commits/enrichers/milestone.rb +1 -1
- data/lib/milestoner/commits/enrichers/note.rb +2 -2
- data/lib/milestoner/commits/enrichers/review.rb +2 -2
- data/lib/milestoner/commits/enrichers/uri.rb +2 -2
- data/lib/milestoner/commits/tagger.rb +78 -0
- data/lib/milestoner/configuration/contract.rb +30 -8
- data/lib/milestoner/configuration/defaults.yml +49 -24
- data/lib/milestoner/configuration/model.rb +17 -8
- data/lib/milestoner/configuration/transformers/build/template_paths.rb +4 -4
- data/lib/milestoner/configuration/transformers/citations/description.rb +5 -3
- data/lib/milestoner/configuration/transformers/citations/label.rb +2 -3
- data/lib/milestoner/configuration/transformers/citations/uri.rb +48 -0
- data/lib/milestoner/configuration/transformers/gems/description.rb +8 -2
- data/lib/milestoner/configuration/transformers/gems/label.rb +6 -3
- data/lib/milestoner/configuration/transformers/gems/name.rb +8 -2
- data/lib/milestoner/configuration/transformers/gems/uri.rb +12 -3
- data/lib/milestoner/configuration/transformers/generator/label.rb +2 -2
- data/lib/milestoner/configuration/transformers/generator/uri.rb +2 -2
- data/lib/milestoner/configuration/transformers/generator/version.rb +2 -2
- data/lib/milestoner/configuration/transformers/project/author.rb +5 -2
- data/lib/milestoner/configuration/transformers/project/label.rb +2 -2
- data/lib/milestoner/configuration/transformers/project/version.rb +2 -2
- data/lib/milestoner/configuration/transformers/syndication/link.rb +33 -0
- data/lib/milestoner/container.rb +20 -16
- data/lib/milestoner/models/commit.rb +2 -0
- data/lib/milestoner/models/tag.rb +8 -0
- data/lib/milestoner/renderers/universal.rb +2 -2
- data/lib/milestoner/syndication/builder.rb +120 -0
- data/lib/milestoner/syndication/refine.rb +25 -0
- data/lib/milestoner/syndication/shared.rb +25 -0
- data/lib/milestoner/tags/creator.rb +11 -33
- data/lib/milestoner/tags/publisher.rb +13 -5
- data/lib/milestoner/tags/pusher.rb +22 -13
- data/lib/milestoner/templates/layouts/page.html.erb +7 -1
- data/lib/milestoner/templates/layouts/page.xml.erb +11 -0
- data/lib/milestoner/templates/milestones/_avatar.adoc.erb +1 -0
- data/lib/milestoner/templates/milestones/_avatar.html.erb +1 -1
- data/lib/milestoner/templates/milestones/_avatar.md.erb +2 -0
- data/lib/milestoner/templates/milestones/_avatar.xml.erb +5 -0
- data/lib/milestoner/templates/milestones/_commit.adoc.erb +1 -1
- data/lib/milestoner/templates/milestones/_commit.html.erb +18 -8
- data/lib/milestoner/templates/milestones/_commit.md.erb +1 -1
- data/lib/milestoner/templates/milestones/_commit.xml.erb +84 -0
- data/lib/milestoner/templates/milestones/_icon.adoc.erb +1 -0
- data/lib/milestoner/templates/milestones/_icon.html.erb +2 -2
- data/lib/milestoner/templates/milestones/_icon.md.erb +5 -0
- data/lib/milestoner/templates/milestones/_icon.xml.erb +5 -0
- data/lib/milestoner/templates/milestones/_profile.adoc.erb +1 -0
- data/lib/milestoner/templates/milestones/_profile.md.erb +1 -0
- data/lib/milestoner/templates/milestones/_profile.xml.erb +5 -0
- data/lib/milestoner/templates/milestones/_tag.adoc.erb +13 -0
- data/lib/milestoner/templates/milestones/_tag.html.erb +82 -0
- data/lib/milestoner/templates/milestones/_tag.md.erb +18 -0
- data/lib/milestoner/templates/milestones/_tag.stream.erb +14 -0
- data/lib/milestoner/templates/milestones/_tag.xml.erb +27 -0
- data/lib/milestoner/templates/milestones/show.adoc.erb +1 -11
- data/lib/milestoner/templates/milestones/show.html.erb +1 -46
- data/lib/milestoner/templates/milestones/show.md.erb +1 -11
- data/lib/milestoner/templates/milestones/show.stream.erb +1 -11
- data/lib/milestoner/templates/milestones/show.xml.erb +1 -0
- data/lib/milestoner/templates/public/page.css.erb +111 -60
- data/lib/milestoner/views/context.rb +7 -4
- data/lib/milestoner/views/milestones/show.rb +4 -29
- data/lib/milestoner/views/parts/commit.rb +8 -8
- data/lib/milestoner/views/parts/tag.rb +51 -0
- data/milestoner.gemspec +8 -7
- data.tar.gz.sig +0 -0
- metadata +58 -22
- metadata.gz.sig +3 -3
- data/lib/milestoner/configuration/transformers/project/generator.rb +0 -35
- data/lib/milestoner/configuration/transformers/project/name.rb +0 -21
- data/lib/milestoner/configuration/transformers/uri/avatar.rb +0 -20
- data/lib/milestoner/configuration/transformers/uri/commit.rb +0 -23
- data/lib/milestoner/configuration/transformers/uri/profile.rb +0 -20
- data/lib/milestoner/configuration/transformers/uri/review.rb +0 -23
- data/lib/milestoner/configuration/transformers/uri/tracker.rb +0 -23
- data/lib/milestoner/error.rb +0 -7
@@ -4,39 +4,69 @@ require "refinements/pathname"
|
|
4
4
|
|
5
5
|
module Milestoner
|
6
6
|
module Builders
|
7
|
-
# Builds web
|
7
|
+
# Builds web output (i.e. HTML and CSS).
|
8
8
|
class Web
|
9
|
-
include Milestoner::Import[:
|
9
|
+
include Milestoner::Import[:settings, :logger]
|
10
10
|
|
11
11
|
using Refinements::Pathname
|
12
12
|
|
13
|
-
def initialize(
|
13
|
+
def initialize(tagger: Commits::Tagger.new, view: Views::Milestones::Show.new, **)
|
14
|
+
@tagger = tagger
|
14
15
|
@view = view
|
15
|
-
@enricher = enricher
|
16
16
|
super(**)
|
17
17
|
end
|
18
18
|
|
19
19
|
def call
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
settings.build_root.make_path
|
21
|
+
copy_stylesheet
|
22
|
+
|
23
|
+
tagger.call
|
24
|
+
.fmap { |tags| build tags }
|
25
|
+
.alt_map { |message| failure message }
|
24
26
|
end
|
25
27
|
|
26
28
|
private
|
27
29
|
|
28
|
-
attr_reader :
|
30
|
+
attr_reader :tagger, :view
|
31
|
+
|
32
|
+
def build tags
|
33
|
+
tags.each { |tag| write tag }
|
34
|
+
settings.build_root
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy_stylesheet
|
38
|
+
return unless settings.build_stylesheet
|
39
|
+
|
40
|
+
stylesheet_template.copy stylesheet_path
|
41
|
+
logger.info { "Built: #{stylesheet_path}." }
|
42
|
+
end
|
43
|
+
|
44
|
+
def stylesheet_template
|
45
|
+
settings.build_template_paths
|
46
|
+
.map { |path| path.join "public/page.css.erb" }
|
47
|
+
.find(&:exist?)
|
48
|
+
.copy settings.build_root.make_path.join stylesheet_path
|
49
|
+
end
|
29
50
|
|
30
51
|
def stylesheet_path
|
31
|
-
|
32
|
-
|
33
|
-
|
52
|
+
settings.build_root.join "#{Pathname(settings.build_stylesheet).name}.css"
|
53
|
+
end
|
54
|
+
|
55
|
+
def write tag
|
56
|
+
path = make_path tag
|
57
|
+
|
58
|
+
path.write view.call(tag:, layout: settings.build_layout)
|
59
|
+
logger.info { "Built: #{path}." }
|
60
|
+
end
|
61
|
+
|
62
|
+
def make_path tag
|
63
|
+
version = settings.build_max == 1 ? "" : tag.version
|
64
|
+
settings.build_root.join(version, settings.build_basename).make_ancestors.sub_ext ".html"
|
34
65
|
end
|
35
66
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
end
|
67
|
+
def failure message
|
68
|
+
logger.error { message }
|
69
|
+
message
|
40
70
|
end
|
41
71
|
end
|
42
72
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "sod"
|
5
|
+
|
6
|
+
module Milestoner
|
7
|
+
module CLI
|
8
|
+
module Actions
|
9
|
+
module Build
|
10
|
+
# Handles output path.
|
11
|
+
class Basename < Sod::Action
|
12
|
+
include Import[:settings]
|
13
|
+
|
14
|
+
description "Set basename."
|
15
|
+
|
16
|
+
ancillary "The file extension is dynamically calculated from format."
|
17
|
+
|
18
|
+
on %w[-b --basename], argument: "[NAME]"
|
19
|
+
|
20
|
+
default { Container[:settings].build_basename }
|
21
|
+
|
22
|
+
def call(name = nil) = settings.build_basename = name || default
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -8,15 +8,15 @@ module Milestoner
|
|
8
8
|
module Build
|
9
9
|
# Handles build output format.
|
10
10
|
class Format < Sod::Action
|
11
|
-
include Import[:
|
11
|
+
include Import[:settings]
|
12
12
|
|
13
13
|
description "Set output format."
|
14
14
|
|
15
|
-
on %w[-f --format], argument: "[KIND]", allow: %w[ascii_doc markdown stream web]
|
15
|
+
on %w[-f --format], argument: "[KIND]", allow: %w[ascii_doc feed markdown stream web]
|
16
16
|
|
17
|
-
default { Container[:
|
17
|
+
default { Container[:settings].build_format }
|
18
18
|
|
19
|
-
def call(kind = nil) =
|
19
|
+
def call(kind = nil) = settings.build_format = kind || default
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -8,15 +8,15 @@ module Milestoner
|
|
8
8
|
module Build
|
9
9
|
# Handles build label.
|
10
10
|
class Label < Sod::Action
|
11
|
-
include Import[:
|
11
|
+
include Import[:settings]
|
12
12
|
|
13
13
|
description "Set label."
|
14
14
|
|
15
15
|
on %w[-l --label], argument: "[TEXT]"
|
16
16
|
|
17
|
-
default { Container[:
|
17
|
+
default { Container[:settings].project_label }
|
18
18
|
|
19
|
-
def call(label = nil) =
|
19
|
+
def call(label = nil) = settings.project_label = label || default
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -8,7 +8,7 @@ module Milestoner
|
|
8
8
|
module Build
|
9
9
|
# Handles build layout.
|
10
10
|
class Layout < Sod::Action
|
11
|
-
include Import[:
|
11
|
+
include Import[:settings]
|
12
12
|
|
13
13
|
description "Set view template layout."
|
14
14
|
|
@@ -16,9 +16,9 @@ module Milestoner
|
|
16
16
|
|
17
17
|
on %w[-L --layout], argument: "[NAME]"
|
18
18
|
|
19
|
-
default { Container[:
|
19
|
+
default { Container[:settings].build_layout }
|
20
20
|
|
21
|
-
def call(layout = nil) =
|
21
|
+
def call(layout = nil) = settings.build_layout = parse(layout)
|
22
22
|
|
23
23
|
private
|
24
24
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sod"
|
4
|
+
|
5
|
+
module Milestoner
|
6
|
+
module CLI
|
7
|
+
module Actions
|
8
|
+
module Build
|
9
|
+
# Handles build maximum.
|
10
|
+
class Max < Sod::Action
|
11
|
+
include Import[:settings]
|
12
|
+
|
13
|
+
description "Set maximum number of tags to process."
|
14
|
+
|
15
|
+
on %w[-m --max], argument: "[NUMBER]", type: Integer
|
16
|
+
|
17
|
+
default { Container[:settings].build_max }
|
18
|
+
|
19
|
+
def call(max = nil) = settings.build_max = max || default
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -9,15 +9,15 @@ module Milestoner
|
|
9
9
|
module Build
|
10
10
|
# Handles build root path.
|
11
11
|
class Root < Sod::Action
|
12
|
-
include Import[:
|
12
|
+
include Import[:settings]
|
13
13
|
|
14
14
|
description "Set root output path."
|
15
15
|
|
16
16
|
on %w[-r --root], argument: "[PATH]"
|
17
17
|
|
18
|
-
default { Container[:
|
18
|
+
default { Container[:settings].build_root }
|
19
19
|
|
20
|
-
def call(path = nil) =
|
20
|
+
def call(path = nil) = settings.build_root = Pathname(path || default).expand_path
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sod"
|
4
|
+
|
5
|
+
module Milestoner
|
6
|
+
module CLI
|
7
|
+
module Actions
|
8
|
+
module Build
|
9
|
+
# Handles build stylesheet.
|
10
|
+
class Stylesheet < Sod::Action
|
11
|
+
include Import[:settings]
|
12
|
+
|
13
|
+
description "Set stylesheet file name or relative path."
|
14
|
+
|
15
|
+
ancillary "Only used by web format. Use false to disable."
|
16
|
+
|
17
|
+
on %w[-s --stylesheet], argument: "[NAME]"
|
18
|
+
|
19
|
+
default { Container[:settings].build_stylesheet }
|
20
|
+
|
21
|
+
def call(name = nil) = settings.build_stylesheet = parse(name)
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def parse value
|
26
|
+
case value
|
27
|
+
in "false" then false
|
28
|
+
in String then value
|
29
|
+
else default
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sod"
|
4
|
+
|
5
|
+
module Milestoner
|
6
|
+
module CLI
|
7
|
+
module Actions
|
8
|
+
module Build
|
9
|
+
# Handles build tail.
|
10
|
+
class Tail < Sod::Action
|
11
|
+
include Import[:settings]
|
12
|
+
|
13
|
+
description "Set tail reference."
|
14
|
+
|
15
|
+
ancillary "Defines the Git reference at which to cap the build."
|
16
|
+
|
17
|
+
on %w[-t --tail], argument: "[REFERENCE]", allow: %w[head tag]
|
18
|
+
|
19
|
+
default { Container[:settings].build_tail }
|
20
|
+
|
21
|
+
def call(reference = nil) = settings.build_tail = reference || default
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -9,7 +9,7 @@ module Milestoner
|
|
9
9
|
module Build
|
10
10
|
# Handles build version.
|
11
11
|
class Version < Sod::Action
|
12
|
-
include Import[:
|
12
|
+
include Import[:settings, :logger]
|
13
13
|
|
14
14
|
using Versionaire::Cast
|
15
15
|
|
@@ -19,9 +19,13 @@ module Milestoner
|
|
19
19
|
|
20
20
|
on %w[-v --version], argument: "[VERSION]"
|
21
21
|
|
22
|
-
default { Container[:
|
22
|
+
default { Container[:settings].project_version }
|
23
23
|
|
24
|
-
def call
|
24
|
+
def call version = nil
|
25
|
+
settings.project_version = Version(version || default)
|
26
|
+
rescue Versionaire::Error => error
|
27
|
+
logger.error { error.message }
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -8,7 +8,7 @@ module Milestoner
|
|
8
8
|
module Cache
|
9
9
|
# Handles finding a user in the cache.
|
10
10
|
class Find < Sod::Action
|
11
|
-
include Import[:
|
11
|
+
include Import[:logger, :io, client: :cache]
|
12
12
|
|
13
13
|
description "Find user."
|
14
14
|
|
@@ -21,7 +21,7 @@ module Milestoner
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def success(user) =
|
24
|
+
def success(user) = io.puts user.to_h.values.join(", ")
|
25
25
|
|
26
26
|
def failure(message) = logger.abort message
|
27
27
|
end
|
@@ -8,7 +8,7 @@ module Milestoner
|
|
8
8
|
module Cache
|
9
9
|
# Handles listing users within the cache.
|
10
10
|
class List < Sod::Action
|
11
|
-
include Import[:
|
11
|
+
include Import[:logger, :io, client: :cache]
|
12
12
|
|
13
13
|
description "List users."
|
14
14
|
|
@@ -24,7 +24,7 @@ module Milestoner
|
|
24
24
|
def print users
|
25
25
|
return logger.info { "No users found." } if users.empty?
|
26
26
|
|
27
|
-
users.each { |user|
|
27
|
+
users.each { |user| io.puts user.to_h.values.join ", " }
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -7,7 +7,7 @@ module Milestoner
|
|
7
7
|
module Actions
|
8
8
|
# Handles calculation of next version.
|
9
9
|
class Next < Sod::Action
|
10
|
-
include Import[:
|
10
|
+
include Import[:settings, :io]
|
11
11
|
|
12
12
|
description "Show next version."
|
13
13
|
|
@@ -15,7 +15,7 @@ module Milestoner
|
|
15
15
|
|
16
16
|
on %w[-n --next]
|
17
17
|
|
18
|
-
def call(*) =
|
18
|
+
def call(*) = io.puts settings.project_version
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "dry/monads"
|
3
4
|
require "sod"
|
4
5
|
require "versionaire"
|
5
6
|
|
@@ -8,28 +9,42 @@ module Milestoner
|
|
8
9
|
module Actions
|
9
10
|
# Handles tag creation and pushing of tag to local repository.
|
10
11
|
class Publish < Sod::Action
|
11
|
-
include Import[:
|
12
|
+
include Import[:settings, :logger]
|
13
|
+
include Dry::Monads[:result]
|
12
14
|
|
13
15
|
using Versionaire::Cast
|
14
16
|
|
15
17
|
description "Publish milestone."
|
16
18
|
|
17
|
-
ancillary "
|
19
|
+
ancillary "Tag and push to remote repository."
|
18
20
|
|
19
21
|
on %w[-p --publish], argument: "[VERSION]"
|
20
22
|
|
21
|
-
default { Container[:
|
23
|
+
default { Container[:settings].project_version }
|
22
24
|
|
23
25
|
def initialize(publisher: Tags::Publisher.new, **)
|
24
26
|
super(**)
|
25
27
|
@publisher = publisher
|
26
28
|
end
|
27
29
|
|
28
|
-
def call
|
30
|
+
def call version = nil
|
31
|
+
case publisher.call Version(version || default)
|
32
|
+
in Success(version) then version
|
33
|
+
in Failure(message) then log_error message
|
34
|
+
else log_error "Publish failed, unable to parse result."
|
35
|
+
end
|
36
|
+
rescue Versionaire::Error => error
|
37
|
+
log_error error.message
|
38
|
+
end
|
29
39
|
|
30
40
|
private
|
31
41
|
|
32
42
|
attr_reader :publisher
|
43
|
+
|
44
|
+
def log_error message
|
45
|
+
logger.error { message }
|
46
|
+
message
|
47
|
+
end
|
33
48
|
end
|
34
49
|
end
|
35
50
|
end
|
@@ -5,33 +5,34 @@ require "sod"
|
|
5
5
|
module Milestoner
|
6
6
|
module CLI
|
7
7
|
module Commands
|
8
|
-
# Handles the building of milestone
|
8
|
+
# Handles the building of different milestone formats.
|
9
9
|
class Build < Sod::Command
|
10
|
-
include Import[:
|
11
|
-
include Builders::Import[:ascii_doc, :markdown, :stream, :web]
|
10
|
+
include Import[:settings, :logger, :io]
|
11
|
+
include Builders::Import[:ascii_doc, :feed, :markdown, :stream, :web]
|
12
12
|
|
13
13
|
handle "build"
|
14
14
|
|
15
15
|
description "Build milestone."
|
16
16
|
|
17
|
+
on Actions::Build::Basename
|
18
|
+
on Actions::Build::Format
|
17
19
|
on Actions::Build::Label
|
18
|
-
on Actions::Build::Version
|
19
20
|
on Actions::Build::Layout
|
20
|
-
on Actions::Build::
|
21
|
+
on Actions::Build::Max
|
21
22
|
on Actions::Build::Root
|
23
|
+
on Actions::Build::Stylesheet
|
24
|
+
on Actions::Build::Tail
|
25
|
+
on Actions::Build::Version
|
22
26
|
|
23
|
-
# :reek:TooManyStatements
|
24
27
|
def call
|
25
|
-
format =
|
28
|
+
format = settings.build_format
|
26
29
|
|
27
|
-
log_info "Building #{
|
30
|
+
log_info "Building #{settings.project_label} (#{format})..."
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
when "web" then build_web
|
34
|
-
else logger.abort "Invalid build format: #{format}."
|
32
|
+
if infused_keys.include? format.to_sym
|
33
|
+
__send__(format).call
|
34
|
+
else
|
35
|
+
logger.abort "Invalid build format: #{format}."
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
@@ -39,17 +40,6 @@ module Milestoner
|
|
39
40
|
|
40
41
|
attr_reader :view, :enricher
|
41
42
|
|
42
|
-
def build_ascii_doc = log_info("Milestone built: #{ascii_doc.call}.")
|
43
|
-
|
44
|
-
def build_markdown = log_info("Milestone built: #{markdown.call}.")
|
45
|
-
|
46
|
-
def build_stream
|
47
|
-
kernel.puts
|
48
|
-
stream.call
|
49
|
-
end
|
50
|
-
|
51
|
-
def build_web = log_info "Milestone built: #{web.call}."
|
52
|
-
|
53
43
|
def log_info(message) = logger.info { message }
|
54
44
|
end
|
55
45
|
end
|
@@ -7,7 +7,7 @@ module Milestoner
|
|
7
7
|
module Commits
|
8
8
|
# Retrieves and categorizes Git repository commit tagged or untagged history.
|
9
9
|
class Categorizer
|
10
|
-
include Import[:
|
10
|
+
include Import[:settings]
|
11
11
|
|
12
12
|
using Refinements::Array
|
13
13
|
|
@@ -15,7 +15,7 @@ module Milestoner
|
|
15
15
|
@collector = collector
|
16
16
|
super(**)
|
17
17
|
|
18
|
-
@labels =
|
18
|
+
@labels = settings.commit_categories.pluck :label
|
19
19
|
@pattern = labels.empty? ? // : Regexp.union(labels)
|
20
20
|
end
|
21
21
|
|
@@ -5,7 +5,7 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches commit text by rendering as HTML based on trailer information.
|
7
7
|
class Body
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
10
|
def initialize(key: "Format", renderer: Renderers::Universal.new, **)
|
11
11
|
@key = key
|
@@ -15,7 +15,7 @@ module Milestoner
|
|
15
15
|
|
16
16
|
def call commit
|
17
17
|
commit.trailer_value_for(key)
|
18
|
-
.value_or(
|
18
|
+
.value_or(settings.commit_format)
|
19
19
|
.then { |format| renderer.call commit.body, for: format.to_sym }
|
20
20
|
end
|
21
21
|
|
@@ -5,14 +5,14 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches a commit format based on trailer information.
|
7
7
|
class Format
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
10
|
def initialize(key: "Format", **)
|
11
11
|
@key = key
|
12
12
|
super(**)
|
13
13
|
end
|
14
14
|
|
15
|
-
def call(commit) = commit.trailer_value_for(key).value_or(
|
15
|
+
def call(commit) = commit.trailer_value_for(key).value_or(settings.commit_format)
|
16
16
|
|
17
17
|
private
|
18
18
|
|
@@ -5,7 +5,7 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches a commit issue based on trailer information.
|
7
7
|
class Issue
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
10
|
def initialize(key: "Issue", model: Models::Link, **)
|
11
11
|
@key = key
|
@@ -14,7 +14,7 @@ module Milestoner
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def call commit
|
17
|
-
uri =
|
17
|
+
uri = settings.tracker_uri
|
18
18
|
|
19
19
|
commit.trailer_value_for(key)
|
20
20
|
.either -> value { model[id: value, uri: format(uri, id: value)] },
|
@@ -5,7 +5,7 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches a commit milestone based on trailer information.
|
7
7
|
class Milestone
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
10
|
def initialize(key: "Milestone", default: "unknown", **)
|
11
11
|
@key = key
|
@@ -5,7 +5,7 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches commit notes by rendering as HTML based on trailer information.
|
7
7
|
class Note
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
10
|
def initialize(key: "Format", renderer: Renderers::Universal.new, **)
|
11
11
|
@key = key
|
@@ -15,7 +15,7 @@ module Milestoner
|
|
15
15
|
|
16
16
|
def call commit
|
17
17
|
commit.trailer_value_for(key)
|
18
|
-
.value_or(
|
18
|
+
.value_or(settings.commit_format)
|
19
19
|
.then { |format| renderer.call commit.notes, for: format.to_sym }
|
20
20
|
end
|
21
21
|
|
@@ -5,14 +5,14 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches a commit review based on trailer information.
|
7
7
|
class Review
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
10
|
def initialize(model: Models::Link, **)
|
11
11
|
@model = model
|
12
12
|
super(**)
|
13
13
|
end
|
14
14
|
|
15
|
-
def call(*) = model[id: "All", uri: format(
|
15
|
+
def call(*) = model[id: "All", uri: format(settings.review_uri, id: nil)]
|
16
16
|
|
17
17
|
private
|
18
18
|
|
@@ -5,9 +5,9 @@ module Milestoner
|
|
5
5
|
module Enrichers
|
6
6
|
# Enriches a commit URI based on trailer information.
|
7
7
|
class URI
|
8
|
-
include Milestoner::Import[:
|
8
|
+
include Milestoner::Import[:settings]
|
9
9
|
|
10
|
-
def call(commit) = format
|
10
|
+
def call(commit) = format settings.commit_uri, id: commit.sha
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|