class StravaTT::EffortFinder

Attributes

client[R]
end_time_limit[R]
segment_id[R]
start_time_limit[R]

Public Class Methods

new(user_access_token, start_time, end_time, segment_id) click to toggle source
# File lib/stravatt/effort_finder.rb, line 5
def initialize user_access_token, start_time, end_time, segment_id
  validate_time_params start_time: start_time, end_time: end_time

  @client           = MiniStrava::Client.new user_access_token
  @start_time_limit = start_time
  @end_time_limit   = end_time
  @segment_id       = segment_id
end

Public Instance Methods

find_effort_on_activity(activity_id) click to toggle source
# File lib/stravatt/effort_finder.rb, line 28
def find_effort_on_activity activity_id
  activity = client.activity activity_id
  effort = activity.segment_efforts.find do |se|
    se.segment.id == segment_id
  end
  return nil unless effort

  start_time = Time.parse effort.start_date
  end_time = start_time + effort.moving_time
  end_time > end_time_limit ? nil : effort
rescue MiniStrava::Client::ResourceNotFound
end
find_first() click to toggle source
# File lib/stravatt/effort_finder.rb, line 14
def find_first
  efforts = client.activities(after: start_time_limit.to_i, before: end_time_limit.to_i).map do |a|
    find_effort_on_activity a.id
  end.compact

  efforts.sort! do |a, b|
    start_time_a = Time.parse a.start_date
    start_time_b = Time.parse b.start_date
    start_time_a <=> start_time_b
  end

  efforts.first
end

Private Instance Methods

validate_time_params(params={}) click to toggle source
# File lib/stravatt/effort_finder.rb, line 43
def validate_time_params params={}
  params.each do |k, v|
    raise TypeError.new "#{k} must be of type Time" unless v.is_a? Time
  end
end