Class: Ace::Core::Molecules::FrontmatterFreePolicy

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/core/molecules/frontmatter_free_policy.rb

Overview

Shared frontmatter-free policy for path matching and config defaults.

Constant Summary collapse

MATCH_FLAGS =
File::FNM_PATHNAME | File::FNM_EXTGLOB | File::FNM_DOTMATCH
DEFAULT_PATTERNS =
["README.md", "*/README.md"].freeze

Class Method Summary collapse

Class Method Details

.match?(path, patterns:, project_root: Dir.pwd) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ace/core/molecules/frontmatter_free_policy.rb', line 18

def self.match?(path, patterns:, project_root: Dir.pwd)
  return false if path.nil? || path.to_s.empty?
  return false if patterns.nil? || patterns.empty?

  absolute_path = File.expand_path(path)
  root = File.expand_path(project_root || Dir.pwd)
  relative_path = absolute_path.sub(/^#{Regexp.escape(root)}\/?/, "")

  patterns.any? do |pattern|
    File.fnmatch?(pattern, relative_path, MATCH_FLAGS) ||
      File.fnmatch?(pattern, absolute_path, MATCH_FLAGS)
  end
end

.patterns(config:, key: "frontmatter_free", default_patterns: DEFAULT_PATTERNS) ⇒ Object



11
12
13
14
15
16
# File 'lib/ace/core/molecules/frontmatter_free_policy.rb', line 11

def self.patterns(config:, key: "frontmatter_free", default_patterns: DEFAULT_PATTERNS)
  patterns = config[key]
  return patterns if patterns.is_a?(Array) && !patterns.empty?

  default_patterns
end