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
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