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.
VersionChecks.names(extra_checks: Adapters.checks).freeze
- DEFAULT_VERSION_CHECKS =
Default version-maintenance surfaces for package projects.
VersionChecks.default_names.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.
VersionCodeReferences::RUBY_ASSIGNMENT_PATTERN
Instance Attribute Summary collapse
-
#adapter ⇒ Symbol, ...
Framework adapter used to apply project defaults.
-
#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.
-
#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_match_mode ⇒ Symbol, String
Version matching mode for reference and code-literal checks.
Instance Method Summary collapse
-
#expanded_root ⇒ String
Absolute project root.
-
#infer_package_name? ⇒ Boolean
Whether package names should be inferred from project files.
-
#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_match_mode ⇒ Symbol
Configured version matching mode normalized for lookup.
-
#preset ⇒ Symbol, ...
Framework preset used to apply project defaults.
-
#preset=(preset) ⇒ Symbol?
Sets the framework preset used for project defaults.
-
#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.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/semverve/configuration.rb', line 140 def initialize @explicit_attributes = [] @bundle_lock = false @command_runner = ->(command) { system(command) } @format = :module @adapter = 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_match_mode = :older self.release_checks = [] @version_checks = DEFAULT_VERSION_CHECKS end |
Instance Attribute Details
#adapter ⇒ Symbol, ...
Framework adapter used to apply project defaults.
42 43 44 |
# File 'lib/semverve/configuration.rb', line 42 def adapter @adapter end |
#bundle_lock ⇒ Boolean
Whether increments should run bundle lock after writing a version.
48 49 50 |
# File 'lib/semverve/configuration.rb', line 48 def bundle_lock @bundle_lock end |
#command_runner ⇒ #call
Callable used to run shell commands such as bundle lock.
54 55 56 |
# File 'lib/semverve/configuration.rb', line 54 def command_runner @command_runner end |
#format ⇒ Symbol, String
Version-file format to read, replace, or generate.
60 61 62 |
# File 'lib/semverve/configuration.rb', line 60 def format @format end |
#gem_name ⇒ String?
Explicit gem name to use instead of inferring one from the project.
66 67 68 |
# File 'lib/semverve/configuration.rb', line 66 def gem_name @gem_name end |
#module_name ⇒ String?
Explicit Ruby module name to use in generated version files.
72 73 74 |
# File 'lib/semverve/configuration.rb', line 72 def module_name @module_name end |
#release_checks ⇒ Array<Symbol, String>
Release-readiness surfaces run by the release check task.
86 87 88 |
# File 'lib/semverve/configuration.rb', line 86 def release_checks @release_checks end |
#root ⇒ String?
Project root used when inferring metadata and expanding paths.
92 93 94 |
# File 'lib/semverve/configuration.rb', line 92 def root @root end |
#rubygems_host ⇒ String
RubyGems-compatible host used for published-version checks.
98 99 100 |
# File 'lib/semverve/configuration.rb', line 98 def rubygems_host @rubygems_host end |
#version_checks ⇒ Array<Symbol, String>
Version-maintenance surfaces run by the umbrella check and fix tasks.
128 129 130 |
# File 'lib/semverve/configuration.rb', line 128 def version_checks @version_checks end |
#version_code_reference_files ⇒ Rake::FileList
Code files to scan for safe version literals.
110 111 112 |
# File 'lib/semverve/configuration.rb', line 110 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.
116 117 118 |
# File 'lib/semverve/configuration.rb', line 116 def version_code_reference_pattern @version_code_reference_pattern end |
#version_doc_reference_files ⇒ Rake::FileList
Documentation files to scan for version references.
122 123 124 |
# File 'lib/semverve/configuration.rb', line 122 def version_doc_reference_files @version_doc_reference_files end |
#version_file ⇒ String?
Explicit version-file path relative to the project root.
104 105 106 |
# File 'lib/semverve/configuration.rb', line 104 def version_file @version_file end |
#version_match_mode ⇒ Symbol, String
Version matching mode for reference and code-literal checks.
134 135 136 |
# File 'lib/semverve/configuration.rb', line 134 def version_match_mode @version_match_mode end |
Instance Method Details
#expanded_root ⇒ String
Absolute project root.
291 292 293 |
# File 'lib/semverve/configuration.rb', line 291 def File.(resolved_value(:root) || Dir.pwd) end |
#infer_package_name? ⇒ Boolean
Whether package names should be inferred from project files.
328 329 330 |
# File 'lib/semverve/configuration.rb', line 328 def infer_package_name? Adapters.infer_package_name?(adapter) end |
#normalize_release_checks(checks) ⇒ Array<Symbol>
Normalizes and validates release checks.
364 365 366 367 368 369 370 371 372 |
# File 'lib/semverve/configuration.rb', line 364 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.
354 355 356 |
# File 'lib/semverve/configuration.rb', line 354 def normalize_version_checks(checks) VersionChecks.normalize(checks, extra_checks: Adapters.checks) end |
#normalized_format ⇒ Symbol
Configured format normalized for lookup.
299 300 301 |
# File 'lib/semverve/configuration.rb', line 299 def normalized_format resolved_value(:format).to_sym end |
#normalized_release_checks ⇒ Array<Symbol>
Configured release checks normalized for lookup.
307 308 309 |
# File 'lib/semverve/configuration.rb', line 307 def normalized_release_checks normalize_release_checks(release_checks) end |
#normalized_version_checks ⇒ Array<Symbol>
Configured version checks normalized for lookup.
336 337 338 |
# File 'lib/semverve/configuration.rb', line 336 def normalized_version_checks normalize_version_checks(resolved_value(:version_checks)) end |
#normalized_version_match_mode ⇒ Symbol
Configured version matching mode normalized for lookup.
344 345 346 |
# File 'lib/semverve/configuration.rb', line 344 def normalized_version_match_mode version_match_mode.to_sym end |
#preset ⇒ Symbol, ...
Framework preset used to apply project defaults.
78 79 80 |
# File 'lib/semverve/configuration.rb', line 78 def preset adapter end |
#preset=(preset) ⇒ Symbol?
Sets the framework preset used for project defaults.
232 233 234 |
# File 'lib/semverve/configuration.rb', line 232 def preset=(preset) self.adapter = preset end |
#resolved ⇒ Semverve::ResolvedConfiguration
Resolves explicit configuration and inferred project metadata.
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/semverve/configuration.rb', line 164 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_match_mode: normalized_version_match_mode ) end |
#resolved_value(attribute) ⇒ Object
Resolved value for a configurable attribute before metadata inference.
317 318 319 320 321 322 |
# File 'lib/semverve/configuration.rb', line 317 def resolved_value(attribute) return public_send(attribute) if explicit_attribute?(attribute) return adapter_defaults[attribute] if adapter_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.
380 381 382 383 384 385 386 387 388 |
# File 'lib/semverve/configuration.rb', line 380 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 |