Sha256: fb8b4893e42533329690c4a977dd282b130ff913683b397e7ebf2ccc63a62816
Contents?: true
Size: 929 Bytes
Versions: 10
Compression:
Stored size: 929 Bytes
Contents
class ReeDto::CollectionFilter include Ree::Contracts::Core include Ree::Contracts::ArgContracts include Enumerable InvalidFilterItemErr = Class.new(ArgumentError) contract Any, Symbol, Proc => Any def initialize(collection, name, filter_proc) @collection = collection @name = name @filter_proc = filter_proc end contract Optblock => Any def each(&block) @collection.select(&@filter_proc).each(&block) end contract Any => Any def add(item) check_item(item) @collection.add(item) end contract None => Integer def size count end contract Any => Any def remove(item) check_item(item) @collection.remove(item) end alias :<< :add alias :push :add private def check_item(item) if !@filter_proc.call(item) raise InvalidFilterItemErr.new( "invalid item for #{@collection.parent_class}##{@name} filter" ) end end end
Version data entries
10 entries across 10 versions & 1 rubygems