Sha256: 1e10fa6282f7a42bc853d9a2aba17df06ba0ed6109b6dcfb5253d15170a28e59

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

require 'set'
require 'forwardable'

module Might
  #
  class FilterParameters
    include Comparable
    include Enumerable
    extend Forwardable

    FilterError = Class.new(KeyError)

    def_delegators :parameters, :detect, :each

    # @param [<Might::FilterParameter>]
    def initialize(parameters = nil)
      @parameters = Set.new(parameters)
    end

    # Find filter by name
    # @param name [String]
    # @return [Might::FilterParameter, nil]
    #
    def [](name)
      parameters.detect { |filter| filter.name == name }
    end

    # Find filter by name or raise error
    # @param name [String]
    # @yieldparam name [String]
    #   block value will be returned if no `FilterParameter` found with specified name
    # @return [Might::FilterParameter]
    # @raise FilterError
    #
    def fetch(name)
      if (filter = self[name])
        filter
      elsif block_given?
        yield(name)
      else
        fail FilterError, "filter not found: #{name.inspect}"
      end
    end

    # param value [Might::FilterParameter]
    def add(value)
      self.class.new(parameters.add(value))
    end

    alias << add

    def map(&block)
      self.class.new(parameters.map(&block))
    end

    # param other [Might::FilterParameters]
    def -(other)
      self.class.new(parameters - other.parameters)
    end

    # param other [Might::FilterParameters]
    def +(other)
      self.class.new(parameters.merge(other.parameters))
    end

    # Delete filter by name
    # @param name [String]
    # @return [Might::FilterParameter, nil]
    def delete(name)
      filter_parameter = self[name]
      parameters.delete(filter_parameter) if filter_parameter
      filter_parameter
    end

    def <=>(other)
      parameters <=> other.parameters
    end

    protected

    attr_reader :parameters
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
might-0.7.0 lib/might/filter_parameters.rb