class Confo::Collection

Attributes

settings[R]

Public Class Methods

new(settings = {}, &block) click to toggle source
# File lib/confo/collection.rb, line 7
def initialize(settings = {}, &block)
  @settings = settings
  configure(&block) if block
end

Public Instance Methods

[](id)
Alias for: get
[]=(id, config)
Alias for: set
configure(*args, &block) click to toggle source
# File lib/confo/collection.rb, line 42
def configure(*args, &block)
  args.present? ? define(*args).configure(&block) : instance_eval(&block)
end
deep_dup(config_settings = {}) click to toggle source
# File lib/confo/collection.rb, line 90
def deep_dup(config_settings = {})
  with_new_settings(config_settings)
end
define(id, options = nil, construct_options = nil, &block) click to toggle source
# File lib/confo/collection.rb, line 12
def define(id, options = nil, construct_options = nil, &block)
  id        = convert_id(id)
  config    = storage[id]
  config  ||= begin
    config_class  = Confo.call(self, :config_class, id, construct_options)
    check_config_class!(config_class)
    config        = Confo.call(self, :construct_config, config_class, id, construct_options)
    storage[id]   = config
    config.set(:name, id)
    config
  end

  config.set(options)       if options && config.kind_of?(Config)
  config.configure(&block)  if block
  config
end
dup(config_settings = {}) click to toggle source
# File lib/confo/collection.rb, line 82
def dup(config_settings = {})
  self.class.new(settings.merge(config_settings)).tap do |new_obj|
    if storage = @storage
      new_obj.instance_variable_set(:@storage, storage)
    end
  end
end
each(&block) click to toggle source
# File lib/confo/collection.rb, line 50
def each(&block)
  storage.each { |k, v| block.call(v) }
end
exists?(id) click to toggle source
# File lib/confo/collection.rb, line 46
def exists?(id)
  storage[convert_id(id)].present?
end
get(id) click to toggle source
# File lib/confo/collection.rb, line 29
def get(id)
  id = convert_id(id)
  define(id)
  storage[id]
end
Also aliased as: []
method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/confo/collection.rb, line 66
def method_missing(name, *args, &block)
  if args.empty? && name =~ /^(\w+)\?$/
    exists?($1)
  else
    super
  end
end
set(id, config) click to toggle source
# File lib/confo/collection.rb, line 35
def set(id, config)
  storage[convert_id(id)] = config
end
Also aliased as: []=
to_a() click to toggle source
# File lib/confo/collection.rb, line 54
def to_a
  storage.each_with_object([]) do |(id, instance), memo|
    memo << (instance.respond_to?(:to_hash) ? instance.to_hash : instance)
  end
end
to_hash() click to toggle source
# File lib/confo/collection.rb, line 60
def to_hash
  storage.each_with_object({}) do |(id, instance), memo|
    memo[id] = Confo.convert_to_hash(instance)
  end
end
with_new_settings(new_settings) click to toggle source
# File lib/confo/collection.rb, line 74
def with_new_settings(new_settings)
  self.class.new(settings.merge(new_settings)).tap do |new_obj|
    if storage = @storage
      storage.each { |k, v| new_obj.set(k, v.with_new_settings(new_settings) ) }
    end
  end
end

Protected Instance Methods

check_config_class!(config_class) click to toggle source
# File lib/confo/collection.rb, line 112
def check_config_class!(config_class)
  raise 'Forbidden config class!' unless (config_class <= Config or config_class <= Collection)
end
config_class(config_id, config_options) click to toggle source
# File lib/confo/collection.rb, line 96
def config_class(config_id, config_options)
  config_options.try(:[], :class_name).try(:safe_constantize) || Config
end
construct_config(config_class, config_id, construct_options) click to toggle source
# File lib/confo/collection.rb, line 100
def construct_config(config_class, config_id, construct_options)
  config_class.new
end
convert_id(id) click to toggle source
# File lib/confo/collection.rb, line 108
def convert_id(id)
  id.kind_of?(Symbol) ? id : id.to_sym
end
storage() click to toggle source
# File lib/confo/collection.rb, line 104
def storage
  @storage ||= ActiveSupport::OrderedHash.new
end