Class: Tr8n::ApiClient

Inherits:
Base
  • Object
show all
Defined in:
lib/tr8n/api_client.rb

Constant Summary collapse

API_HOST =
'https://translationexchange.com'
API_PATH =
'/tr8n/api/'

Instance Attribute Summary

Attributes inherited from Base

#attributes

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

attributes, belongs_to, has_many, #hash_value, hash_value, #initialize, #method_missing, #to_hash, #update_attributes

Constructor Details

This class inherits a constructor from Tr8n::Base

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Tr8n::Base

Class Method Details

.error?(data) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/tr8n/api_client.rb', line 57

def self.error?(data)
  not data["error"].nil?
end

Instance Method Details

#access_tokenObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/tr8n/api_client.rb', line 33

def access_token
  application.access_token ||= begin
    api("oauth/request_token",
      {
          :client_id => application.key,
          :client_secret => application.secret,
          :grant_type => :client_credentials
      },
      {
          :host => application.host
      }
    )
  end
  application.access_token["access_token"]
end

#api(path, params = {}, opts = {}) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/tr8n/api_client.rb', line 65

def api(path, params = {}, opts = {})
  Tr8n.logger.trace_api_call(path, params) do
    conn = Faraday.new(:url => host) do |faraday|
      faraday.request(:url_encoded)               # form-encode POST params
                                                  # faraday.response :logger                  # log requests to STDOUT
      faraday.adapter(Faraday.default_adapter)    # make requests with Net::HTTP
    end

    if opts[:method] == :post
      response = conn.post("#{API_PATH}#{path}", params)
    else
      response = conn.get("#{API_PATH}#{path}", params)
    end

    data = JSON.parse(response.body)

    unless data["error"].nil?
      raise Tr8n::Exception.new("Error: #{data["error"]}")
    end

    process_response(data, opts)
  end
end

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



49
50
51
# File 'lib/tr8n/api_client.rb', line 49

def get(path, params = {}, opts = {})
  api(path, params.merge(:access_token => access_token, :t => Time.now.to_i), opts)
end

#hostObject



61
62
63
# File 'lib/tr8n/api_client.rb', line 61

def host
  application.host || API_HOST
end

#object_class(opts) ⇒ Object



89
90
91
92
# File 'lib/tr8n/api_client.rb', line 89

def object_class(opts)
  return unless opts[:class]
  opts[:class].is_a?(String) ? opts[:class].constantize : opts[:class]
end

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



53
54
55
# File 'lib/tr8n/api_client.rb', line 53

def post(path, params = {}, opts = {})
  api(path, params.merge(:access_token => access_token, :t => Time.now.to_i), opts.merge(:method => :post))
end

#process_response(data, opts) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/tr8n/api_client.rb', line 94

def process_response(data, opts)
  if data["results"]
    Tr8n.logger.debug("recieved #{data["results"].size} result(s)")
    return data["results"] unless object_class(opts)
    objects = []
    data["results"].each do |data|
      objects << object_class(opts).new(data.merge(opts[:attributes] || {}))
    end
    return objects
  end

  return data unless object_class(opts)
  Tr8n.logger.debug("constructing #{object_class(opts).name}")
  object_class(opts).new(data.merge(opts[:attributes] || {}))
end