Class: Request::Statistics::Counter
- Inherits:
- 
      Object
      
        - Object
- Request::Statistics::Counter
 
- Defined in:
- app/models/request/statistics.rb
Instance Method Summary collapse
- #completed ⇒ Object
- 
  
    
      #initialize(statistics = {})  ⇒ Counter 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Counter. 
- #pending ⇒ Object
- 
  
    
      #progress  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Percentage of passed requests out of those which haven't been failed. 
- 
  
    
      #states(exclude: [])  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns each state, with is absolute and percentage contribution to the total. 
- 
  
    
      #total  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Cancelled requests get filtered out, as generally they are administrative decisions. 
Constructor Details
#initialize(statistics = {}) ⇒ Counter
Returns a new instance of Counter.
| 4 5 6 | # File 'app/models/request/statistics.rb', line 4 def initialize(statistics = {}) @statistics = Hash.new(0).merge(statistics) end | 
Instance Method Details
#completed ⇒ Object
| 15 16 17 | # File 'app/models/request/statistics.rb', line 15 def completed %w[passed failed].sum(&method(:[])) end | 
#pending ⇒ Object
| 19 20 21 | # File 'app/models/request/statistics.rb', line 19 def pending %w[pending blocked].sum(&method(:[])) end | 
#progress ⇒ Object
Percentage of passed requests out of those which haven't been failed. I believe the reason failed requests are subtracted from the total, rather than added to pending, are because failed sequencing requests get duplicated, and in this case it wouldn't make sense to increment progress.
| 39 40 41 42 43 | # File 'app/models/request/statistics.rb', line 39 def progress return 0 if passed.zero? # If there are no passed then the progress is 0% by definition (passed * 100) / (total - failed) end | 
#states(exclude: []) ⇒ Object
Returns each state, with is absolute and percentage contribution to the total. Excluded states don't get returned, ideal for excluding pending from progress bars. Note: excluded states still form part of the calculations
| 30 31 32 33 | # File 'app/models/request/statistics.rb', line 30 def states(exclude: []) filtered_states = sorted_states.reject { |state, _statistics| exclude.include?(state) || state == 'cancelled' } filtered_states.map { |state, absolute| [state, absolute, (absolute * 100) / total] } end | 
#total ⇒ Object
Cancelled requests get filtered out, as generally they are administrative decisions
| 11 12 13 | # File 'app/models/request/statistics.rb', line 11 def total @statistics.values.sum - @statistics['cancelled'] end |