Class: Parliament::Response::NTripleResponse

Inherits:
BaseResponse
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/parliament/response/ntriple_response.rb

Overview

N-Triple 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.

See Also:

  • BaseReponse#initialize

Since:

  • 0.1.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nodes) ⇒ NTripleResponse

Returns a new instance of NTripleResponse.

Parameters:

  • nodes (Array<Grom::Node>)

    An array of nodes the response should wrap

Since:

  • 0.1.0



21
22
23
# File 'lib/parliament/response/ntriple_response.rb', line 21

def initialize(nodes)
  @nodes = nodes
end

Instance Attribute Details

#nodesArray<Grom::Node> (readonly)

Graph nodes.

Returns:

  • (Array<Grom::Node>)

    the current value of nodes

Since:

  • 0.1.0



14
15
16
# File 'lib/parliament/response/ntriple_response.rb', line 14

def nodes
  @nodes
end

Instance Method Details

#filter(*types) ⇒ Array<Grom::Node> || Array<*Array<Grom::Node>>

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.

Examples:

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::NTriple.new(nodes)
response.filter('type_2') #=> [#<Grom::Node @type='type_2'>]

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::NTripleResponse.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'>]

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::NTripleResponse.new(nodes)
response.filter(Grom::Node::BLANK) #=> [#<Grom::Node>]

Parameters:

  • types (Array<String>)

    An array of type strings that you are looking for.

Returns:

  • (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.

Since:

  • 0.1.0



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/parliament/response/ntriple_response.rb', line 77

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

  unless types.empty?
    @nodes.each do |node|
      node_types = node.blank? ? Array(::Grom::Node::BLANK) : Array(node.type)

      indexes = node_types.reduce([]) do |memo, type|
        index = types.index(type)
        memo << index if index

        memo
      end

      indexes.each { |index| filtered_objects[index] << node }
    end
  end

  result = build_responses(filtered_objects)

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

#multi_direction_sort(parameters) ⇒ Array<Grom::Node>

Sort the Parliament::Response nodes in ascending or descending order by a set of attributes on each node.

Parameters:

  • parameters (Hash<Symbol,Symbol>)

    Attributes to sort on (left to right) - and their direction of sort(asc or desc).

Returns:

  • (Array<Grom::Node>)

    A sorted array of nodes.

See Also:

  • Utils.multi_direction_sort

Since:

  • 0.1.2



125
126
127
128
129
130
131
132
# File 'lib/parliament/response/ntriple_response.rb', line 125

def multi_direction_sort(parameters)
  Parliament::NTriple::Utils.multi_direction_sort(
    {
      list:       @nodes,
      parameters: parameters
    }
  )
end

#reverse_sort_by(*parameters) ⇒ Array<Grom::Node>

Sort the Parliament::Response nodes in descending order by a set of attributes on each node.

Parameters:

  • parameters (Array<Symbol>)

    Attributes to sort on - left to right.

Returns:

  • (Array<Grom::Node>)

    A sorted array of nodes.

See Also:

  • Utils.reverse_sort_by

Since:

  • 0.1.0



142
143
144
145
146
147
148
149
# File 'lib/parliament/response/ntriple_response.rb', line 142

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

#sort_by(*parameters) ⇒ Array<Grom::Node>

Sort the Parliament::Response nodes in ascending order by a set of attributes on each node.

Parameters:

  • parameters (Array<Symbol>)

    Attributes to sort on - left to right.

Returns:

  • (Array<Grom::Node>)

    A sorted array of nodes.

See Also:

  • Utils.sort_by

Since:

  • 0.1.0



108
109
110
111
112
113
114
115
# File 'lib/parliament/response/ntriple_response.rb', line 108

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