module AttrEnumerable
Constants
- ATTR_METHODS
- REQUIRES
Public Instance Methods
method_missing(method_name, *args, &block)
click to toggle source
call attr enumerable method.
# File lib/attr_enumerable/attr_enumerable_helper.rb, line 26 def method_missing(method_name, *args, &block) target_method = detect(method_name) send(target_method[:call_method], target_method[:attribute], method_name, *args, &block) rescue raise end
Private Instance Methods
at_attr(attribute, method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/attr_enumerable/at_attr.rb, line 7 def at_attr(attribute, method_name, *args, &block) return nil if collection.empty? index = Integer(args.first) super(method_name, *args) unless include_attr?(collection.first, attribute) element = collection.at(index) return nil if element.nil? element.send(attribute) end
check_argument_length(*args)
click to toggle source
# File lib/attr_enumerable/slice_attr.rb, line 17 def check_argument_length(*args) return if args.size > 0 fail ArgumentError, 'wrong number of arguments (0 for 1..2) (ArgumentError)' end
collection()
click to toggle source
# File lib/attr_enumerable/attr_enumerable_helper.rb, line 49 def collection instance_variable_get("@#{self.class.name.underscore}") end
compact_attr(attribute, method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/attr_enumerable/compact_attr.rb, line 7 def compact_attr(attribute, method_name, *args, &block) return [] if collection.empty? super(method_name, *args) unless include_attr?(collection.first, attribute) collection.map(&attribute.to_sym).compact end
concat_attr(attribute, method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/attr_enumerable/concat_attr.rb, line 7 def concat_attr(attribute, method_name, *args, &block) add_array = Array(*args) return add_array if collection.empty? super(method_name, *args) unless include_attr?(collection.first, attribute) collection.map(&attribute.to_sym).concat(add_array) end
delete_attr(attribute, method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/attr_enumerable/delete_attr.rb, line 7 def delete_attr(attribute, method_name, *args, &block) del_target = args.first return [] if collection.empty? super(method_name, *args) unless include_attr?(collection.first, attribute) del_targets = collection.select { |v|v.send(attribute) == del_target } del_targets.each { |each_target|collection.delete(each_target) } del_targets end
detect(method_name)
click to toggle source
# File lib/attr_enumerable/attr_enumerable_helper.rb, line 34 def detect(method_name) ATTR_METHODS.each do |target_method| regexp = target_method[:regexp] if method_name.to_s =~ regexp attribute = method_name.to_s.scan(regexp).first.first return { call_method: target_method[:call_method], attribute: attribute } end end fail NoMethodError, "method is not exists #{method_name}" end
each_attr(attribute, method_name, *args) { |send| ... }
click to toggle source
Calls superclass method
# File lib/attr_enumerable/each_attr.rb, line 8 def each_attr(attribute, method_name, *args, &block) collection.each do |element| super(method_name, *args) unless include_attr?(element, attribute) yield element.send(attribute) end end
each_attr_with_index(attribute, method_name, *args) { |send, index| ... }
click to toggle source
Calls superclass method
# File lib/attr_enumerable/each_attr_with_index.rb, line 8 def each_attr_with_index(attribute, method_name, *args, &block) collection.each_with_index do |element, index| super(method_name, *args) unless include_attr?(element, attribute) yield element.send(attribute), index end end
first_attr(attribute, method_name, *args, &block)
click to toggle source
# File lib/attr_enumerable/first_attr.rb, line 7 def first_attr(attribute, method_name, *args, &block) col = collection return [] if col.empty? first_size = args.size == 0 ? nil : Integer(args.first) fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |v|v.send(attribute) } first_size.nil? ? attrs.first : attrs.first(first_size) end
include_attr?(element, attribute)
click to toggle source
# File lib/attr_enumerable/attr_enumerable_helper.rb, line 45 def include_attr?(element, attribute) element.instance_variables.include? :"@#{attribute}" end
include_attribute?(attribute, method_name, *args, &block)
click to toggle source
# File lib/attr_enumerable/include_attr.rb, line 7 def include_attribute?(attribute, method_name, *args, &block) col = collection return false if col.empty? include_value = args.first fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |v|v.send(attribute) } attrs.include?(include_value) end
last_attr(attribute, method_name, *args, &block)
click to toggle source
# File lib/attr_enumerable/last_attr.rb, line 7 def last_attr(attribute, method_name, *args, &block) col = collection return [] if col.empty? last_size = args.size == 0 ? nil : Integer(args.last) fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.last, attribute) attrs = col.map { |v|v.send(attribute) } last_size.nil? ? attrs.last : attrs.last(last_size) end
map_attr(attribute, method_name, *args) { |e| ... }
click to toggle source
# File lib/attr_enumerable/map_attr.rb, line 7 def map_attr(attribute, method_name, *args, &block) col = collection return [] if col.empty? fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |v|v.send(attribute) } attrs.reduce([]) { |a, e|a << yield(e); a } end
reduce_attr(attribute, method_name, *args) { |a, e| ... }
click to toggle source
# File lib/attr_enumerable/reduce_attr.rb, line 7 def reduce_attr(attribute, method_name, *args, &block) col = collection init_value = args.size == 0 ? 0 : args.first return init_value if col.empty? fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |e|e.send(attribute) } attrs.reduce(init_value) { |a, e|a = yield(a, e); a } end
reverse_attr(attribute, *args, &block)
click to toggle source
Calls superclass method
# File lib/attr_enumerable/reverse_attr.rb, line 8 def reverse_attr(attribute, *args, &block) collection.reduce([]) do |r, e| super(method_name, *args) unless include_attr?(e, attribute) r << e.send(attribute) r end.reverse end
sample_attr(attribute, method_name, *args, &block)
click to toggle source
# File lib/attr_enumerable/sample_attr.rb, line 7 def sample_attr(attribute, method_name, *args, &block) col = collection count = args.size == 0 ? 1 : Integer(args.first) fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |e|e.send(attribute) } attrs.sample(count) end
select_attr(attribute, method_name, *args) { |e| ... }
click to toggle source
# File lib/attr_enumerable/select_attr.rb, line 7 def select_attr(attribute, method_name, *args, &block) col = collection # count = args.size == 0 ? 1 : Integer(args.first) fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |e|e.send(attribute) } attrs.select { |e| yield(e) } end
shuffle_attr(attribute, method_name, *args, &block)
click to toggle source
# File lib/attr_enumerable/shuffle_attr.rb, line 7 def shuffle_attr(attribute, method_name, *args, &block) col = collection count = args.size == 0 ? 1 : Integer(args.first) fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |e|e.send(attribute) } attrs.shuffle end
slice_attr(attribute, method_name, *args, &block)
click to toggle source
# File lib/attr_enumerable/slice_attr.rb, line 7 def slice_attr(attribute, method_name, *args, &block) check_argument_length(*args) col = collection index_or_range = args.first length = args.size > 1 ? args[1] : nil fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute) attrs = col.map { |e|e.send(attribute) } length ? attrs.slice(index_or_range, length) : attrs.slice(index_or_range) end