class Strava::Base

Base class for Strava objects. Handles setting up the object, mainly data and a client.

@abstract

Attributes

client[R]
id[R]
response[R]

Public Class Methods

new(data, client: nil, token: nil, **opts) click to toggle source
# File lib/strava/base.rb, line 9
def initialize(data, client: nil, token: nil, **opts)
  raise 'missing client or access token' unless (client || token)
  @client   = client || Client.new(token)
  if data.is_a?(Hash)
    @id       = data['id']
    set_ivars
    update(data, **opts)
  else
    @id = data
    set_ivars
  end
end
resource_states() click to toggle source
# File lib/strava/base.rb, line 77
def self.resource_states
  @resource_states ||= {
    1 => 'meta',
    2 => 'summary',
    3 => 'detailed',
  }
end

Public Instance Methods

detailed?() click to toggle source
# File lib/strava/base.rb, line 73
def detailed?
  @resource_state == 3
end
resource_state() click to toggle source
# File lib/strava/base.rb, line 65
def resource_state
  self.class.resource_states[@resource_state]
end
summary?() click to toggle source
# File lib/strava/base.rb, line 69
def summary?
  @resource_state == 2
end
update(data, **opts) click to toggle source

Parse incoming data. Should be defined by subclasses.

@abstract

# File lib/strava/base.rb, line 26
def update(data, **opts)
  @response       = data
  @resource_state = data['resource_state']
  self
end

Private Instance Methods

parse_data(existing, data, klass: nil, **opts) click to toggle source
# File lib/strava/base.rb, line 42
        def parse_data(existing, data, klass: nil, **opts)
  existing ||= {}
  case data
  when [], {}
    []
  when Array
    data.map do |hash|
      current = existing[hash['id']]
      if current
        current.send(:update, hash, **opts)
      else
        current = klass.new(hash, **opts)
        existing[current.id] = current
      end
      existing[current.id]
    end
  when Hash
    existing[data['id']] = klass.new(data, **opts)
  else
    # raise
  end
end
set_ivars() click to toggle source

Set up instance variables upon instantiation. Should be defined by subclasses. May not always be necessary.

@abstract @return [void]

# File lib/strava/base.rb, line 38
        def set_ivars
  # this should be defined by subclasses
end