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: {})


51
52
53
54
55
# File 'lib/actv/client.rb', line 51

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.



45
46
47
# File 'lib/actv/client.rb', line 45

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:



149
150
151
152
153
154
155
156
157
158
# File 'lib/actv/client.rb', line 149

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:



136
137
138
139
# File 'lib/actv/client.rb', line 136

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



72
73
74
75
76
77
# File 'lib/actv/client.rb', line 72

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



278
279
280
281
# File 'lib/actv/client.rb', line 278

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:



66
67
68
69
# File 'lib/actv/client.rb', line 66

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

#avatar_url(options = {}) ⇒ Object



316
317
318
# File 'lib/actv/client.rb', line 316

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

#connectionFaraday::Connection

Returns a Faraday::Connection object

Returns:

  • (Faraday::Connection)


343
344
345
# File 'lib/actv/client.rb', line 343

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

#credentials?Boolean

Check whether credentials are present

Returns:

  • (Boolean)


383
384
385
# File 'lib/actv/client.rb', line 383

def credentials?
  credentials.values.all?
end

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

Perform an HTTP DELETE request



336
337
338
# File 'lib/actv/client.rb', line 336

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

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

Returns:

  • (Boolean)


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

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

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



165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/actv/client.rb', line 165

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:



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

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



160
161
162
163
# File 'lib/actv/client.rb', line 160

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:



113
114
115
116
117
118
# File 'lib/actv/client.rb', line 113

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



120
121
122
123
124
125
# File 'lib/actv/client.rb', line 120

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



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

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

#is_advantage_member?(options = {}) ⇒ Boolean

Returns:

  • (Boolean)


312
313
314
# File 'lib/actv/client.rb', line 312

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:



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

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.



87
88
89
90
# File 'lib/actv/client.rb', line 87

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:



101
102
103
104
# File 'lib/actv/client.rb', line 101

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:



229
230
231
232
# File 'lib/actv/client.rb', line 229

def popular_articles(params={})
  response = get("/v2/articles/popular", params)
  ACTV::SearchResults.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:



203
204
205
206
# File 'lib/actv/client.rb', line 203

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:



242
243
244
245
# File 'lib/actv/client.rb', line 242

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



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

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



326
327
328
# File 'lib/actv/client.rb', line 326

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

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

Perform an HTTP UPDATE request



331
332
333
# File 'lib/actv/client.rb', line 331

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

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

Perform an HTTP Request



348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/actv/client.rb', line 348

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:



216
217
218
219
# File 'lib/actv/client.rb', line 216

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

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



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

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)


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

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

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



183
184
185
186
187
188
# File 'lib/actv/client.rb', line 183

def video(id, params={})
  request_string = "/v2/assets/#{id}"
  response = get "#{request_string}.json", params

  ACTV::Video.new response[:body]
end

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



190
191
192
193
# File 'lib/actv/client.rb', line 190

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