Class: SvgConform::QualityMetrics::Configuration
- Inherits:
-
Object
- Object
- SvgConform::QualityMetrics::Configuration
- Defined in:
- lib/svg_conform/quality_metrics/configuration.rb
Overview
Immutable, type-safe configuration for SVG quality metrics.
Loads from YAML and provides typed access to all configuration values. Configuration is completely encapsulated - no raw hash exposure.
Defined Under Namespace
Classes: ComplexityConfig, ContentHealthConfig, QualityFormula, QualityLevel, SeverityLevel
Constant Summary collapse
- DEFAULT_CONFIG_PATH =
File.join(__dir__, "../../../config/quality_metrics.yml").freeze
Class Method Summary collapse
-
.default ⇒ Configuration
Default configuration from bundled YAML.
- .from_hash(hash) ⇒ Configuration
- .from_yaml(path) ⇒ Configuration
Instance Method Summary collapse
- #complexity ⇒ ComplexityConfig
- #content_health ⇒ ContentHealthConfig
- #feature_patterns ⇒ Hash<Symbol, Regexp>
-
#initialize(hash) ⇒ Configuration
constructor
A new instance of Configuration.
-
#merge(other) ⇒ Configuration
Merged configuration.
- #non_remediable?(violation_type) ⇒ Boolean
-
#non_remediable_types ⇒ Set<Symbol>
Non-remediable violation types.
- #quality_formula ⇒ QualityFormula
-
#quality_level_for(score) ⇒ Symbol
Get quality level name for a score.
- #quality_levels ⇒ Hash<Symbol, QualityLevel>
- #remediable?(violation_type) ⇒ Boolean
-
#remediable_types ⇒ Set<Symbol>
Remediable violation types.
-
#severity_for(violation_type) ⇒ Symbol?
Get severity level for a violation type.
- #severity_levels ⇒ Hash<Symbol, SeverityLevel>
-
#severity_max_penalty(level) ⇒ Integer
Get max penalty for a severity level.
-
#severity_weight(level) ⇒ Integer
Get weight for a severity level.
-
#size_categories ⇒ Hash<Symbol, Integer>
Category to threshold in KB.
- #size_category_for(size_kb) ⇒ Symbol
Constructor Details
#initialize(hash) ⇒ Configuration
Returns a new instance of Configuration.
54 55 56 57 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 54 def initialize(hash) @hash = hash.freeze freeze end |
Class Method Details
.default ⇒ Configuration
Returns Default configuration from bundled YAML.
31 32 33 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 31 def default from_yaml(DEFAULT_CONFIG_PATH) end |
.from_hash(hash) ⇒ Configuration
49 50 51 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 49 def from_hash(hash) new(hash) end |
.from_yaml(path) ⇒ Configuration
37 38 39 40 41 42 43 44 45 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 37 def from_yaml(path) unless File.exist?(path) raise ArgumentError, "Configuration file not found: #{path}" end hash = YAML.safe_load_file(path, permitted_classes: [Symbol], permitted_symbols: [], aliases: true) new(hash) end |
Instance Method Details
#complexity ⇒ ComplexityConfig
182 183 184 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 182 def complexity @complexity ||= ComplexityConfig.new(@hash["complexity"] || {}) end |
#content_health ⇒ ContentHealthConfig
200 201 202 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 200 def content_health @content_health ||= ContentHealthConfig.new(@hash["content_health"] || {}) end |
#feature_patterns ⇒ Hash<Symbol, Regexp>
191 192 193 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 191 def feature_patterns @feature_patterns ||= compile_patterns(@hash["feature_patterns"] || {}) end |
#merge(other) ⇒ Configuration
Returns Merged configuration.
61 62 63 64 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 61 def merge(other) merged = deep_merge(@hash, other.instance_variable_get(:@hash)) Configuration.from_hash(merged) end |
#non_remediable?(violation_type) ⇒ Boolean
125 126 127 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 125 def non_remediable?(violation_type) non_remediable_types.include?(violation_type) end |
#non_remediable_types ⇒ Set<Symbol>
Returns Non-remediable violation types.
111 112 113 114 115 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 111 def non_remediable_types @non_remediable_types ||= Set.new( (@hash["non_remediable_types"] || []).map(&:to_sym), ) end |
#quality_formula ⇒ QualityFormula
134 135 136 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 134 def quality_formula @quality_formula ||= QualityFormula.new(@hash["quality_formula"] || {}) end |
#quality_level_for(score) ⇒ Symbol
Get quality level name for a score
150 151 152 153 154 155 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 150 def quality_level_for(score) quality_levels.sort_by { |_, v| v.min_score }.reverse_each do |name, level| return name if score >= level.min_score end :critical end |
#quality_levels ⇒ Hash<Symbol, QualityLevel>
143 144 145 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 143 def quality_levels @quality_levels ||= build_quality_levels end |
#remediable?(violation_type) ⇒ Boolean
119 120 121 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 119 def remediable?(violation_type) remediable_types.include?(violation_type) end |
#remediable_types ⇒ Set<Symbol>
Returns Remediable violation types.
104 105 106 107 108 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 104 def remediable_types @remediable_types ||= Set.new( (@hash["remediable_types"] || []).map(&:to_sym), ) end |
#severity_for(violation_type) ⇒ Symbol?
Get severity level for a violation type
78 79 80 81 82 83 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 78 def severity_for(violation_type) severity_levels.each do |name, level| return name if level.violation_types.include?(violation_type) end nil end |
#severity_levels ⇒ Hash<Symbol, SeverityLevel>
71 72 73 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 71 def severity_levels @severity_levels ||= build_severity_levels end |
#severity_max_penalty(level) ⇒ Integer
Get max penalty for a severity level
95 96 97 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 95 def severity_max_penalty(level) severity_levels[level]&.max_penalty || 0 end |
#severity_weight(level) ⇒ Integer
Get weight for a severity level
88 89 90 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 88 def severity_weight(level) severity_levels[level]&.default_weight || 0 end |
#size_categories ⇒ Hash<Symbol, Integer>
Returns Category to threshold in KB.
162 163 164 165 166 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 162 def size_categories @size_categories ||= @hash["size_categories"].to_h do |name, value| [name.to_sym, value.to_i] end end |
#size_category_for(size_kb) ⇒ Symbol
170 171 172 173 174 175 |
# File 'lib/svg_conform/quality_metrics/configuration.rb', line 170 def size_category_for(size_kb) size_categories.sort_by { |_, v| v }.reverse_each do |name, threshold| return name if size_kb >= threshold end :huge end |