class MShealth::Client

Public Instance Methods

activities(start_time:,end_time:,**options) click to toggle source
# File lib/MShealth/client.rb, line 90
def activities(start_time:,end_time:,**options)
  query = {}

  query['startTime'] = start_time.iso8601
  query['endTime'] = end_time.iso8601
  query['activityTypes'] = options[:activity_types] if options.key?(:activity_types)
  query = handle_activity_include(query,options)

  response = response = handle_response("/"+configuration.api_version+"/me/Activities",
  :headers => {"Authorization" => "bearer "+configuration.token},
  :query => query)

  result = []

  types = ['bike','freePlay','golf','guidedWorkout','run','sleep']

  result = extract_activities(types,response,result)

  while response.key?("nextPage")
    response = handle_response(response['nextPage'],:headers => {"Authorization" => "bearer "+configuration.token})
    result = extract_activities(types,response,result)
  end

  result
end
activity(id:,**options) click to toggle source
# File lib/MShealth/client.rb, line 78
def activity(id:,**options)
  query = {}
  query = handle_activity_include(query,options)

  response = handle_response("/"+configuration.api_version+"/me/Activities/"+id,
  :headers => {"Authorization" => "bearer "+configuration.token},
  :query => query)

  MShealth::Mash.new(response)

end
configuration() click to toggle source
# File lib/MShealth/client.rb, line 11
def configuration
  @configuration ||= Configuration.new
end
configure() { |configuration| ... } click to toggle source
# File lib/MShealth/client.rb, line 15
def configure
  yield configuration
end
device(id:) click to toggle source
# File lib/MShealth/client.rb, line 35
def device(id:)
  response = handle_response("/"+configuration.api_version+"/me/Devices/"+id,
  :headers => {"Authorization" => "bearer "+configuration.token})
  MShealth::Mash.new(response)
end
devices() click to toggle source
# File lib/MShealth/client.rb, line 25
def devices
  response = handle_response("/"+configuration.api_version+"/me/Devices",
  :headers => {"Authorization" => "bearer "+configuration.token})
  devices = []
  response['deviceProfiles'].each do |device|
    devices << MShealth::Mash.new(device)
  end
  devices
end
profile() click to toggle source
# File lib/MShealth/client.rb, line 19
def profile
  response = handle_response("/"+configuration.api_version+"/me/Profile",
  :headers => {"Authorization" => "bearer "+configuration.token})
  MShealth::Mash.new(response)
end
summary(period:,start_time:,**options) click to toggle source
# File lib/MShealth/client.rb, line 41
def summary(period:,start_time:,**options)
  query = {}
  query['startTime'] = start_time.iso8601
  query['endTime'] = options[:end_time].iso8601 if options.key?(:end_time)
  query['deviceIds'] = options[:device_id] if options.key?(:device_id)

  period_str = nil
  response = nil

  case period
  when "hourly"
    period_str = 'Hourly'
  when "daily"
    period_str = 'Daily'
  else
  end

  response = handle_response("/"+configuration.api_version+"/me/Summaries/"+period_str,
  :headers => {"Authorization" => "bearer "+configuration.token},
  :query => query)

  result = []

  response['summaries'].each do |summary|
    result << MShealth::Mash.new(summary)
  end

  while response.key?("nextPage")
    response = handle_response(response['nextPage'],:headers => {"Authorization" => "bearer "+configuration.token})
    response['summaries'].each do |summary|
      result << MShealth::Mash.new(summary)
    end
  end

  result
end

Private Instance Methods

extract_activities(types,response,result) click to toggle source
# File lib/MShealth/client.rb, line 154
def extract_activities(types,response,result)
  types.each do |type|
    name = type + 'Activities'
    if !response[name].nil?
      response[name].each do |activity|
        result << MShealth::Mash.new(activity)
      end
    end
  end
  result
end
handle_activity_include(query,options) click to toggle source
# File lib/MShealth/client.rb, line 141
def handle_activity_include(query,options)
  query['activityIncludes'] = ""
  query['activityIncludes'] += "Details," if options.key?(:details)
  query['activityIncludes'] += "MinuteSummaries," if options.key?(:minute_summaries)
  query['activityIncludes'] += "MapPoints," if options.key?(:map_points)
  if query['activityIncludes'] == ""
    query.delete('activityIncludes')
  else
    query['activityIncludes'] = query['activityIncludes'][0...-1]
  end
  query
end
handle_response(*args) click to toggle source
# File lib/MShealth/client.rb, line 117
def handle_response(*args)
  response = self.class.get(*args)

  case response.code.to_s
  when "401"
    raise MShealth::Errors::UnauthorizedError.new, response
  when "400"
    raise MShealth::Errors::BadRequestError.new, response
  when "403"
    raise MShealth::Errors::ForbiddenError.new, response
  when "404"
    raise MShealth::Errors::NotFoundError.new, response
  when "429"
    raise MShealth::Errors::TooManyRequestsError.new, response
  when "500"
    raise MShealth::Errors::ServerError.new, response
  when "200"
    return response
  else
    puts response.code.to_s
  end

end