Class: Semverve::Configuration

Inherits:
Object
  • Object
show all
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.

Returns:

  • (Array<Symbol>)
VersionChecks.names(extra_checks: Adapters.checks).freeze
DEFAULT_VERSION_CHECKS =

Default version-maintenance surfaces for package projects.

Returns:

  • (Array<Symbol>)
VersionChecks.default_names.freeze
VALID_RELEASE_CHECKS =

Release-readiness surfaces supported by release check tasks.

Returns:

  • (Array<Symbol>)
[:rubygems].freeze
DEFAULT_VERSION_CODE_REFERENCE_PATTERN =

Default Ruby pattern for code version literals that are safe to rewrite.

Returns:

  • (Regexp)
VersionCodeReferences::RUBY_ASSIGNMENT_PATTERN

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSemverve::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

#adapterSymbol, ...

Framework adapter used to apply project defaults.

Returns:

  • (Symbol, String, nil)


42
43
44
# File 'lib/semverve/configuration.rb', line 42

def adapter
  @adapter
end

#bundle_lockBoolean

Whether increments should run bundle lock after writing a version.

Returns:

  • (Boolean)


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.

Returns:

  • (#call)


54
55
56
# File 'lib/semverve/configuration.rb', line 54

def command_runner
  @command_runner
end

#formatSymbol, String

Version-file format to read, replace, or generate.

Returns:

  • (Symbol, String)


60
61
62
# File 'lib/semverve/configuration.rb', line 60

def format
  @format
end

#gem_nameString?

Explicit gem name to use instead of inferring one from the project.

Returns:

  • (String, nil)


66
67
68
# File 'lib/semverve/configuration.rb', line 66

def gem_name
  @gem_name
end

#module_nameString?

Explicit Ruby module name to use in generated version files.

Returns:

  • (String, nil)


72
73
74
# File 'lib/semverve/configuration.rb', line 72

def module_name
  @module_name
end

#release_checksArray<Symbol, String>

Release-readiness surfaces run by the release check task.

Returns:

  • (Array<Symbol, String>)


86
87
88
# File 'lib/semverve/configuration.rb', line 86

def release_checks
  @release_checks
end

#rootString?

Project root used when inferring metadata and expanding paths.

Returns:

  • (String, nil)


92
93
94
# File 'lib/semverve/configuration.rb', line 92

def root
  @root
end

#rubygems_hostString

RubyGems-compatible host used for published-version checks.

Returns:

  • (String)


98
99
100
# File 'lib/semverve/configuration.rb', line 98

def rubygems_host
  @rubygems_host
end

#version_checksArray<Symbol, String>

Version-maintenance surfaces run by the umbrella check and fix tasks.

Returns:

  • (Array<Symbol, String>)


128
129
130
# File 'lib/semverve/configuration.rb', line 128

def version_checks
  @version_checks
end

#version_code_reference_filesRake::FileList

Code files to scan for safe version literals.

Returns:

  • (Rake::FileList)


110
111
112
# File 'lib/semverve/configuration.rb', line 110

def version_code_reference_files
  @version_code_reference_files
end

#version_code_reference_patternRegexp

Pattern used to find safe version literals in code files.

Returns:

  • (Regexp)


116
117
118
# File 'lib/semverve/configuration.rb', line 116

def version_code_reference_pattern
  @version_code_reference_pattern
end

#version_doc_reference_filesRake::FileList

Documentation files to scan for version references.

Returns:

  • (Rake::FileList)


122
123
124
# File 'lib/semverve/configuration.rb', line 122

def version_doc_reference_files
  @version_doc_reference_files
end

#version_fileString?

Explicit version-file path relative to the project root.

Returns:

  • (String, nil)


104
105
106
# File 'lib/semverve/configuration.rb', line 104

def version_file
  @version_file
end

#version_match_modeSymbol, String

Version matching mode for reference and code-literal checks.

Returns:

  • (Symbol, String)


134
135
136
# File 'lib/semverve/configuration.rb', line 134

def version_match_mode
  @version_match_mode
end

Instance Method Details

#expanded_rootString

Absolute project root.

Returns:

  • (String)


291
292
293
# File 'lib/semverve/configuration.rb', line 291

def expanded_root
  File.expand_path(resolved_value(:root) || Dir.pwd)
end

#infer_package_name?Boolean

Whether package names should be inferred from project files.

Returns:

  • (Boolean)


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.

Parameters:

  • checks (Array<Symbol, String>)

Returns:

  • (Array<Symbol>)

Raises:



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.

Parameters:

  • checks (Array<Symbol, String>)

Returns:

  • (Array<Symbol>)


354
355
356
# File 'lib/semverve/configuration.rb', line 354

def normalize_version_checks(checks)
  VersionChecks.normalize(checks, extra_checks: Adapters.checks)
end

#normalized_formatSymbol

Configured format normalized for lookup.

Returns:

  • (Symbol)


299
300
301
# File 'lib/semverve/configuration.rb', line 299

def normalized_format
  resolved_value(:format).to_sym
end

#normalized_release_checksArray<Symbol>

Configured release checks normalized for lookup.

Returns:

  • (Array<Symbol>)


307
308
309
# File 'lib/semverve/configuration.rb', line 307

def normalized_release_checks
  normalize_release_checks(release_checks)
end

#normalized_version_checksArray<Symbol>

Configured version checks normalized for lookup.

Returns:

  • (Array<Symbol>)


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_modeSymbol

Configured version matching mode normalized for lookup.

Returns:

  • (Symbol)


344
345
346
# File 'lib/semverve/configuration.rb', line 344

def normalized_version_match_mode
  version_match_mode.to_sym
end

#presetSymbol, ...

Framework preset used to apply project defaults.

Returns:

  • (Symbol, String, nil)


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.

Parameters:

  • preset (Symbol, String, nil)

Returns:

  • (Symbol, nil)


232
233
234
# File 'lib/semverve/configuration.rb', line 232

def preset=(preset)
  self.adapter = preset
end

#resolvedSemverve::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: expanded_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.

Parameters:

  • attribute (Symbol)

Returns:

  • (Object)


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.

Parameters:

  • pattern (Object)


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