Class: Grom::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/grom/builder.rb

Overview

Builds Grom::Node objects from a Grom::Reader instance.

Since:

  • 0.1.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reader) ⇒ Builder

Returns a new instance of Builder.

Parameters:

  • reader (Grom::Reader)

    a Grom::Reader instance populated with data.

Since:

  • 0.1.0



10
11
12
13
14
# File 'lib/grom/builder.rb', line 10

def initialize(reader)
  @reader = reader

  build_objects
end

Instance Attribute Details

#objectsArray (readonly)

Grom::Node objects generated from n-triple data.

Returns:

  • (Array)

    the current value of objects

Since:

  • 0.1.0



6
7
8
# File 'lib/grom/builder.rb', line 6

def objects
  @objects
end

Instance Method Details

#build_objectsArray

Builds and links Grom::Node objects from n-triple data.

Returns:

  • (Array)

    array of linked Grom::Node objects.

Since:

  • 0.1.0



19
20
21
22
23
24
# File 'lib/grom/builder.rb', line 19

def build_objects
  build_objects_by_subject
  link_objects

  @objects
end

#build_objects_by_subjectGrom::Builder

Builds Grom::Node objects from n-triple data grouping by their subject.

Returns:

Since:

  • 0.1.0



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/grom/builder.rb', line 29

def build_objects_by_subject
  @objects = []
  @objects_by_subject = {}

  @reader.statements_by_subject.each do |subject, statements|
    object = Grom::Node.new(statements)
    @objects_by_subject[subject] = object
    @objects << object
  end

  self
end

Links Grom::Node objects together by predicate and object.

Returns:

Since:

  • 0.1.0



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/grom/builder.rb', line 45

def link_objects
  @reader.edges_by_subject.each do |subject, predicates|
    predicates.each do |predicate, object_uris|
      current_node = @objects_by_subject[subject]

      object_uris.each do |object_uri|
        predicate_name_symbol = "@#{predicate}".to_sym
        object_array = current_node.instance_variable_get(predicate_name_symbol)
        object_array = [] if object_array.is_a?(String) || object_array.all? { |object| object.is_a?(String) }
        object_array << @objects_by_subject[object_uri]

        current_node.instance_variable_set(predicate_name_symbol, object_array)
      end
    end
  end

  self
end