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