Class: GreenButtonClasses::IntervalBlock

Inherits:
GreenButtonEntry show all
Defined in:
lib/greenbutton/gb_classes.rb

Instance Attribute Summary collapse

Attributes inherited from GreenButtonEntry

#href, #id, #other_related, #parent_href, #published, #related_hrefs, #title, #updated

Instance Method Summary collapse

Methods inherited from GreenButtonEntry

#add_related, #assign_rules, #find_by_href, #find_related_entries, #initialize, #parse_related_entry

Constructor Details

This class inherits a constructor from GreenButtonClasses::GreenButtonEntry

Instance Attribute Details

#meter_readingObject

Returns the value of attribute meter_reading.



264
265
266
# File 'lib/greenbutton/gb_classes.rb', line 264

def meter_reading
  @meter_reading
end

Instance Method Details

#additional_rulesObject



270
271
272
273
274
275
# File 'lib/greenbutton/gb_classes.rb', line 270

def additional_rules
  [
    Rule.new(:start_time, './/interval/start', :unix_time),
    Rule.new(:duration, './/interval/duration', :integer)
  ]
end

#average_interval_valueObject



311
312
313
# File 'lib/greenbutton/gb_classes.rb', line 311

def average_interval_value
  total/n_readings
end

#docObject



277
278
279
# File 'lib/greenbutton/gb_classes.rb', line 277

def doc
  self.meter_reading.doc
end

#end_timeObject



281
282
283
# File 'lib/greenbutton/gb_classes.rb', line 281

def end_time
  self.start_time + self.duration
end

#n_readingsObject



315
316
317
# File 'lib/greenbutton/gb_classes.rb', line 315

def n_readings
  @entry_xml.xpath('.//IntervalReading').length
end

#power_of_ten_multiplierObject



285
286
287
# File 'lib/greenbutton/gb_classes.rb', line 285

def power_of_ten_multiplier
  self.meter_reading.reading_type.power_of_ten_multiplier
end

#pre_rule_assignment(parent) ⇒ Object



266
267
268
# File 'lib/greenbutton/gb_classes.rb', line 266

def pre_rule_assignment(parent)
  self.meter_reading = parent
end

#reading_at_time(time) ⇒ Object



289
290
291
292
293
294
295
296
297
298
# File 'lib/greenbutton/gb_classes.rb', line 289

def reading_at_time(time)
  if (time >= self.start_time) && (time < end_time)
    @entry_xml.xpath('.//IntervalReading').each do |interval_reading|
       intervalReading = IntervalReading.new(interval_reading)
       if (intervalReading.start_time <= time) && (intervalReading.end_time > time)
         return intervalReading
       end
    end   
  end
end

#sum(starttime = nil, endtime = nil) ⇒ Object



319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
# File 'lib/greenbutton/gb_classes.rb', line 319

def sum(starttime=nil, endtime=nil)
  starttime = starttime.nil? ? self.start_time : starttime.utc
  endtime = endtime.nil? ? self.end_time : endtime.utc
  sum = 0
  @entry_xml.xpath('.//IntervalReading').each do |interval_reading|
    intervalReading = IntervalReading.new(interval_reading)
    if intervalReading.start_time >= starttime && intervalReading.start_time < endtime
      if intervalReading.end_time <= endtime
        sum += intervalReading.value
      else
        ratio = (intervalReading.end_time.to_i - endtime.to_i)/intervalReading.duration
        sum += ratio*intervalReading.value
        break
      end
    end
  end
  sum*10**power_of_ten_multiplier  
end

#totalObject



304
305
306
307
308
309
# File 'lib/greenbutton/gb_classes.rb', line 304

def total
  if @total.nil?
    @total = sum
  end
  @total
end

#value_at_time(time) ⇒ Object



300
301
302
# File 'lib/greenbutton/gb_classes.rb', line 300

def value_at_time(time)
  reading_at_time(time).value*10**power_of_ten_multiplier
end