Class: JekyllImgFlow::PresetManager
- Inherits:
-
Object
- Object
- JekyllImgFlow::PresetManager
- 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):
- Site presets: _data/imgflow/presets/*.yml (user-defined, override built-ins)
- Built-in presets: lib/jekyll-imgflow/presets/*.yml (shipped with the gem)
Constant Summary collapse
- BUILTIN_PRESETS_DIR =
File.("presets", __dir__).freeze
Instance Method Summary collapse
-
#available_presets ⇒ Array<String>
Get all available preset names (user + built-in).
-
#build_markup_from_preset(preset_name, user_options = {}) ⇒ String
Build markup from preset (tags:value format).
-
#builtin_preset?(name) ⇒ Boolean
Check if a preset is a built-in (shipped with the gem).
-
#builtin_preset_names ⇒ Array<String>
Get names of built-in presets shipped with the gem.
-
#builtin_presets_dir ⇒ Object
Path to built-in presets shipped with the gem.
-
#get_preset(name) ⇒ Hash?
Get a preset by name.
-
#initialize(site, config) ⇒ PresetManager
constructor
A new instance of PresetManager.
-
#load_presets ⇒ Object
Load presets from the site's _data/imgflow/presets/ directory, then merge in built-in presets from the gem.
-
#load_presets_from_dir(dir) ⇒ Hash<String, Hash>
Load all preset YAML files from a directory.
-
#preset_exists?(name) ⇒ Boolean
Check if a preset exists.
-
#site_presets_dir ⇒ Object
Path to user-defined presets in the site.
-
#user_preset?(name) ⇒ Boolean
Check if a preset is user-defined (in the site's _data/).
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_presets ⇒ Array<String>
Get all available preset names (user + built-in)
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)
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, = {}) preset = get_preset(preset_name) return "" unless preset # Convert YAML operations to tags:value format = (preset) # Merge with user options (user options override preset) = (, ) # Convert to markup string () end |
#builtin_preset?(name) ⇒ Boolean
Check if a preset is a built-in (shipped with the gem)
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_names ⇒ Array<String>
Get names of built-in presets shipped with the gem
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_dir ⇒ Object
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
65 66 67 |
# File 'lib/jekyll-imgflow/preset_manager.rb', line 65 def get_preset(name) @presets[name.to_s] end |
#load_presets ⇒ Object
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
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.}" # Skip invalid preset files end end presets end |
#preset_exists?(name) ⇒ Boolean
Check if a 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_dir ⇒ Object
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/)
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 |