Class: ACTV::Client

Inherits:
Object
  • Object
show all
Includes:
Configurable
Defined in:
lib/actv/client.rb

Overview

Note:

Wrapper for the ACTV REST API

Constant Summary

Constants included from Configurable

ACTV::Configurable::AUTH_KEYS, ACTV::Configurable::CONFIG_KEYS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Configurable

#configure, keys

Constructor Details

#initialize(options = {}) ⇒ Client

Initialized a new Client object

@return

Parameters:

  • options (Hash) (defaults to: {})


41
42
43
44
45
# File 'lib/actv/client.rb', line 41

def initialize(options={})
  ACTV::Configurable.keys.each do |key|
    instance_variable_set("@#{key}", options[key] || ACTV.options[key])
  end
end

Instance Attribute Details

#oauth_tokenObject (readonly)

Returns the value of attribute oauth_token.



35
36
37
# File 'lib/actv/client.rb', line 35

def oauth_token
  @oauth_token
end

Instance Method Details

#article(id, params = {}) ⇒ ACTV::Article

Returns an article with the specified ID

Examples:

Return the article with the id BA288960-2718-4B20-B380-8F939596B123

ACTV.article("BA288960-2718-4B20-B380-8F939596B123")

Parameters:

  • id (String)

    An article ID.

  • options (Hash)

    A customizable set of options.

Returns:



139
140
141
142
143
144
145
146
147
148
# File 'lib/actv/client.rb', line 139

def article id, params={}
  request_string = "/v2/assets/#{id}"
  is_preview, params = params_include_preview? params
  request_string += '/preview' if is_preview

  response = get "#{request_string}.json", params

  article = ACTV::Article.new response[:body]
  article.is_article? ? article : nil
end

#articles(q, params = {}) ⇒ ACTV::SearchResults

Returns articles that match a specified query.

Examples:

Returns articles related to running

ACTV.articles('running')
ACTV.articles('running')

Parameters:

  • q (String)

    A search term.

  • options (Hash)

    A customizable set of options.

Returns:



126
127
128
129
# File 'lib/actv/client.rb', line 126

def articles(q, params={})
  response = get("/v2/search.json", params.merge({query: q, category: 'articles'}))
  ACTV::ArticleSearchResults.from_response(response)
end

#asset(id, params = {}) ⇒ Object



62
63
64
65
66
67
# File 'lib/actv/client.rb', line 62

def asset id, params={}
  params = params.with_indifferent_access
  is_preview = params.delete(:preview) == "true"
  response = request_response id, params, is_preview
  asset_from_response response
end

#asset_stats(asset_id) ⇒ Object



256
257
258
259
# File 'lib/actv/client.rb', line 256

def asset_stats asset_id
  response = get("/v2/assets/#{asset_id}/stats")
  ACTV::AssetStatsResult.new response[:body]
end

#assets(q, params = {}) ⇒ ACTV::SearchResults Also known as: search

Returns assets that match a specified query.

Examples:

Returns assets related to running

ACTV.assets('running')
ACTV.search('running')

Parameters:

  • q (String)

    A search term.

  • options (Hash)

    A customizable set of options.

Returns:



56
57
58
59
# File 'lib/actv/client.rb', line 56

def assets(q, params={})
  response = get("/v2/search.json", params.merge(query: q))
  ACTV::SearchResults.from_response(response)
end

#avatar_url(options = {}) ⇒ Object



294
295
296
# File 'lib/actv/client.rb', line 294

def avatar_url(options={})
  get("/v2/me/avatar_url", options)[:body][:avatar_url]
end

#connectionFaraday::Connection

Returns a Faraday::Connection object

Returns:

  • (Faraday::Connection)


321
322
323
# File 'lib/actv/client.rb', line 321

def connection
  @connection ||= Faraday.new(@endpoint, @connection_options.merge(:builder => @middleware))
end

#credentials?Boolean

Check whether credentials are present

Returns:

  • (Boolean)


361
362
363
# File 'lib/actv/client.rb', line 361

def credentials?
  credentials.values.all?
end

#delete(path, params = {}, options = {}) ⇒ Object

Perform an HTTP DELETE request



314
315
316
# File 'lib/actv/client.rb', line 314

def delete(path, params={}, options={})
  request(:delete, path, params, options)
end

#display_name_exists?(display_name, params = {}) ⇒ Boolean

Returns:

  • (Boolean)


286
287
288
# File 'lib/actv/client.rb', line 286

def display_name_exists?(display_name, params={})
  get("/v2/users/display_name/#{URI.escape(display_name)}", params)[:body][:exists]
end

#event(id, params = {}) ⇒ Object



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/actv/client.rb', line 155

