Sha256: 954728d675a366594d212d829f1b9b570f51715333009f67d011f169edb26c3d
Contents?: true
Size: 1.1 KB
Versions: 3
Compression:
Stored size: 1.1 KB
Contents
# encoding: utf-8 # frozen_string_literal: true module Traits class List include Enumerable def initialize(list = []) @list = list end def filter(hash) select do |item| hash.all? { |method, expected| compare(item, method, expected) } end end def first_where(hash) find do |item| hash.all? { |method, expected| compare(item, method, expected) } end end def [](arg) by_name(arg) end def each(&block) @list.each(&block) end def by_name(name) name = name.to_sym if name.kind_of?(String) find { |attr| attr.name == name } end def to_hash each_with_object({}) { |item, memo| memo[item.name] = item.to_hash } end protected def compare(item, method, expected) returned = item.send(method) case expected when Array then expected.include?(returned) when Regexp then returned =~ expected else returned == expected end end end class AttributeList < List def primary_key first_where(primary_key?: true) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
activerecord-traits-1.0.3 | lib/traits/list.rb |
activerecord-traits-1.0.2 | lib/traits/list.rb |
activerecord-traits-1.0.1 | lib/traits/list.rb |