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



31
32
33
34
35
# File 'lib/actv/client.rb', line 31

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.



25
26
27
# File 'lib/actv/client.rb', line 25

def oauth_token
  @oauth_token
end

Instance Method Details

#article(id) ⇒ 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")


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

def article(id)
  response = get("/v2/assets/#{id}.json")
  article = ACTV::Article.from_response(response)
  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')


97
98
99
100
# File 'lib/actv/client.rb', line 97

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

#asset(id, params = {}) ⇒ ACTV::Asset

Returns an asset with the specified ID in an array

Examples:

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

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


60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/actv/client.rb', line 60

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

  if response[:body].is_a? Array 
    results = []
    response[:body].each do |item|
      results << ACTV::Asset.from_response({body: item})
    end
    results
  else        
    [ACTV::Asset.from_response(response)]
  end    
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')


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

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

#avatar_url(options = {}) ⇒ Object



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

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

#connectionFaraday::Connection

Returns a Faraday::Connection object



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

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

#credentials?Boolean

Check whether credentials are present



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

def credentials?
  credentials.values.all?
end

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

Perform an HTTP DELETE request



264
265
266
# File 'lib/actv/client.rb', line 264

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

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



236
237
238
# File 'lib/actv/client.rb', line 236

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

#event(id) ⇒ Object



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

def event(id)
  response = get("/v2/assets/#{id}.json")
  event = ACTV::Event.from_response(response)
  event = ACTV::Evergreen.new(event) if event.evergreen?
  event.is_article? ? nil : event
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")


202
203
204
205
206
207
208
209
# File 'lib/actv/client.rb', line 202

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



116
117
118
119
# File 'lib/actv/client.rb', line 116

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")


81
82
83
84
85
86
# File 'lib/actv/client.rb', line 81

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

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

Perform an HTTP GET request



249
250
251
# File 'lib/actv/client.rb', line 249

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

#is_advantage_member?(options = {}) ⇒ Boolean



240
241
242
# File 'lib/actv/client.rb', line 240

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


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

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

Returns popular assets that match a specified query.

Examples:

Returns articles related to running

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


162
163
164
165
# File 'lib/actv/client.rb', line 162

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")


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

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


175
176
177
178
# File 'lib/actv/client.rb', line 175

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


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

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



254
255
256
# File 'lib/actv/client.rb', line 254

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

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

Perform an HTTP UPDATE request



259
260
261
# File 'lib/actv/client.rb', line 259

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

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

Perform an HTTP Request



276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/actv/client.rb', line 276

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")


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

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

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



225
226
227
228
229
230
# File 'lib/actv/client.rb', line 225

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



232
233
234
# File 'lib/actv/client.rb', line 232

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