Class: SqlcachedClient::Resultset

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/sqlcached_client/resultset.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(entity_class, entities) ⇒ Resultset

Returns a new instance of Resultset.

Parameters:

  • entity_class (Class)
  • entities (Array)


9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/sqlcached_client/resultset.rb', line 9

def initialize(entity_class, entities)
  @entity_class = entity_class
  @entities = (entities || []).map do |item|
    if item.is_a?(Hash)
      entity_class.new(item)
    elsif item.is_a?(entity_class)
      item
    else
      raise "Cannot handle: #{item.inspect}"
    end
  end
  @count = @entities.size
end

Instance Attribute Details

#countObject (readonly)

Returns the value of attribute count.



5
6
7
# File 'lib/sqlcached_client/resultset.rb', line 5

def count
  @count
end

#entitiesObject (readonly)

Returns the value of attribute entities.



5
6
7
# File 'lib/sqlcached_client/resultset.rb', line 5

def entities
  @entities
end

#entity_classObject (readonly)

Returns the value of attribute entity_class.



5
6
7
# File 'lib/sqlcached_client/resultset.rb', line 5

def entity_class
  @entity_class
end

Class Method Details

.build_associations(resultsets, server, session, max_depth, current_depth = 0) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/sqlcached_client/resultset.rb', line 25

def build_associations(resultsets, server, session, max_depth, current_depth = 0)
  if resultsets.any?
    batch = resultsets.map { |r| r._get_entities_association_requests }
    if batch.flatten.any?
      next_batch =
        server.run_query(
          session,
          server.build_request_body(
            batch
          )
        ).map.with_index do |resultset_data, i|
          resultsets[i]._fill_associations(resultset_data)
        end.flatten!
      if !max_depth || current_depth < max_depth
        build_associations(next_batch, server, session, max_depth,
          current_depth + 1)
      end
    end
  end
end

Instance Method Details

#[](i) ⇒ Object



51
52
53
# File 'lib/sqlcached_client/resultset.rb', line 51

def [](i)
  entities[i]
end

#_fill_associations(data) ⇒ Object



61
62
63
64
65
# File 'lib/sqlcached_client/resultset.rb', line 61

def _fill_associations(data)
  data.map.with_index do |entity_assoc_data, i|
    entities[i].set_associations_data(entity_assoc_data)
  end
end

#_get_entities_association_requestsObject



67
68
69
70
71
# File 'lib/sqlcached_client/resultset.rb', line 67

def _get_entities_association_requests
  entities.map do |entity|
    entity.get_association_requests
  end
end

#build_associations(max_depth = false) ⇒ Object



55
56
57
58
59
# File 'lib/sqlcached_client/resultset.rb', line 55

def build_associations(max_depth = false)
  entity_class.server_session do |server, session|
    self.class.build_associations([self], server, session, max_depth)
  end
end

#each(&block) ⇒ Object

class << self



47
48
49
# File 'lib/sqlcached_client/resultset.rb', line 47

def each(&block)
  block ? entities.each(&block) : entities.each
end