def event(id, params={})
  request_string = "/v2/assets/#{id}"
  is_preview, params = params_include_preview? params
  request_string += '/preview' if is_preview

  response = get("#{request_string}.json", params)

  if response[:body].is_a? Array
    response[:body].map do |item|
      ACTV::Event.new item
    end
  else
    event = ACTV::Event.new response[:body]
    event = ACTV::Evergreen.new(event) if event.evergreen?
    event.is_article? ? nil : event
  end
end

#event_results(assetId, assetTypeId, options = {}) ⇒ ACTV::EventResult

Returns a result with the specified asset ID and asset type ID

Examples:

Return the result with the assetId 286F5731-9800-4C6E-ADD5-0E3B72392CA7 and assetTypeId 3BF82BBE-CF88-4E8C-A56F-78F5CE87E4C6

ACTV.event_results("286F5731-9800-4C6E-ADD5-0E3B72392CA7","3BF82BBE-CF88-4E8C-A56F-78F5CE87E4C6")

Parameters:

  • assetId (String)

    An asset ID.

  • assetTypeId (String)

    An asset type ID.

Returns:



247
248
249
250
251
252
253
254
# File 'lib/actv/client.rb', line 247

def event_results(assetId, assetTypeId, options={})
  begin
    response = get("/api/v1/events/#{assetId}/#{assetTypeId}.json", {}, options)
    ACTV::EventResult.from_response(response)
  rescue
    nil
  end
end

#events(q, params = {}) ⇒ Object



150
151
152
153
# File 'lib/actv/client.rb', line 150

def events(q, params={})
  response = get("/v2/search.json", params.merge({query: q, category: 'event'}))
  ACTV::EventSearchResults.from_response(response)
end

#find_asset_by_url(url) ⇒ ACTV::Asset

Returns an asset with the specified url path

Examples:

ACTV.asset_by_path("http://www.active.com/miami-fl/running/miami-marathon-and-half-marathon-2014")

Parameters:

  • path (String)

Returns:



103
104
105
106
107
108
# File 'lib/actv/client.rb', line 103

def find_asset_by_url(url)
  url_md5 = Digest::MD5.hexdigest(url)
  response = get("/v2/seourls/#{url_md5}?load_asset=true")

  ACTV::Asset.from_response(response)
end

#find_by_endurance_id(endurance_id) ⇒ Object



110
111
112
113
114
115
# File 'lib/actv/client.rb', line 110

def find_by_endurance_id endurance_id
  response = get "/v2/search.json", find_by_endurance_id_params(endurance_id)
  ACTV::SearchResults.from_response(response).results.select do |asset|
    asset.registrationUrlAdr.end_with?(endurance_id.to_s) and asset.assetParentAsset[:assetGuid].nil?
  end
end

#get(path, params = {}, options = {}) ⇒ Object

Perform an HTTP GET request



299
300
301
# File 'lib/actv/client.rb', line 299

def get(path, params={}, options={})
  request(:get, path, params, options)
end

#is_advantage_member?(options = {}) ⇒ Boolean

Returns:

  • (Boolean)


290
291
292
# File 'lib/actv/client.rb', line 290

def is_advantage_member?(options={})
  get("/v2/me/is_advantage_member", options)[:body][:is_advantage_member]
end

#me(params = {}) ⇒ ACTV::User

Returns the currently logged in user

Examples:

Return current_user if authentication was susccessful

ACTV.me

Parameters:

  • options (Hash)

    A customizable set of options.

Returns:



268
269
270
271
272
273
# File 'lib/actv/client.rb', line 268

def me(params={})
  response = get("/v2/me.json", params)
  user = ACTV::User.from_response(response)
  user.access_token =  @oauth_token
  user
end

#organizer(id, params = {}) ⇒ Object

Returns an organizer with the specified ID

Examples:

Return the organizer with the id AA388860-2718-4B20-B380-8F939596B123

ACTV.organizer("AA388860-2718-4B20-B380-8F939596B123")

Parameters:

  • id (String)

    An assset ID.

  • options (Hash)

    A customizable set of options.

Returns:

  • ACTV::Organizer The requested organizer.



77
78
79
80
# File 'lib/actv/client.rb', line 77

def organizer(id, params={})
  response = get("/v3/organizers/#{id}.json", params)
  ACTV::Organizer.from_response response
end

#organizers(params = {}) ⇒ ACTV::Organizer

Returns all organizers

Examples:

Returns organizers

ACTV.organizers
ACTV.organizers({per_page: 8, current_page: 2})

Parameters:

  • options (Hash)

    A customizable set of options.

Returns:



91
92
93
94
# File 'lib/actv/client.rb', line 91

def organizers(params={})
  response = get("/v3/organizers.json", params)
  ACTV::OrganizerResults.from_response response
end

Returns popular assets that match a specified query.

Examples:

Returns articles related to running

