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



160
161
162
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 160

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

#number?(val) ⇒ Boolean

Returns:

  • (Boolean)


164
165
166
167
168
169
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 164

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

#totalObject



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

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
152
153
154
# 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