class ArchSpec::Definition
The result of evaluating an Archspec.rb file: the project settings, declared components, and rules. ArchSpec::DSL::Context is mixed into an instance to provide the DSL, and the analyzer and evaluator read it to run the checks. Build one with ArchSpec.define.
Constants
- DEFAULT_IGNORE_PATTERNS
- DEFAULT_SOURCE_PATTERNS
Attributes
Producers whose facts a check refreshes on its own when they are missing or stale.
Public Class Methods
Source
# File lib/archspec/definition.rb, line 27 def initialize(name = nil) @name = name @root_path = '.' @todo_path = nil @facts_path = nil @base_dir = nil @source_patterns = [] @ignore_patterns = DEFAULT_IGNORE_PATTERNS.dup @user_ignore_patterns = [] @component_specs = {} @rules = [] @producers = {} @auto_producers = [] end
Public Instance Methods
# File lib/archspec/definition.rb, line 92 def absolute_root(base = base_dir || Dir.pwd) File.expand_path(root_path, base) end
Source
# File lib/archspec/definition.rb, line 73 def add_component(spec) if component_specs.key?(spec.name) component_specs.fetch(spec.name).merge!(spec) else component_specs[spec.name] = spec end end
# File lib/archspec/definition.rb, line 67 def add_ignore_patterns(patterns) patterns = Array(patterns).flatten.compact.map(&:to_s) @user_ignore_patterns |= patterns @ignore_patterns |= patterns end
# File lib/archspec/definition.rb, line 57 def add_producer(name, require: nil, auto: false) @producers[name.to_s] = require&.to_s @auto_producers |= [name.to_s] if auto @facts_path ||= 'archspec_facts' end
Source
# File lib/archspec/definition.rb, line 85 def add_rule(rule) rules << rule end
# File lib/archspec/definition.rb, line 63 def add_source_patterns(patterns) @source_patterns |= Array(patterns).flatten.compact.map(&:to_s) end
Source
# File lib/archspec/definition.rb, line 96 def analysis_patterns patterns = source_patterns.empty? ? DEFAULT_SOURCE_PATTERNS.dup : source_patterns.dup patterns | component_specs.values.flat_map(&:file_patterns) end
# File lib/archspec/definition.rb, line 105 def claims_default_ignored?(pattern) directory = pattern.sub(%r{\A\./}, '')[/\A[^*?\[{]*/].sub(%r{[^/]*\z}, '') (DEFAULT_IGNORE_PATTERNS - user_ignore_patterns).any? do |ignore| File.fnmatch?(ignore, "#{directory}_", File::FNM_PATHNAME | File::FNM_DOTMATCH) end end
Whether a component file pattern explicitly reaches into a directory that only a default ignore excludes: its literal leading directories, before any glob character, sit inside that ignore. +vendor/engines//*/*.rb+ does; a broad +**/*.rb+ does not. Ignores the user declared always win.
Source
# File lib/archspec/definition.rb, line 81 def component?(name) component_specs.key?(name.to_sym) end
Source
# File lib/archspec/definition.rb, line 49 def declared_producers @producers.keys end
Producers named by reflect, whose documents a check requires.
Source
# File lib/archspec/definition.rb, line 44 def producers @producers.empty? ? { 'rails' => nil } : @producers end
Producer names mapped to the file that registers them, or nil for a built-in producer. Declaring facts without producers selects Rails.