milestoner 17.7.0 → 17.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1ba81535b2b7f13eee65139650927c6b6fd89d1f4ce7a91bd8bd8b5f193b938
4
- data.tar.gz: bf82ebc6322e1509786691305dd7426716db0aa1edb118f244379ed147de9419
3
+ metadata.gz: db830f8b4d06e54aba148ef3b9137dde5bdfbe53880269b02ac81ab67ffb6b31
4
+ data.tar.gz: 1e94ce0158f88ab0c58662d7f63d70c2f48460467ccb313071c7192f040e79ca
5
5
  SHA512:
6
- metadata.gz: da5ab0c1fb070b621f23d3cd2109fbc88197bc7ef605245fb92d8fd598a352d8f35ebdc7774b5649a0c9e305a08bfb625c0bf32a4d606a6f7ed25b9c666a4691
7
- data.tar.gz: 93aa467526e6ac43d881834499220c0f0a73d1a0a463b85abc6ad2ff2e63aa5210f5bfa06916f7cfbded178af3383fc45f0d65e5438bfc5729f86ef267db6bd9
6
+ metadata.gz: d5793c46062eaf6d98fa0c73b1462cb36eb31e84729fd2bdda90bad660057014952d072abe2196a384c42213e77e3a4f6fac45914749eb7fed5f2270024e3f92
7
+ data.tar.gz: eab9b9e88db0696031cb823e650b8f325731b0b62ce0e269dfe07dda538002693186466df13824d8af2c062c26ceb1617167cd614809761c99f41501be159605
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -11,7 +11,7 @@
11
11
  :git_link: link:https://git-scm.com[Git]
12
12
  :git_lint_link: link:https://alchemists.io/projects/git-lint[Git Lint]
13
13
  :hanami_link: link:https://hanamirb.org[Hanami]
14
- :hanami_views_link: link:https://alchemists.io/articles/hanami_views[Hanami View]
14
+ :hanami_views_link: link:https://alchemists.io/articles/hanami_views[Hanami Views]
15
15
  :hanamismith_link: link:https://alchemists.io/projects/hanamismith[Hanamismith]
16
16
  :lode_link: link:https://alchemists.io/projects/lode[Lode]
17
17
  :markdown_link: link:https://daringfireball.net/projects/markdown[Markdown]
@@ -73,7 +73,7 @@ image:https://alchemists.io/images/projects/milestoner/screenshots/build-web-exp
73
73
  ** image:https://alchemists.io/images/projects/milestoner/icons/commits/refactored.png[Refactored] Refactored
74
74
  * Ensures {git_link} commit messages are alphabetically sorted for release note categorization and readability.
75
75
  * Provides automatic versioning based on last {git_link} tag and current commit trailers. See {git_commit_anatomy_link} for details.
76
- * Supports multiple release note build formats: {ascii_doc_link}, {markdown_link}, Stream (console), and Web (HTML). Each are fully customizable via your personal {xdg_link} configuration and {hanami_views_link} templates.
76
+ * Supports multiple release note build formats: {ascii_doc_link}, {markdown_link}, Stream (console), and Web (HTML). Each are fully customizable via your personal {xdg_link} configuration and {hanami_views_link}.
77
77
 
78
78
  == Requirements
79
79
 
@@ -174,7 +174,7 @@ The above can be customized as follows:
174
174
  ** `uri`: Required. The URI format for linking to avatars as formatted using {string_formats_link}. Default: GitHub. The `id` is dynamically calculated via the `external_id` of the user stored in the {lode_link} cache.
175
175
  * `build`: Manages release note builds.
176
176
  ** `format`: Required. The build output format. Multiple formats are supported. Default: web.
177
- ** `layout`: Required. The layout used by the {hanami_views_link} gem when building release notes. Default: page.
177
+ ** `layout`: Required. The layout used by {hanami_views_link} when building release notes. Default: page.
178
178
  ** `root`: Required. The output location. This can be a relative or absolute path. Defaults to the `tmp` directory of your current project. The path is automatically created if missing.
179
179
  * `commit`: Manages commit categories, emojis, and hyperlinks.
180
180
  ** `categories`: Required. By default, only five categories are supported which pairs well with the {git_lint_link} gem. Category order is important with the first taking precedence over the second and so forth. Special characters are allowed for prefixes but should be enclosed in quotes. To disable categories, use an empty array. Example: `categories: []`.
