Class: SqlcachedClient::Resultset
- Inherits:
-
Object
- Object
- SqlcachedClient::Resultset
- Includes:
- Enumerable
- Defined in:
- lib/sqlcached_client/resultset.rb
Instance Attribute Summary collapse
-
#count ⇒ Object
readonly
Returns the value of attribute count.
-
#entities ⇒ Object
readonly
Returns the value of attribute entities.
-
#entity_class ⇒ Object
readonly
Returns the value of attribute entity_class.
Class Method Summary collapse
Instance Method Summary collapse
- #[](i) ⇒ Object
- #_fill_associations(data) ⇒ Object
- #_get_entities_association_requests ⇒ Object
- #build_associations(max_depth = false) ⇒ Object
-
#each(&block) ⇒ Object
class << self.
-
#initialize(entity_class, data, attachments = nil) ⇒ Resultset
constructor
A new instance of Resultset.
- #set_entities_attachments(entities, attachments, contents) ⇒ Object
- #store_attachments(attachment_name, server, session) ⇒ Object
Constructor Details
#initialize(entity_class, data, attachments = nil) ⇒ Resultset
Returns a new instance of Resultset.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/sqlcached_client/resultset.rb', line 9 def initialize(entity_class, data, = nil) # set entity class @entity_class = entity_class # build the entities ents = data.respond_to?(:entities) ? data.entities : data @entities = (ents || []).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 # record collection size @count = @entities.size # set up attachments (@entities, , data.try(:attachments)) end |
Instance Attribute Details
#count ⇒ Object (readonly)
Returns the value of attribute count.
5 6 7 |
# File 'lib/sqlcached_client/resultset.rb', line 5 def count @count end |
#entities ⇒ Object (readonly)
Returns the value of attribute entities.
5 6 7 |
# File 'lib/sqlcached_client/resultset.rb', line 5 def entities @entities end |
#entity_class ⇒ Object (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
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/sqlcached_client/resultset.rb', line 31 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( 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
57 58 59 |
# File 'lib/sqlcached_client/resultset.rb', line 57 def [](i) entities[i] end |
#_fill_associations(data) ⇒ Object
67 68 69 70 71 |
# File 'lib/sqlcached_client/resultset.rb', line 67 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_requests ⇒ Object
73 74 75 76 77 |
# File 'lib/sqlcached_client/resultset.rb', line 73 def _get_entities_association_requests entities.map do |entity| entity.get_association_requests end end |
#build_associations(max_depth = false) ⇒ Object
61 62 63 64 65 |
# File 'lib/sqlcached_client/resultset.rb', line 61 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
53 54 55 |
# File 'lib/sqlcached_client/resultset.rb', line 53 def each(&block) block ? entities.each(&block) : entities.each end |
#set_entities_attachments(entities, attachments, contents) ⇒ Object
79 80 81 82 83 84 85 86 87 |
# File 'lib/sqlcached_client/resultset.rb', line 79 def (entities, , contents) if .is_a?(Array) && contents.is_a?(Array) entities.each_with_index do |entity, i| = [i] entity.send("#{attachment.name}=", ) .content = contents[i] if .respond_to?(:content=) end end end |
#store_attachments(attachment_name, server, session) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/sqlcached_client/resultset.rb', line 89 def (, server, session) entities_with_a = entities.select do |entity| !entity.send().nil? end server.( session, server.( entities_with_a.map { |e| e.attributes }, entities_with_a.map { |e| e.send().to_save_format } ) ) end |