ACTV.popular_articles()
ACTV.popular_articles("topic:running")

Parameters:

  • options (Hash)

    A customizable set of options.

Returns:



207
208
209
210
# File 'lib/actv/client.rb', line 207

def popular_articles(params={})
  response = get("/v2/articles/popular", params)
  ACTV::ArticleSearchResults.from_response(response)
end

Returns popular assets that match a specified query.

Examples:

Returns articles related to running

ACTV.popular_events()
ACTV.popular_events("topic:running")

Parameters:

  • options (Hash)

    A customizable set of options.

Returns:



181
182
183
184
# File 'lib/actv/client.rb', line 181

def popular_events(params={})
  response = get("/v2/events/popular", params)
  ACTV::SearchResults.from_response(response)
end

Returns popular interests

Examples:

Returns most popular interests

ACTV.popular_interests()
ACTV.popular_interests({per_page: 8})

Parameters:

  • options (Hash) (defaults to: {})

    A customizable set of options.

Returns:



220
221
222
223
# File 'lib/actv/client.rb', line 220

def popular_interests(params={}, options={})
  response = get("/interest/_search", params, options)
  ACTV::PopularInterestSearchResults.from_response(response)
end

Returns popular searches

Examples:

Returns most popular searches

ACTV.popular_searches()
ACTV.popular_searches({per_page: 8})

Parameters:

  • options (Hash) (defaults to: {})

    A customizable set of options.

Returns:

  • (ACTV::PopularSearchSearchResults)

    Return searches



233
234
235
236
237
# File 'lib/actv/client.rb', line 233

def popular_searches(options={})
  #response = get("/v2/articles/popular", params)
  #ACTV::ArticleSearchResults.from_response(response)
  ["Couch to 5k","Kids' Camps","Swimming Classes","Half Marathons in Southern CA","Gyms in Solana Beach","Dignissim Qui Blandit","Dolore Te Feugait","Lorem Ipsum","Convnetio Ibidem","Aliquam Jugis"]
end

#post(path, params = {}, options = {}) ⇒ Object

Perform an HTTP POST request



304
305
306
# File 'lib/actv/client.rb', line 304

def post(path, params={}, options={})
  request(:post, path, params, options)
end

#put(path, params = {}, options = {}) ⇒ Object

Perform an HTTP UPDATE request



309
310
311
# File 'lib/actv/client.rb', line 309

def put(path, params={}, options={})
  request(:put, path, params, options)
end

#request(method, path, params, options) ⇒ Object

Perform an HTTP Request



326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
# File 'lib/actv/client.rb', line 326

def request(method, path, params, options)
  uri = options[:endpoint] || @endpoint
  uri = URI(uri) unless uri.respond_to?(:host)
  uri += path
  request_headers = {}
  params[:api_key] = @api_key unless @api_key.nil?

  if self.credentials?
    # When posting a file, don't sign any params
    signature_params = if [:post, :put].include?(method.to_sym) && params.values.any?{|value| value.is_a?(File) || (value.is_a?(Hash) && (value[:io].is_a?(IO) || value[:io].is_a?(StringIO)))}
      {}
    else
      params
    end
    authorization = SimpleOAuth::Header.new(method, uri, signature_params, credentials)
    request_headers[:authorization] = authorization.to_s.sub('OAuth', "Bearer")
  end
  connection.url_prefix = options[:endpoint] || @endpoint
  connection.run_request(method.to_sym, path, nil, request_headers) do |request|
    unless params.empty?
      case request.method
      when :post, :put
        request.body = params
      else
        request.params.update(params)
      end
    end
    yield request if block_given?
  end.env
rescue Faraday::Error::ClientError
  raise ACTV::Error::ClientError
end

#upcoming_events(params = {}) ⇒ ACTV::SearchResults

Returns upcoming assets that match a specified query.

Examples:

Returns articles related to running

ACTV.upcoming_events()
ACTV.upcoming_events("topic:running")

Parameters:

  • options (Hash)

    A customizable set of options.

Returns:



194
195
196
197
# File 'lib/actv/client.rb', line 194

def upcoming_events(params={})
  response = get("/v2/events/upcoming", params)
  ACTV::SearchResults.from_response(response)
end

#update_me(user, params = {}) ⇒ Object



275
276
277
278
279
280
# File 'lib/actv/client.rb', line 275

def update_me(user, params={})
  response = put("/v2/me.json", params.merge(user))
  user = ACTV::User.from_response(response)
  user.access_token =  @oauth_token
  user
end

#user_name_exists?(user_name, params = {}) ⇒ Boolean

Returns:

  • (Boolean)


282
283
284
# File 'lib/actv/client.rb', line 282

def user_name_exists?(user_name, params={})
  get("/v2/users/user_name/#{user_name}", params)[:body][:exists]
end