lib/parliament/response.rb in parliament-ruby-0.7.4 vs lib/parliament/response.rb in parliament-ruby-0.7.5.pre

- old
+ new

@@ -1,131 +1,7 @@ -require 'forwardable' - module Parliament - # API response object that wraps an Array of Grom::Node objects with common helper methods. - # - # Delegates a number of common methods to the array of Grom::Nodes including, but not limited to, :size, :each, :map, :count etc. - # - # @since 0.1.0 - # - # @attr_reader [Array<Grom::Node>] nodes Graph nodes. - class Response - include Enumerable - extend Forwardable - attr_reader :nodes - def_delegators :@nodes, :size, :each, :select, :map, :select!, :map!, :count, :length, :[], :empty? - - # @param [Array<Grom::Node>] nodes An array of nodes the response should wrap - def initialize(nodes) - @nodes = nodes - end - - # Given our array of Grom::Nodes, filter them into arrays of 'types' of nodes. - # - # Note: this method assumes all of your nodes include a #type attribute or are blank nodes. - # - # @since 0.2.0 - # - # @example Filtering for a single type - # node_1 = Grom::Node.new - # node_1.instance_variable_set(:type, 'type_1') - # node_2 = Grom::Node.new - # node_2.instance_variable_set(:type, 'type_3') - # node_3 = Grom::Node.new - # node_3.instance_variable_set(:type, 'type_1') - # node_4 = Grom::Node.new - # node_4.instance_variable_set(:type, 'type_2') - # nodes = [node_1, node_2, node_3, node_4] - # - # response = Parliament::Response.new(nodes) - # response.filter('type_2') #=> [#<Grom::Node @type='type_2'>] - # - # @example Filtering for multiple types - # node_1 = Grom::Node.new - # node_1.instance_variable_set(:type, 'type_1') - # node_2 = Grom::Node.new - # node_2.instance_variable_set(:type, 'type_3') - # node_3 = Grom::Node.new - # node_3.instance_variable_set(:type, 'type_1') - # node_4 = Grom::Node.new - # node_4.instance_variable_set(:type, 'type_2') - # nodes = [node_1, node_2, node_3, node_4] - # - # response = Parliament::Response.new(nodes) - # response.filter('type_2', 'type_1') #=> [[#<Grom::Node @type='type_2'>], [#<Grom::Node @type='type_1'>, #<Grom::Node @type='type_1'>]] - # - # # Also consider - # type_2, type_1 = response.filter('type_2', 'type_1') - # type_2 #=> [#<Grom::Node @type='type_2'>] - # type_1 #=> [#<Grom::Node @type='type_1'>, #<Grom::Node @type='type_1'>] - # - # @example Filtering blank nodes - # node_1 = Grom::Node.new - # node_1.instance_variable_set(:type, 'type_1') - # node_2 = Grom::Node.new - # node_3 = Grom::Node.new - # node_3.instance_variable_set(:type, 'type_1') - # nodes = [node_1, node_2, node_3] - # - # response = Parliament::Response.new(nodes) - # response.filter(Grom::Node::BLANK) #=> [#<Grom::Node>] - # - # @param [Array<String>] types An array of type strings that you are looking for. - # @return [Array<Grom::Node> || Array<*Array<Grom::Node>>] If you pass one type, this returns an Array of Grom::Node objects. If you pass multiple, it returns an array, of arrays of Grom::Node objects. - def filter(*types) - filtered_objects = Array.new(types.size) { [] } - - unless types.empty? - @nodes.each do |node| - type_index = node.blank? ? types.index(Grom::Node::BLANK) : 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 - - # Sort the Parliament::Response nodes in ascending order by a set of attributes on each node. - # - # @see Parliament::Utils.sort_by - # - # @since 0.5.0 - # - # @param [Array<Symbol>] parameters Attributes to sort on - left to right. - # @return [Array<Grom::Node>] A sorted array of nodes. - def sort_by(*parameters) - Parliament::Utils.sort_by({ - list: @nodes, - parameters: parameters - }) - end - - # Sort the Parliament::Response nodes in descending order by a set of attributes on each node. - # - # @see Parliament::Utils.reverse_sort_by - # - # @since 0.5.0 - # - # @param [Array<Symbol>] parameters Attributes to sort on - left to right. - # @return [Array<Grom::Node>] A sorted array of nodes. - def reverse_sort_by(*parameters) - Parliament::Utils.reverse_sort_by({ - list: @nodes, - parameters: parameters - }) - end - - private - - def build_responses(filtered_objects) - result = [] - - filtered_objects.each do |objects| - result << Parliament::Response.new(objects) - end - result - end + # Namespace for classes and modules that handle http responses. + # @since 0.7.5 + module Response + require 'parliament/response/base_response' end end