module Mexico::Util::FancyContainer
This module contains various helper methods.
Public Instance Methods
add_fancy_container(container_name, p_back_collection_name=nil)
click to toggle source
module ClassMethods
# File lib/mexico/util/fancy_container.rb, line 25 def add_fancy_container(container_name, p_back_collection_name=nil) back_collection_name = p_back_collection_name.nil? ? "#{container_name.to_s}_container" : p_back_collection_name define_method(container_name) do |*args| coll = Array.new(instance_variable_get("@#{back_collection_name}")) if args.is_a?(Enumerable) if args.length==1 if args.first.is_a?(String) # one argument in string form: assume an identifier, return a single object or nil return instance_variable_get("@#{back_collection_name}").find{|x| x.identifier == args.first } end if args.first.is_a?(Hash) # one argument in string form: assume a hash with conditions args.first.each do |key,val| if val.is_a?(String) coll.select!{|c| c.send(key).to_s==val } elsif val.is_a?(Regexp) coll.select!{|c| c.send(key).to_s=~val } end end return coll end if args.first.is_a?(Integer) return coll[args.first] end end end # otherwise: orig_coll = instance_variable_get("@#{back_collection_name}") orig_coll = [] if orig_coll.nil? Array.new(orig_coll) end end