Class: Strava::Models::Stream

Inherits:
Response show all
Defined in:
lib/strava/models/stream.rb

Overview

Represents a single stream of time-series data from the Strava API.

A Stream contains both metadata about the data collection and the actual data array. Common stream types include: time, distance, latlng, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, and grade_smooth.

Examples:

Accessing heartrate stream data

streams = client.activity_streams(1234567890, keys: 'heartrate,watts')
hr_data = streams.heartrate.data
puts "Average HR: #{hr_data.sum / hr_data.size}"
puts "Max HR: #{hr_data.max}"

Working with GPS coordinates

streams = client.activity_streams(1234567890, keys: 'latlng')
coords = streams.latlng.data  # Array of [lat, lng] pairs
coords.each do |lat, lng|
  puts "#{lat}, #{lng}"
end

Computing elevation gain and loss from an altitude stream

streams = client.activity_streams(1234567890, keys: 'altitude')
puts streams.altitude.total_elevation_gain_s  # => "725.3m"
puts streams.altitude.total_elevation_loss_s  # => "680.1m"

See Also:

Instance Method Summary collapse

Instance Method Details

#dataArray

Returns Array of data points. The type of data depends on the stream:

  • time: Array of integers (seconds from start)
  • distance: Array of floats (meters from start)
  • latlng: Array of [latitude, longitude] coordinate pairs
  • altitude: Array of floats (meters)
  • velocity_smooth: Array of floats (meters per second)
  • heartrate: Array of integers (beats per minute)
  • cadence: Array of integers (RPM for cycling, steps/min for running)
  • watts: Array of integers (power in watts)
  • temp: Array of integers (temperature in celsius)
  • moving: Array of booleans (true if moving, false if stopped)
  • grade_smooth: Array of floats (grade as percentage).

Returns:

  • (Array)

    Array of data points. The type of data depends on the stream:

    • time: Array of integers (seconds from start)
    • distance: Array of floats (meters from start)
    • latlng: Array of [latitude, longitude] coordinate pairs
    • altitude: Array of floats (meters)
    • velocity_smooth: Array of floats (meters per second)
    • heartrate: Array of integers (beats per minute)
    • cadence: Array of integers (RPM for cycling, steps/min for running)
    • watts: Array of integers (power in watts)
    • temp: Array of integers (temperature in celsius)
    • moving: Array of booleans (true if moving, false if stopped)
    • grade_smooth: Array of floats (grade as percentage)


56
# File 'lib/strava/models/stream.rb', line 56

property 'data'

#original_sizeInteger

Returns Total number of data points in the original stream before any resampling.

Returns:

  • (Integer)

    Total number of data points in the original stream before any resampling



36
# File 'lib/strava/models/stream.rb', line 36

property 'original_size'

#resolutionString

Returns Resolution of the stream data ("low", "medium", or "high").

Returns:

  • (String)

    Resolution of the stream data ("low", "medium", or "high")



39
# File 'lib/strava/models/stream.rb', line 39

property 'resolution'

#series_typeString

Returns Type of series - how data points are indexed ("time" or "distance").

Returns:

  • (String)

    Type of series - how data points are indexed ("time" or "distance")



42
# File 'lib/strava/models/stream.rb', line 42

property 'series_type'

#total_elevation_gainFloat?

Returns the total elevation gain, calculated as the sum of all positive elevation increases between consecutive data points.

This is only meaningful when the stream represents altitude data.

Examples:

streams = client.activity_streams(1234567890, keys: 'altitude')
puts streams.altitude.total_elevation_gain # => 725.3

Returns:

  • (Float, nil)

    Total elevation gain in meters, or nil if data is not present



70
71
72
73
74
# File 'lib/strava/models/stream.rb', line 70

def total_elevation_gain
  return if data.nil?

  data.each_cons(2).sum { |a, b| b > a ? b - a : 0 }
end

#total_elevation_gain_sString?

Returns formatted total elevation gain in meters.

Returns:

  • (String, nil)

    Formatted elevation (e.g., "725.3m")



99
100
101
102
103
104
# File 'lib/strava/models/stream.rb', line 99

def total_elevation_gain_s
  gain = total_elevation_gain
  return if gain.nil?

  format('%gm', format('%.1f', gain))
end

#total_elevation_lossFloat?

Returns the total elevation loss, calculated as the sum of all negative elevation decreases between consecutive data points.

This is only meaningful when the stream represents altitude data.

Examples:

streams = client.activity_streams(1234567890, keys: 'altitude')
puts streams.altitude.total_elevation_loss # => 680.1

Returns:

  • (Float, nil)

    Total elevation loss in meters, or nil if data is not present



88
89
90
91
92
# File 'lib/strava/models/stream.rb', line 88

def total_elevation_loss
  return if data.nil?

  data.each_cons(2).sum { |a, b| a > b ? a - b : 0 }
end

#total_elevation_loss_sString?

Returns formatted total elevation loss in meters.

Returns:

  • (String, nil)

    Formatted elevation (e.g., "680.1m")



111
112
113
114
115
116
# File 'lib/strava/models/stream.rb', line 111

def total_elevation_loss_s
  loss = total_elevation_loss
  return if loss.nil?

  format('%gm', format('%.1f', loss))
end