Sha256: 949200664c134e100b325a8b1dd03a78e5011bf46ca8c7a862d3371ac775d1db

Contents?: true

Size: 1.06 KB

Versions: 10

Compression:

Stored size: 1.06 KB

Contents

class ReeDto::CollectionFilter
  include Ree::Contracts::Core
  include Ree::Contracts::ArgContracts
  include Enumerable
  extend Forwardable

  InvalidFilterItemErr = Class.new(ArgumentError)

  def_delegators *([:all] + Array.public_instance_methods - Object.public_instance_methods)

  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

  def all
    @collection.select(&@filter_proc)
  end

  contract Any => Any
  def add(item)
    check_item(item)
    @collection.add(item)
  end

  def inspect
    to_a.inspect
  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.1.1 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_dto/package/ree_dto/dto/collection_filter.rb