Class: Renalware::HD::Sessions::AuditableSessionCollection::MeanValueStrategy

Inherits:
Object
  • Object
show all
Defined in:
app/models/renalware/hd/sessions/auditable_session_collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sessions:, selector:) ⇒ MeanValueStrategy

Returns a new instance of MeanValueStrategy.



136
137
138
139
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 136

def initialize(sessions:, selector:)
  @sessions = sessions
  @selector = selector
end

Instance Attribute Details

#selectorObject (readonly)

Returns the value of attribute selector.



134
135
136
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 134

def selector
  @selector
end

#sessionsObject (readonly)

Returns the value of attribute sessions.



134
135
136
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 134

def sessions
  @sessions
end

Instance Method Details

#callObject



141
142
143
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 141

def call
  values.blank? ? 0 : mean
end

#meanObject



157
158
159
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 157

def mean
  (total.to_f / values.count.to_f).round(2)
end

#number?(val) ⇒ Boolean

Returns:

  • (Boolean)


161
162
163
164
165
166
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 161

def number?(val)
  Float(val)
  true
rescue ArgumentError, TypeError
  false
end

#totalObject



153
154
155
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 153

def total
  @total ||= values.inject(0.0) { |sum, value| sum + value.to_f }
end

#valuesObject

Note here we ignore values that cannot be coerced into a number Any values like “## TEST CANCELLED” etc are thus excluded from the calculation



147
148
149
150
151
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 147

def values
  @values ||= begin
    sessions.map { |session| selector.call(session) }.compact.select { |val| number?(val) }
  end
end