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

Version Path
ree_lib-1.0.115 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.106 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb