Class: SlimScrooge::ResultSet

Inherits:
Object
  • Object
show all
Defined in:
lib/slim_scrooge/result_set.rb

Overview

A ResultSet contains all the rows found by an sql query A call to reload! will cause all the rows in the set to be fully loaded from the database - this should be called when a column access that hasn’t previously been seen by SlimScrooge is encountered

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rows, callsite_key, fetched_columns) ⇒ ResultSet

Returns a new instance of ResultSet.



12
13
14
15
16
# File 'lib/slim_scrooge/result_set.rb', line 12

def initialize(rows, callsite_key, fetched_columns)
  @rows = rows
  @callsite_key = callsite_key
  @fetched_columns = fetched_columns
end

Instance Attribute Details

#callsite_keyObject (readonly)

Returns the value of attribute callsite_key.



10
11
12
# File 'lib/slim_scrooge/result_set.rb', line 10

def callsite_key
  @callsite_key
end

#rowsObject (readonly)

Returns the value of attribute rows.



10
11
12
# File 'lib/slim_scrooge/result_set.rb', line 10

def rows
  @rows
end

Instance Method Details

#reload!Object

Reload all the rows in the sql result at once Reloads only those columns we didn’t fetch the first time



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/slim_scrooge/result_set.rb', line 25

def reload!
  callsite = Callsites[@callsite_key]
  rows_hash = rows_by_key(callsite.primary_key)
  sql = callsite.reload_sql(rows_hash.keys, @fetched_columns)
  new_rows = callsite.connection.send(:select, sql, "#{callsite.model_class_name} Reload SlimScrooged")
  new_rows.each do |row|
    if old_row = rows_hash[row[callsite.primary_key]]
      old_row.result_set = nil
      old_row.monitored_columns.merge!(row)
    end
  end
end

#rows_by_key(key) ⇒ Object



18
19
20
# File 'lib/slim_scrooge/result_set.rb', line 18

def rows_by_key(key)
  @rows.inject({}) {|hash, row| hash[row[key]] = row; hash}
end