Class: Semverve::Configuration
- Inherits:
-
Object
- Object
- Semverve::Configuration
- Defined in:
- lib/semverve/configuration.rb
Overview
Mutable configuration used before Semverve resolves project defaults.
Constant Summary collapse
- VALID_VERSION_CHECKS =
Version-maintenance surfaces supported by umbrella check and fix tasks.
[:doc_references, :code_references, :metadata].freeze
- VALID_RELEASE_CHECKS =
Release-readiness surfaces supported by release check tasks.
[:rubygems].freeze
- DEFAULT_VERSION_CODE_REFERENCE_PATTERN =
Default Ruby pattern for code version literals that are safe to rewrite.
/^\s*(?:(?:[A-Z]\w*::)*(?:[A-Z]\w*VERSION[A-Z0-9_]*|VERSION)|(?:[a-z_]\w*|self)\.version)\s*=\s*(?<quote>["'])(?<version>\d+\.\d+\.\d+)\k<quote>/
Instance Attribute Summary collapse
-
#bundle_lock ⇒ Boolean
Whether increments should run
bundle lockafter writing a version. -
#command_runner ⇒ #call
Callable used to run shell commands such as
bundle lock. -
#format ⇒ Symbol, String
Version-file format to read, replace, or generate.
-
#gem_name ⇒ String?
Explicit gem name to use instead of inferring one from the project.
-
#module_name ⇒ String?
Explicit Ruby module name to use in generated version files.
-
#preset ⇒ Symbol, ...
Framework preset used to apply project defaults.
-
#release_checks ⇒ Array<Symbol, String>
Release-readiness surfaces run by the release check task.
-
#root ⇒ String?
Project root used when inferring metadata and expanding paths.
-
#rubygems_host ⇒ String
RubyGems-compatible host used for published-version checks.
-
#version_checks ⇒ Array<Symbol, String>
Version-maintenance surfaces run by the umbrella check and fix tasks.
-
#version_code_reference_files ⇒ Rake::FileList
Code files to scan for safe version literals.
-
#version_code_reference_pattern ⇒ Regexp
Pattern used to find safe version literals in code files.
-
#version_doc_reference_files ⇒ Rake::FileList
Documentation files to scan for version references.
-
#version_file ⇒ String?
Explicit version-file path relative to the project root.
-
#version_reference_mode ⇒ Symbol, String
Version-reference comparison mode.
Instance Method Summary collapse
-
#expanded_root ⇒ String
Absolute project root.
-
#initialize ⇒ Semverve::Configuration
constructor
Initializes configuration with Semverve's default settings.
-
#normalize_release_checks(checks) ⇒ Array<Symbol>
Normalizes and validates release checks.
-
#normalize_version_checks(checks) ⇒ Array<Symbol>
Normalizes and validates umbrella version checks.
-
#normalized_format ⇒ Symbol
Configured format normalized for lookup.
-
#normalized_release_checks ⇒ Array<Symbol>
Configured release checks normalized for lookup.
-
#normalized_version_checks ⇒ Array<Symbol>
Configured version checks normalized for lookup.
-
#normalized_version_reference_mode ⇒ Symbol
Configured version-reference mode normalized for lookup.
-
#resolved ⇒ Semverve::ResolvedConfiguration
Resolves explicit configuration and inferred project metadata.
-
#resolved_value(attribute) ⇒ Object
Resolved value for a configurable attribute before metadata inference.
-
#validate_version_code_reference_pattern(pattern) ⇒ void
Validates the configured code reference pattern.
Constructor Details
#initialize ⇒ Semverve::Configuration
Initializes configuration with Semverve's default settings.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/semverve/configuration.rb', line 125 def initialize @explicit_attributes = [] @bundle_lock = false @command_runner = ->(command) { system(command) } @format = :module @preset = nil @rubygems_host = "https://rubygems.org" @version_code_reference_files = Rake::FileList[] self.version_code_reference_pattern = DEFAULT_VERSION_CODE_REFERENCE_PATTERN @version_doc_reference_files = Rake::FileList["README*", "**/README*"].exclude( ".git/**/*", "coverage/**/*", "tmp/**/*", "vendor/**/*" ) @version_reference_mode = :older self.release_checks = [] self.version_checks = VALID_VERSION_CHECKS end |
Instance Attribute Details
#bundle_lock ⇒ Boolean
Whether increments should run bundle lock after writing a version.
35 36 37 |
# File 'lib/semverve/configuration.rb', line 35 def bundle_lock @bundle_lock end |
#command_runner ⇒ #call
Callable used to run shell commands such as bundle lock.
41 42 43 |
# File 'lib/semverve/configuration.rb', line 41 def command_runner @command_runner end |
#format ⇒ Symbol, String
Version-file format to read, replace, or generate.
47 48 49 |
# File 'lib/semverve/configuration.rb', line 47 def format @format end |
#gem_name ⇒ String?
Explicit gem name to use instead of inferring one from the project.
53 54 55 |
# File 'lib/semverve/configuration.rb', line 53 def gem_name @gem_name end |
#module_name ⇒ String?
Explicit Ruby module name to use in generated version files.
59 60 61 |
# File 'lib/semverve/configuration.rb', line 59 def module_name @module_name end |
#preset ⇒ Symbol, ...
Framework preset used to apply project defaults.
65 66 67 |
# File 'lib/semverve/configuration.rb', line 65 def preset @preset end |
#release_checks ⇒ Array<Symbol, String>
Release-readiness surfaces run by the release check task.
71 72 73 |
# File 'lib/semverve/configuration.rb', line 71 def release_checks @release_checks end |
#root ⇒ String?
Project root used when inferring metadata and expanding paths.
77 78 79 |
# File 'lib/semverve/configuration.rb', line 77 def root @root end |
#rubygems_host ⇒ String
RubyGems-compatible host used for published-version checks.
83 84 85 |
# File 'lib/semverve/configuration.rb', line 83 def rubygems_host @rubygems_host end |
#version_checks ⇒ Array<Symbol, String>
Version-maintenance surfaces run by the umbrella check and fix tasks.
113 114 115 |
# File 'lib/semverve/configuration.rb', line 113 def version_checks @version_checks end |
#version_code_reference_files ⇒ Rake::FileList
Code files to scan for safe version literals.
95 96 97 |
# File 'lib/semverve/configuration.rb', line 95 def version_code_reference_files @version_code_reference_files end |
#version_code_reference_pattern ⇒ Regexp
Pattern used to find safe version literals in code files.
101 102 103 |
# File 'lib/semverve/configuration.rb', line 101 def version_code_reference_pattern @version_code_reference_pattern end |
#version_doc_reference_files ⇒ Rake::FileList
Documentation files to scan for version references.
107 108 109 |
# File 'lib/semverve/configuration.rb', line 107 def version_doc_reference_files @version_doc_reference_files end |
#version_file ⇒ String?
Explicit version-file path relative to the project root.
89 90 91 |
# File 'lib/semverve/configuration.rb', line 89 def version_file @version_file end |
#version_reference_mode ⇒ Symbol, String
Version-reference comparison mode.
119 120 121 |
# File 'lib/semverve/configuration.rb', line 119 def version_reference_mode @version_reference_mode end |
Instance Method Details
#expanded_root ⇒ String
Absolute project root.
266 267 268 |
# File 'lib/semverve/configuration.rb', line 266 def File.(resolved_value(:root) || Dir.pwd) end |
#normalize_release_checks(checks) ⇒ Array<Symbol>
Normalizes and validates release checks.
339 340 341 342 343 344 345 346 347 |
# File 'lib/semverve/configuration.rb', line 339 def normalize_release_checks(checks) normalized_checks = Array(checks).map do |check| check.respond_to?(:to_sym) ? check.to_sym : check end return normalized_checks if normalized_checks.all? { |check| VALID_RELEASE_CHECKS.include?(check) } invalid_checks = normalized_checks.reject { |check| VALID_RELEASE_CHECKS.include?(check) } raise Error, "Unknown release check #{invalid_checks.map(&:inspect).join(", ")}. Use :rubygems." end |
#normalize_version_checks(checks) ⇒ Array<Symbol>
Normalizes and validates umbrella version checks.
321 322 323 324 325 326 327 328 329 330 331 |
# File 'lib/semverve/configuration.rb', line 321 def normalize_version_checks(checks) normalized_checks = Array(checks).map do |check| check.respond_to?(:to_sym) ? check.to_sym : check end return normalized_checks if normalized_checks.all? { |check| VALID_VERSION_CHECKS.include?(check) } invalid_checks = normalized_checks.reject { |check| VALID_VERSION_CHECKS.include?(check) } valid_check_names = VALID_VERSION_CHECKS.map(&:inspect) valid_checks = "#{valid_check_names[0...-1].join(", ")}, or #{valid_check_names.last}" raise Error, "Unknown version check #{invalid_checks.map(&:inspect).join(", ")}. Use #{valid_checks}." end |
#normalized_format ⇒ Symbol
Configured format normalized for lookup.
274 275 276 |
# File 'lib/semverve/configuration.rb', line 274 def normalized_format resolved_value(:format).to_sym end |
#normalized_release_checks ⇒ Array<Symbol>
Configured release checks normalized for lookup.
282 283 284 |
# File 'lib/semverve/configuration.rb', line 282 def normalized_release_checks normalize_release_checks(release_checks) end |
#normalized_version_checks ⇒ Array<Symbol>
Configured version checks normalized for lookup.
303 304 305 |
# File 'lib/semverve/configuration.rb', line 303 def normalized_version_checks normalize_version_checks(version_checks) end |
#normalized_version_reference_mode ⇒ Symbol
Configured version-reference mode normalized for lookup.
311 312 313 |
# File 'lib/semverve/configuration.rb', line 311 def normalized_version_reference_mode version_reference_mode.to_sym end |
#resolved ⇒ Semverve::ResolvedConfiguration
Resolves explicit configuration and inferred project metadata.
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/semverve/configuration.rb', line 149 def resolved = ProjectMetadata.new(self) ResolvedConfiguration.new( bundle_lock: bundle_lock, command_runner: command_runner, format: normalized_format, gem_name: .gem_name, module_name: .module_name, release_checks: normalized_release_checks, root: , rubygems_host: rubygems_host, version_file: .version_file, version_checks: normalized_version_checks, version_code_reference_files: version_code_reference_files, version_code_reference_pattern: version_code_reference_pattern, version_doc_reference_files: version_doc_reference_files, version_reference_mode: normalized_version_reference_mode ) end |
#resolved_value(attribute) ⇒ Object
Resolved value for a configurable attribute before metadata inference.
292 293 294 295 296 297 |
# File 'lib/semverve/configuration.rb', line 292 def resolved_value(attribute) return public_send(attribute) if explicit_attribute?(attribute) return preset_defaults[attribute] if preset_defaults.key?(attribute) public_send(attribute) end |
#validate_version_code_reference_pattern(pattern) ⇒ void
This method returns an undefined value.
Validates the configured code reference pattern.
355 356 357 358 359 360 361 362 363 |
# File 'lib/semverve/configuration.rb', line 355 def validate_version_code_reference_pattern(pattern) unless pattern.is_a?(Regexp) raise Error, "version_code_reference_pattern must be a Regexp." end unless pattern.named_captures.key?("version") raise Error, "version_code_reference_pattern must include a named capture called version." end end |