Class: JekyllImgFlow::PresetManager

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-imgflow/preset_manager.rb

Overview

PresetManager - translates YAML presets to tags:value format Handles tag overrides (user tags override preset tags) Passes combined markup to Parser for uniform validation flow

Presets are loaded from two sources (user presets take precedence):

  1. Site presets: _data/imgflow/presets/*.yml (user-defined, override built-ins)
  2. Built-in presets: lib/jekyll-imgflow/presets/*.yml (shipped with the gem)

Constant Summary collapse

BUILTIN_PRESETS_DIR =
File.expand_path("presets", __dir__).freeze

Instance Method Summary collapse

Constructor Details

#initialize(site, config) ⇒ PresetManager

Returns a new instance of PresetManager.



17
18
19
20
21
# File 'lib/jekyll-imgflow/preset_manager.rb', line 17

def initialize(site, config)
  @site = site
  @config = config
  @presets = load_presets
end

Instance Method Details

#available_presetsArray<String>

Get all available preset names (user + built-in)

Returns:

  • (Array<String>)

    Array of preset names



78
79
80
# File 'lib/jekyll-imgflow/preset_manager.rb', line 78

def available_presets
  @presets.keys
end

#build_markup_from_preset(preset_name, user_options = {}) ⇒ String

Build markup from preset (tags:value format)

Parameters:

  • preset_name (String)

    Name of preset

  • user_options (Hash) (defaults to: {})

    User-provided options that override preset values

Returns:

  • (String)

    Markup string in tags:value format



112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/jekyll-imgflow/preset_manager.rb', line 112

def build_markup_from_preset(preset_name, user_options = {})
  preset = get_preset(preset_name)
  return "" unless preset

  # Convert YAML operations to tags:value format
  preset_tags = yaml_to_tags(preset)

  # Merge with user options (user options override preset)
  merged_tags = merge_tags(preset_tags, user_options)

  # Convert to markup string
  tags_to_markup(merged_tags)
end

#builtin_preset?(name) ⇒ Boolean

Check if a preset is a built-in (shipped with the gem)

Parameters:

  • name (String)

    Preset name

Returns:

  • (Boolean)

    True if the preset is built-in



97
98
99
# File 'lib/jekyll-imgflow/preset_manager.rb', line 97

def builtin_preset?(name)
  builtin_preset_names.include?(name.to_s)
end

#builtin_preset_namesArray<String>

Get names of built-in presets shipped with the gem

Returns:

  • (Array<String>)

    Array of built-in preset names



84
85
86
87
88
89
90
91
92
# File 'lib/jekyll-imgflow/preset_manager.rb', line 84

def builtin_preset_names
  names = []
  return names unless Dir.exist?(builtin_presets_dir)

  Dir.glob(File.join(builtin_presets_dir, "*.yml")).each do |file|
    names << File.basename(file, ".yml")
  end
  names
end

#builtin_presets_dirObject

Path to built-in presets shipped with the gem



32
33
34
# File 'lib/jekyll-imgflow/preset_manager.rb', line 32

def builtin_presets_dir
  BUILTIN_PRESETS_DIR
end

#get_preset(name) ⇒ Hash?

Get a preset by name

Parameters:

  • name (String)

    Preset name

Returns:

  • (Hash, nil)

    Preset data or nil if not found



65
66
67
# File 'lib/jekyll-imgflow/preset_manager.rb', line 65

def get_preset(name)
  @presets[name.to_s]
end

#load_presetsObject

Load presets from the site's _data/imgflow/presets/ directory, then merge in built-in presets from the gem. User presets override built-in presets of the same name.



26
27
28
29
# File 'lib/jekyll-imgflow/preset_manager.rb', line 26

def load_presets
  presets = load_presets_from_dir(builtin_presets_dir)
  presets.merge(load_presets_from_dir(site_presets_dir))
end

#load_presets_from_dir(dir) ⇒ Hash<String, Hash>

Load all preset YAML files from a directory

Parameters:

  • dir (String)

    Directory containing *.yml preset files

Returns:

  • (Hash<String, Hash>)

    Preset name => preset data



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/jekyll-imgflow/preset_manager.rb', line 44

def load_presets_from_dir(dir)
  presets = {}
  return presets unless dir && Dir.exist?(dir)

  Dir.glob(File.join(dir, "*.yml")).each do |preset_file|
    preset_name = File.basename(preset_file, ".yml")
    begin
      preset_data = YAML.safe_load_file(preset_file)
      presets[preset_name] = preset_data
    rescue Psych::SyntaxError => e
      Jekyll.logger.warn "ImgFlow: Invalid YAML in preset file #{preset_file}: #{e.message}"
      # Skip invalid preset files
    end
  end

  presets
end

#preset_exists?(name) ⇒ Boolean

Check if a preset exists

Parameters:

  • name (String)

    Preset name

Returns:

  • (Boolean)

    True if preset exists



72
73
74
# File 'lib/jekyll-imgflow/preset_manager.rb', line 72

def preset_exists?(name)
  @presets.key?(name.to_s)
end

#site_presets_dirObject

Path to user-defined presets in the site



37
38
39
# File 'lib/jekyll-imgflow/preset_manager.rb', line 37

def site_presets_dir
  File.join(@site.source, "_data", "imgflow", "presets")
end

#user_preset?(name) ⇒ Boolean

Check if a preset is user-defined (in the site's _data/)

Parameters:

  • name (String)

    Preset name

Returns:

  • (Boolean)

    True if the preset is user-defined



104
105
106
# File 'lib/jekyll-imgflow/preset_manager.rb', line 104

def user_preset?(name)
  File.exist?(File.join(site_presets_dir, "#{name}.yml"))
end