# File lib/cimi/helpers/select_helper.rb, line 20 def select_by(filter_opts) return self if filter_opts.nil? return self unless kind_of? CIMI::Model::Collection if filter_opts.include? ',' return select_attributes(filter_opts.split(',').map{ |a| a.intern }) end case filter_opts when /^([\w\_]+)$/ then select_attributes([$1.intern]) when /^([\w\_]+)\[(\d+\-\d+)\]$/ then select_by_arr_range($1.intern, $2) when /^([\w\_]+)\[(\d+)\]$/ then select_by_arr_index($1.intern, $2) else self end end
# File lib/cimi/helpers/select_helper.rb, line 34 def select_by_arr_index(attr, filter) return self unless self.respond_to?(attr) self.class.new(attr => [self.send(attr)[filter.to_i]]) end
# File lib/cimi/helpers/select_helper.rb, line 39 def select_by_arr_range(attr, filter) return self unless self.respond_to?(attr) filter = filter.split('-').inject { |s,e| s.to_i..e.to_i } self.class.new(attr => self.send(attr)[filter]) end