@@ -339,7 +339,7 @@ Given the above, the resulting version would be: 2.0.0. This is because the high
339
339
 
340
340
  ==== Templates
341
341
 
342
- Build template functionality is powered by the {hanami_views_link} gem which means you can customize the HTML structure, CSS style, and more. The quickest way to get started is to copy the `templates` folder structure -- included with this gem -- to your preferred {runcom_link} configuration. For example, this gem's template structure is:
342
+ Build template functionality is powered by {hanami_views_link} which means you can customize the HTML structure, CSS style, and more. The quickest way to get started is to copy the `templates` folder structure -- included with this gem -- to your preferred {runcom_link} configuration. For example, this gem's template structure is:
343
343
 
344
344
  ....
345
345
  lib/milestoner/templates
@@ -371,7 +371,7 @@ This means you could, for example, copy all of this gem's templates to your own
371
371
  cp -r <milestoner_gem_root>/lib/milestoner/templates $HOME/.config/milestoner/templates
372
372
  ----
373
373
 
374
- Milestoner searches your {runcom_link} configuration first and, if templates are detected, will be used instead. Otherwise, Milestoner will fall back to it's own templates. Once {runcom_link} has calculated all possible template locations, {hanami_views_link} handles the final loading and evaluation of your templates.
374
+ Milestoner searches your {runcom_link} configuration first and, if templates are detected, will be used instead. Otherwise, Milestoner falls back to it's own templates. Once {runcom_link} has calculated all possible template locations, {hanami_views_link} handle the final loading and evaluation of your templates.
375
375
 
376
376
  ==== Web Format
377
377
 
@@ -7,41 +7,42 @@ 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[:git]
10
+ include Import[:git, :input]
11
11
 
12
12
  using Refinements::Array
13
13
 
14
- def initialize(collector: Collector.new, expression: Regexp, **)
14
+ def initialize(collector: Collector.new, **)
15
15
  @collector = collector
16
- @expression = expression
17
16
  super(**)
18
- end
19
17
 
20
- def call configuration = Container[:configuration]
21
- categories = configuration.commit_categories.pluck :label
18
+ @labels = input.commit_categories.pluck :label
19
+ @pattern = labels.empty? ? // : Regexp.union(labels)
20
+ end
22
21
 
23
- categories.reduce({}) { |group, prefix| group.merge prefix => [] }
24
- .merge("Unknown" => [])
25
- .then { |groups| group_by_category categories, groups }
26
- .each_value { |commits| commits.sort_by!(&:subject) }
27
- .values
28
- .flatten
22
+ def call min: Collector::MIN, max: Collector::MAX
23
+ collect(min, max).each_value { |commits| commits.sort_by!(&:subject) }
24
+ .values
25
+ .flatten
29
26
  end
30
27
 
31
28
  private
32
29
 
33
- attr_reader :collector, :expression
34
-
35
- def group_by_category categories, groups
36
- collector.call.value_or(Core::EMPTY_ARRAY).each.with_object groups do |commit, collection|
37
- category = commit.subject[subject_pattern(categories)]
38
- key = collection.key?(category) ? category : "Unknown"
39
- collection[key] << commit
40
- end
30
+ attr_reader :collector, :labels, :pattern
31
+
32
+ def collect min, max
33
+ collector.call(min:, max:)
34
+ .value_or(Core::EMPTY_ARRAY)
35
+ .each
36
+ .with_object categories do |commit, collection|
37
+ category = commit.subject[pattern]
38
+ key = collection.key?(category) ? category : "Unknown"
39
+ collection[key] << commit
40
+ end
41
41
  end
42
42
 
