Sha256: 2acec89898f590ae912f1e33377f88554e88b7c014dc01ba4e22656d64c3fa52

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

require 'forwardable'

module Parliament
  class Response
    include Enumerable
    extend Forwardable
    attr_reader :nodes
    def_delegators :@nodes, :size, :each, :select, :map, :select!, :map!, :count, :length, :[], :empty?

    def initialize(nodes)
      @nodes = nodes
    end

    def filter(*types)
      filtered_objects = Array.new(types.size) { [] }

      unless types.empty?
        @nodes.each do |node|
          type_index = types.index(node.type)
          filtered_objects[type_index] << node unless type_index.nil?
        end
      end

      result = build_responses(filtered_objects)

      types.size == 1 ? result.first : result
    end

    def build_responses(filtered_objects)
      result = []

      filtered_objects.each do |objects|
        result << Parliament::Response.new(objects)
      end
      result
    end

    def sort_by(*parameters)
      Parliament::Utils.sort_by({
        list:       @nodes,
        parameters: parameters
      })
    end

    def reverse_sort_by(*parameters)
      Parliament::Utils.reverse_sort_by({
        list:       @nodes,
        parameters: parameters
      })
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
parliament-ruby-0.5.19 lib/parliament/response.rb
parliament-ruby-0.5.18 lib/parliament/response.rb