Class: GarminConnect::Activity

Inherits:
Object
  • Object
show all
Defined in:
lib/garmin_connect/activity.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Activity

Returns a new instance of Activity.



67
68
69
70
71
72
73
74
75
76
# File 'lib/garmin_connect/activity.rb', line 67

def initialize(data)
  case data
  when Hash
    # nil
  when Integer, String
    data = self.class.get(data)
  end
  @metrics = nil
  @attributes = data
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/garmin_connect/activity.rb', line 126

def method_missing(method, *args)
  if args.size == 1 && method.to_s =~ /(.*)=$/ # ripped from hashie
    return @attributes[$1.to_s] = args.first
  end
  obj = @attributes[method.to_s]
  case obj
  when Base::Hash, Base::Array
    obj
  when Hash, Array
    @attributes[method.to_s] = Base.generate(obj)
  when nil
    super(method, *args)
  else
    obj
  end
end

Instance Attribute Details

#attributesObject (readonly)

Returns the value of attribute attributes.



65
66
67
# File 'lib/garmin_connect/activity.rb', line 65

def attributes
  @attributes
end

Class Method Details

.activities(format = nil) ⇒ Object



164
165
166
# File 'lib/garmin_connect/activity.rb', line 164

def activities(format = nil)
  Base.request(self.base, format, "/activities")
end

.baseObject



146
147
148
# File 'lib/garmin_connect/activity.rb', line 146

def base
  'http://connect.garmin.com/proxy/activity-service-1.3/'
end

.details(id, format = nil) ⇒ Object



152
153
154
155
# File 'lib/garmin_connect/activity.rb', line 152

def details(id, format = nil)
  h = Base.request(self.base, format, "/activityDetails/#{validate_id(id)}")['com.garmin.activity.details.json.ActivityDetails']
  Base::Hash[h]
end

.get(id, format = nil) ⇒ Object



149
150
151
# File 'lib/garmin_connect/activity.rb', line 149

def get(id, format = nil)
  Base.request(self.base, format, "/activity/#{validate_id(id)}")['activity']
end

.validate_id(id) ⇒ Object

def course(id, format = nil)

h = Base.request(self.base, format, "/course/#{validate_id(id)}")['com.garmin.activity.details.json.ActivityDetails']
Base::Hash[h]

end



160
161
162
# File 'lib/garmin_connect/activity.rb', line 160

def validate_id(id)
  id = Integer === id ? id : id.split('/').last
end

Instance Method Details

#[](something) ⇒ Object



77
78
79
# File 'lib/garmin_connect/activity.rb', line 77

def [](something)
  @attributes[something]
end

#avg_hrObject



91
92
93
# File 'lib/garmin_connect/activity.rb', line 91

def avg_hr
  hr_data? and self.activitySummary.WeightedMeanHeartRate.value.to_i
end

#detailsObject



109
110
111
# File 'lib/garmin_connect/activity.rb', line 109

def details
  @details ||= self.class.details(self.activityId)
end

#distanceObject



94
95
96
# File 'lib/garmin_connect/activity.rb', line 94

def distance
  activitySummary.SumDistance.value.to_f.round(2)
end

#dur_secsObject



103
104
105
# File 'lib/garmin_connect/activity.rb', line 103

def dur_secs
  activitySummary.SumElapsedDuration.value.to_f.round
end

#durationObject



106
107
108
# File 'lib/garmin_connect/activity.rb', line 106

def duration
  Time.at(self.dur_secs).strftime("%M:%S")
end

#hr_data?Boolean

Returns:

  • (Boolean)


87
88
89
90
# File 'lib/garmin_connect/activity.rb', line 87

def hr_data?
  # puts @attributes.keys
  activitySummary.has_key? 'WeightedMeanHeartRate'
end

#idObject



80
81
82
# File 'lib/garmin_connect/activity.rb', line 80

def id
  self.activityId
end

#latlong(what = :begin) ⇒ Object



118
119
120
121
122
123
124
125
# File 'lib/garmin_connect/activity.rb', line 118

def latlong(what = :begin)
  case what
  when :begin
    [self.activitySummary.BeginLatitude.value, self.activitySummary.BeginLongitude.value]
  when :end
    [self.activitySummary.EndLatitude.value, self.activitySummary.EndLongitude.value]
  end
end

#metricsObject



112
113
114
115
116
117
# File 'lib/garmin_connect/activity.rb', line 112

def metrics
  return @metrics if @metrics
  metric_data = details.measurements.sort_by{ |hash| hash['metricsIndex'] }.map{ |hash| hash['key'] }
  # puts metric_data.inspect
  @metrics ||= Metric.init_multiple(details.metrics, metric_data)
end

#paceObject



100
101
102
# File 'lib/garmin_connect/activity.rb', line 100

def pace
  Time.at(self.pace_secs).strftime("%M:%S")
end

#pace_secsObject



97
98
99
# File 'lib/garmin_connect/activity.rb', line 97

def pace_secs
  (activitySummary.WeightedMeanMovingPace.value.to_f * 60).round
end

#time(what = :begin) ⇒ Object



83
84
85
86
# File 'lib/garmin_connect/activity.rb', line 83

def time(what = :begin)
  h = what == :begin ? self.activitySummary.BeginTimestamp : self.activitySummary.EndTimestamp
  ActiveSupport::TimeWithZone.new(Time.parse(h.value), ActiveSupport::TimeZone.new(h.uom))
end

#urlObject



142
143
144
# File 'lib/garmin_connect/activity.rb', line 142

def url
  "http://connect.garmin.com/activity/#{self.activityId}"
end