Class: FactDb::QueryResult

Inherits:
Object
  • Object
show all
Defined in:
lib/fact_db/query_result.rb

Overview

Holds the results of a query and provides a unified interface for transformers to work with.

Examples:

Basic usage

result = QueryResult.new(query: "Paula Chen")
result.add_facts(facts)
result.resolve_entities(entity_service)
triples = TripleTransformer.new.transform(result)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query:) ⇒ QueryResult

Returns a new instance of QueryResult.



16
17
18
19
20
21
22
23
24
25
# File 'lib/fact_db/query_result.rb', line 16

def initialize(query:)
  @query = query
  @facts = []
  @raw_facts = []
  @entities = {}
  @metadata = {
    retrieved_at: Time.now,
    stores_queried: [:fact_db]
  }
end

Instance Attribute Details

#entitiesObject (readonly)

Returns the value of attribute entities.



14
15
16
# File 'lib/fact_db/query_result.rb', line 14

def entities
  @entities
end

#factsObject (readonly)

Returns the value of attribute facts.



14
15
16
# File 'lib/fact_db/query_result.rb', line 14

def facts
  @facts
end

#metadataObject (readonly)

Returns the value of attribute metadata.



14
15
16
# File 'lib/fact_db/query_result.rb', line 14

def 
  @metadata
end

#queryObject (readonly)

Returns the value of attribute query.



14
15
16
# File 'lib/fact_db/query_result.rb', line 14

def query
  @query
end

#raw_factsObject (readonly)

Returns the value of attribute raw_facts.



14
15
16
# File 'lib/fact_db/query_result.rb', line 14

def raw_facts
  @raw_facts
end

Instance Method Details

#[](key) ⇒ Object

Hash-like access for backward compatibility.

Parameters:

  • key (Symbol, String)

    Key to access

Returns:

  • (Object)

    Value for the key



84
85
86
# File 'lib/fact_db/query_result.rb', line 84

def [](key)
  to_h[key.to_sym]
end

#add_facts(facts) ⇒ void

This method returns an undefined value.

Add facts to the result set.

Parameters:

  • facts (Array<Fact>, Array<Hash>)

    Facts to add



31
32
33
34
35
36
# File 'lib/fact_db/query_result.rb', line 31

def add_facts(facts)
  return if facts.nil? || facts.empty?

  @raw_facts += Array(facts)
  @facts += normalize_facts(facts)
end

#each_entity {|Hash| ... } ⇒ void

This method returns an undefined value.

Iterate over all entities.

Yields:

  • (Hash)

    Each normalized entity



100
101
102
# File 'lib/fact_db/query_result.rb', line 100

def each_entity(&block)
  @entities.values.each(&block)
end

#each_fact {|Hash| ... } ⇒ void

This method returns an undefined value.

Iterate over all facts.

Yields:

  • (Hash)

    Each normalized fact



92
93
94
# File 'lib/fact_db/query_result.rb', line 92

def each_fact(&block)
  @facts.each(&block)
end

#empty?Boolean

Check if results are empty.

Returns:

  • (Boolean)


57
58
59
# File 'lib/fact_db/query_result.rb', line 57

def empty?
  @facts.empty?
end

#entity_countInteger

Get count of entities.

Returns:

  • (Integer)


114
115
116
# File 'lib/fact_db/query_result.rb', line 114

def entity_count
  @entities.size
end

#fact_countInteger

Get count of facts.

Returns:

  • (Integer)


107
108
109
# File 'lib/fact_db/query_result.rb', line 107

def fact_count
  @facts.size
end

#itemsArray<Hash>

Get all items for comparison operations.

Returns:

  • (Array<Hash>)

    Normalized items



64
65
66
# File 'lib/fact_db/query_result.rb', line 64

def items
  @facts.map { |f| normalize_for_comparison(f) }
end

#resolve_entities(entity_service = nil) ⇒ void

This method returns an undefined value.

Resolve and cache entities mentioned in facts.

Parameters:

  • entity_service (EntityService) (defaults to: nil)

    Service to resolve entities



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/fact_db/query_result.rb', line 42

def resolve_entities(entity_service = nil)
  entity_ids = collect_entity_ids
  return if entity_ids.empty?

  entity_ids.each do |id|
    next if @entities[id]

    entity = resolve_entity(entity_service, id)
    @entities[id] = normalize_entity(entity) if entity
  end
end

#to_hHash

Convert to hash for JSON serialization.

Returns:

  • (Hash)


71
72
73
74
75
76
77
78
# File 'lib/fact_db/query_result.rb', line 71

def to_h
  {
    query: @query,
    facts: @facts,
    entities: @entities,
    metadata: @metadata
  }
end