class Rambling::Trie::Configuration::ProviderCollection
Collection of configurable providers.
Attributes
@overload default
The default provider. Used when a provider cannot be resolved in {ProviderCollection#resolve #resolve}.
@overload default=(provider)
Sets the default provider. Needs to be one of the configured providers. @param [Object] provider the provider to use as default. @raise [ArgumentError] when the given provider is not in the provider collection. @note If no providers have been configured, `nil` will be assigned.
@return [Object, nil] the default provider to use when a provider
cannot be resolved in {ProviderCollection#resolve #resolve}.
The name of this provider collection. @return [String] the name of this provider collection.
Public Class Methods
Creates a new provider collection. @param [String] name the name for this provider collection. @param [Hash] providers the configured providers. @param [Object] default the configured default provider.
# File lib/rambling/trie/configuration/provider_collection.rb, line 30 def initialize name, providers = {}, default = nil @name = name @configured_providers = providers @configured_default = default || providers.values.first reset end
Public Instance Methods
Get provider corresponding to a given format. @param [Symbol] format the format to search for in the collection. @return [Object] the provider corresponding to that format. @see ruby-doc.org/core-2.5.0/Hash.html#method-i-5B-5D
Hash#[]
# File lib/rambling/trie/configuration/provider_collection.rb, line 91 def [] format providers[format] end
Adds a new provider to the provider collection. @param [Symbol] extension the extension that the provider will
correspond to.
@param [provider] provider the provider to add to the provider
collection.
# File lib/rambling/trie/configuration/provider_collection.rb, line 43 def add extension, provider providers[extension] = provider end
# File lib/rambling/trie/configuration/provider_collection.rb, line 47 def default= provider unless contains? provider raise ArgumentError, "default #{name} should be part of configured #{name}s" end @default = provider end
Get provider corresponding to a given format. @return [Array<Symbol>] the provider corresponding to that format. @see ruby-doc.org/core-2.5.0/Hash.html#method-i-5B-5D
Hash#keys
# File lib/rambling/trie/configuration/provider_collection.rb, line 82 def formats providers.keys end
List of configured providers. @return [Hash] the mapping of extensions to their corresponding
providers.
# File lib/rambling/trie/configuration/provider_collection.rb, line 59 def providers @providers ||= {} end
Resets the provider collection to the initial values.
# File lib/rambling/trie/configuration/provider_collection.rb, line 72 def reset providers.clear configured_providers.each { |k, v| self[k] = v } self.default = configured_default end
Resolves the provider from a filepath based on the file extension. @param [String] filepath the filepath to resolve into a provider. @return [Object] the provider corresponding to the file extension in
this provider collection. {#default} if not found.
# File lib/rambling/trie/configuration/provider_collection.rb, line 67 def resolve filepath providers[file_format filepath] || default end
Private Instance Methods
# File lib/rambling/trie/configuration/provider_collection.rb, line 99 def []= format, instance providers[format] = instance end
# File lib/rambling/trie/configuration/provider_collection.rb, line 113 def contains? provider provider.nil? || (providers.any? && provider_instances.include?(provider)) end
# File lib/rambling/trie/configuration/provider_collection.rb, line 107 def file_format filepath format = File.extname filepath format.slice! 0 format.to_sym end
# File lib/rambling/trie/configuration/provider_collection.rb, line 103 def values providers.values end