module Confo::SubconfigsManager

Public Instance Methods

subconfig(subconfig_name, options = nil, overrides = nil, &block) click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 52
def subconfig(subconfig_name, options = nil, overrides = nil, &block)
  respond_to?(subconfig_name) ?
    send(subconfig_name, options, overrides, &block) :
    subconfig_internal(subconfig_name, options, overrides, &block)
end
subconfig_exists?(subconfig_name) click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 58
def subconfig_exists?(subconfig_name)
  subconfig_instances.exists?(subconfig_name)
end
subconfigs() click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 44
def subconfigs
  unless @all_subconfigs_loaded
    self.class.subconfigs_options.each { |name, options| subconfig(name) }
    @all_subconfigs_loaded = true
  end
  subconfig_instances
end

Protected Instance Methods

construct_subconfig(subconfig_class) click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 87
def construct_subconfig(subconfig_class)
  subconfig_class.new
end
guess_subconfig_class_name(subconfig_name) click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 99
def guess_subconfig_class_name(subconfig_name)
  "#{subconfig_name.to_s.camelize}Config"
end
subconfig_class(subconfig_name, subconfig_options) click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 91
def subconfig_class(subconfig_name, subconfig_options)
  if class_name = subconfig_options[:class_name]
    class_name.camelize
  else
    guess_subconfig_class_name(subconfig_name)
  end.safe_constantize || subconfig_options.fetch(:fallback_class_name, 'Confo::Config').constantize
end
subconfig_instances() click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 64
def subconfig_instances
  @subconfig_instances ||= Collection.new
end
subconfig_internal(subconfig_name, options = nil, overrides = nil, &block) click to toggle source
# File lib/confo/concerns/subconfigs_manager.rb, line 68
def subconfig_internal(subconfig_name, options = nil, overrides = nil, &block)
  unless subconfig_exists?(subconfig_name)

    # TODO Bugfix
    subconfig_options   = self.class.subconfigs_options[subconfig_name].try(:dup) || {}
    subconfig_options.merge!(overrides) if overrides

    subconfig_class     = Confo.call(self, :subconfig_class, subconfig_name, subconfig_options)
    subconfig_instance  = Confo.call(self, :construct_subconfig, subconfig_class, subconfig_options)

    subconfig_instance.set(:name, subconfig_name) unless subconfig_instance.kind_of?(Collection)
    subconfig_instances.set(subconfig_name, subconfig_instance)
  end
  subconfig_instance = subconfig_instances.get(subconfig_name)
  subconfig_instance.set(options)       if options
  subconfig_instance.configure(&block)  if block
  subconfig_instance
end