Class: GarminConnect::Activity
- Inherits:
-
Object
- Object
- GarminConnect::Activity
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
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 =~ /(.*)=$/ 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
#attributes ⇒ Object
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
|
.base ⇒ Object
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_hr ⇒ Object
91
92
93
|
# File 'lib/garmin_connect/activity.rb', line 91
def avg_hr
hr_data? and self.activitySummary.WeightedMeanHeartRate.value.to_i
end
|
#details ⇒ Object
109
110
111
|
# File 'lib/garmin_connect/activity.rb', line 109
def details
@details ||= self.class.details(self.activityId)
end
|
#distance ⇒ Object
94
95
96
|
# File 'lib/garmin_connect/activity.rb', line 94
def distance
activitySummary.SumDistance.value.to_f.round(2)
end
|
#dur_secs ⇒ Object
103
104
105
|
# File 'lib/garmin_connect/activity.rb', line 103
def dur_secs
activitySummary.SumElapsedDuration.value.to_f.round
end
|
#duration ⇒ Object
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
87
88
89
90
|
# File 'lib/garmin_connect/activity.rb', line 87
def hr_data?
activitySummary.has_key? 'WeightedMeanHeartRate'
end
|
#id ⇒ Object
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
|
#metrics ⇒ Object
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'] }
@metrics ||= Metric.init_multiple(details.metrics, metric_data)
end
|
#pace ⇒ Object
100
101
102
|
# File 'lib/garmin_connect/activity.rb', line 100
def pace
Time.at(self.pace_secs).strftime("%M:%S")
end
|
#pace_secs ⇒ Object
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
|
#url ⇒ Object
142
143
144
|
# File 'lib/garmin_connect/activity.rb', line 142
def url
"http://connect.garmin.com/activity/#{self.activityId}"
end
|