43
- def subject_pattern categories
44
- categories.empty? ? expression.new(//) : expression.union(categories)
43
+ def categories
44
+ labels.reduce({}) { |group, prefix| group.merge prefix => [] }
45
+ .merge! "Unknown" => []
45
46
  end
46
47
  end
47
48
  end
@@ -1,16 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "dry/monads"
4
+
3
5
  module Milestoner
4
6
  module Commits
5
- # Collects commits since last tag or all commits if untagged.
7
+ # Collects commits since last tag, a specific range, or all commits if untagged.
6
8
  class Collector
9
+ include Dry::Monads[:result]
7
10
  include Import[:git]
8
11
 
9
- def call = git.tagged? ? latest : all
12
+ MIN = :last
13
+ MAX = :HEAD
14
+
15
+ def call(min: MIN, max: MAX) = git.tagged? ? slice(min, max) : all
10
16
 
11
17
  private
12
18
 
13
- def latest = git.tag_last.bind { |tag| git.commits "#{tag}..HEAD" }
19
+ def slice min, max
20
+ case [min, max]
21
+ in MIN, MAX then git.tag_last.bind { |tag| git.commits "#{tag}..#{max}" }
22
+ in String, String then git.commits "#{min}..#{max}"
23
+ else Failure "Invalid minimum and/or maximum range: #{min}..#{max}."
24
+ end
25
+ end
14
26
 
15
27
  def all = git.commits
16
28
  end
@@ -29,9 +29,9 @@ module Milestoner
29
29
  super(**)
30
30
  end
31
31
 
32
- def call
33
- categorizer.call
34
- .map { |commit| record_for commit }
32
+ def call min: Collector::MIN, max: Collector::MAX
33
+ categorizer.call(min:, max:)
34
+ .map { |commit| model.for(commit, **build_attributes(commit)) }
35
35
  .then { |commits| Success commits }
36
36
  end
37
37
 
@@ -39,8 +39,6 @@ module Milestoner
39
39
 
40
40
  attr_reader :categorizer, :model
41
41
 
42
- def record_for(commit) = model.for(commit, **build_attributes(commit))
43
-
44
42
  def build_attributes commit
45
43
  infused_keys.each.with_object({}) do |command, attributes|
46
44
  attributes[command] = __send__(command).call commit
@@ -26,6 +26,7 @@ module Milestoner
26
26
  required(:generator_label).filled :string
27
27
  required(:generator_uri).filled :string
28
28
  required(:generator_version).filled Etcher::Types::Version
29
+ required(:loaded_at).filled :time
29
30
  required(:profile_domain).filled :string
30
31
  required(:profile_uri).filled :string
31
32
  required(:project_author).filled :string
@@ -16,6 +16,7 @@ module Milestoner
16
16
  :generator_label,
17
17
  :generator_uri,
18
18
  :generator_version,
19
+ :loaded_at,
19
20
  :profile_domain,
20
21
  :profile_uri,
21
22
  :project_author,
@@ -56,6 +56,7 @@ module Milestoner
56
56
  .add_transformer(Configuration::Transformers::URI::Profile)
57
57
  .add_transformer(Configuration::Transformers::URI::Review)
58
58
  .add_transformer(Configuration::Transformers::URI::Tracker)
59
+ .add_transformer(Etcher::Transformers::Time.new)
59
60
  end
60
61
 
61
62
  register(:specification) { self[:spec_loader].call "#{__dir__}/../../milestoner.gemspec" }
@@ -14,7 +14,7 @@ module Milestoner
14
14
  using Refinements::Array
15
15
 
16
16
  def initialize(**)
17
- super(**)
17
+ super
18
18
  @prefixes = configuration.commit_categories.pluck :label
19
19
  @authored_at = Time.at(value.authored_at.to_i).utc
20
20
  end
data/milestoner.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "milestoner"
5
- spec.version = "17.7.0"
5
+ spec.version = "17.8.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://alchemists.io/projects/milestoner"
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "core", "~> 1.3"
31
31
  spec.add_dependency "dry-monads", "~> 1.6"
32
32
  spec.add_dependency "dry-schema", "~> 1.13"
33
- spec.add_dependency "etcher", "~> 1.3"
33
+ spec.add_dependency "etcher", "~> 1.5"
34
34
  spec.add_dependency "gitt", "~> 3.2"
35
35
  spec.add_dependency "hanami-view", "~> 2.1"
36
36
  spec.add_dependency "infusible", "~> 3.5"
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milestoner
3
3
  version: !ruby/object:Gem::Version
4
- version: 17.7.0
4
+ version: 17.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -35,7 +35,7 @@ cert_chain:
35
35
  3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
36
36
  gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
37
37
  -----END CERTIFICATE-----
38
- date: 2024-05-16 00:00:00.000000000 Z
38
+ date: 2024-05-25 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: asciidoctor
@@ -141,14 +141,14 @@ dependencies:
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '1.3'
144
+ version: '1.5'
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '1.3'
151
+ version: '1.5'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: gitt
154
154
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file