Class: JekyllImgFlow::ProviderRegistry
- Inherits:
-
Object
- Object
- JekyllImgFlow::ProviderRegistry
- Defined in:
- lib/jekyll-imgflow/provider_registry.rb
Constant Summary collapse
- MANUAL_ONLY_PROVIDERS =
Providers that don't work programmatically (manual use only)
[].freeze
Class Method Summary collapse
-
.discover_providers ⇒ Object
Dynamic provider discovery.
-
.get_all_providers_with_status(config) ⇒ Object
Get all providers with their availability status.
-
.get_available_providers(config) ⇒ Object
Get all providers that are currently available (running/installed).
- .provider_registry ⇒ Object
- .providers_discovered? ⇒ Boolean
- .register_provider(name) ⇒ Object
Instance Method Summary collapse
-
#available_providers ⇒ Object
Get list of available provider names.
-
#current_provider ⇒ Object
Get current provider (first available from priority list).
-
#initialize(config) ⇒ ProviderRegistry
constructor
A new instance of ProviderRegistry.
- #providers ⇒ Object
Constructor Details
#initialize(config) ⇒ ProviderRegistry
Returns a new instance of ProviderRegistry.
10 11 12 13 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 10 def initialize(config) @config = config self.class.discover_providers unless self.class.providers_discovered? end |
Class Method Details
.discover_providers ⇒ Object
Dynamic provider discovery
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 16 def self.discover_providers return if @providers_discovered @provider_registry ||= {} providers_dir = File.join(File.dirname(__FILE__), "providers") Dir.glob(File.join(providers_dir, "*.rb")).each do |file| next if File.basename(file) == "base_provider.rb" provider_name = File.basename(file, ".rb") register_provider(provider_name) end @providers_discovered = true Jekyll.logger.debug "ImgFlow:", "Discovered #{@provider_registry.size} providers" end |
.get_all_providers_with_status(config) ⇒ Object
Get all providers with their availability status
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 63 def self.get_all_providers_with_status(config) registry = new(config) registry.providers.map do |provider| { name: provider.class.name.split("::").last, class: provider.class, instance: provider, available: provider.available? } end end |
.get_available_providers(config) ⇒ Object
Get all providers that are currently available (running/installed)
57 58 59 60 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 57 def self.get_available_providers(config) registry = new(config) registry.providers.select(&:available?) end |
.provider_registry ⇒ Object
48 49 50 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 48 def self.provider_registry @provider_registry ||= {} end |
.providers_discovered? ⇒ Boolean
52 53 54 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 52 def self.providers_discovered? @providers_discovered ||= false end |
.register_provider(name) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 33 def self.register_provider(name) class_name = name.split("_").map(&:capitalize).join begin require_relative "providers/#{name}" provider_class = JekyllImgFlow::Providers.const_get(class_name) @provider_registry[name.to_sym] = provider_class Jekyll.logger.debug "ImgFlow:", "Registered provider: #{class_name}" rescue NameError => e Jekyll.logger.warn "ImgFlow:", "Failed to load provider #{name}: #{e.}" rescue LoadError => e Jekyll.logger.warn "ImgFlow:", "Failed to require provider #{name}: #{e.}" end end |
Instance Method Details
#available_providers ⇒ Object
Get list of available provider names
81 82 83 84 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 81 def available_providers available = providers.select(&:available?) available.map! { |p| p.class.name.split("::").last } end |
#current_provider ⇒ Object
Get current provider (first available from priority list)
76 77 78 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 76 def current_provider providers.find(&:available?) end |
#providers ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/jekyll-imgflow/provider_registry.rb', line 86 def providers @providers ||= @config.backend_priority.filter_map do |name| # Skip manual-only providers (they don't have programmatic APIs) if MANUAL_ONLY_PROVIDERS.include?(name) Jekyll.logger.debug "ImgFlow:", "Skipping '#{name}' - manual use only (no programmatic API)" next end # Dynamic provider loading from registry provider_class = self.class.provider_registry[name.to_sym] if provider_class provider_class.new(@config) else Jekyll.logger.warn "ImgFlow:", "Unknown provider '#{name}' - not found in registry" nil end end end |