class Smugsyncv2::Client

Constants

TOKEN_FILE

Public Class Methods

new(key, secret, logger = false) click to toggle source
# File lib/smugsyncv2/client.rb, line 7
def initialize(key, secret, logger = false)
  @uris = nil
  @key = key
  @secret = secret
  @logger = logger
end

Public Instance Methods

access_token() click to toggle source
# File lib/smugsyncv2/client.rb, line 36
def access_token
  @access_token ||= login
end
adapter(url: BASE_URL) click to toggle source
# File lib/smugsyncv2/client.rb, line 59
def adapter(url: BASE_URL)
  @connection = Faraday.new(url: url) do |conn|
    conn.request :json
    conn.response :json
    conn.adapter Faraday.default_adapter
    conn.response :logger if @logger
  end
end
cache_token(token) click to toggle source
# File lib/smugsyncv2/client.rb, line 53
def cache_token(token)
  File.open(TOKEN_FILE, 'w') do |file|
    file.write Marshal.dump(token)
  end
end
connection(**args) click to toggle source
# File lib/smugsyncv2/client.rb, line 68
def connection(**args)
  @connection ||= adapter(**args)
end
consumer() click to toggle source
# File lib/smugsyncv2/client.rb, line 40
def consumer
  if @consumer
    @consumer
  else
    login
    @consumer
  end
end
get_oauth_header(method, url, params) click to toggle source
# File lib/smugsyncv2/client.rb, line 72
def get_oauth_header(method, url, params)
  SimpleOAuth::Header.new(
  method, url,
  params,
  consumer_key: @key,
  consumer_secret: @secret,
  token: access_token.token,
  token_secret: access_token.secret,
  version: '1.0').to_s
end
get_uri(name) click to toggle source
# File lib/smugsyncv2/client.rb, line 109
def get_uri(name)
  uri = @uris.send(name).Uri
  request(path: uri)
  if @response && @response.Response && @response.Response.send(name)
    @uris = @response['Response'][name]['Uris']
  end
  @response
end
load_cached_token() click to toggle source
# File lib/smugsyncv2/client.rb, line 49
def load_cached_token
  Marshal.load(File.open(TOKEN_FILE, 'r'))
end
login() click to toggle source
# File lib/smugsyncv2/client.rb, line 22
def login # rubocop:disable Metrics/MethodLength
  @consumer = OAuth::Consumer.new(@key, @secret, oauth_opts)
  return load_cached_token if File.exist?(TOKEN_FILE)
  @request_token = @consumer.get_request_token
  authorize_url = @request_token.authorize_url + '&Access=Full'
  puts "Open a web browser and open: #{authorize_url}"
  puts 'Enter the validation code: '
  verification_code = STDIN.gets.chomp
  @access_token = @request_token.get_access_token(
  oauth_verifier: verification_code)
  cache_token(@access_token)
  @access_token
end
oauth_opts() click to toggle source
# File lib/smugsyncv2/client.rb, line 14
def oauth_opts
  { site: OAUTH_ORIGIN,
    request_token_path: REQUEST_TOKEN_PATH,
    access_token_path: ACCESS_TOKEN_PATH,
    authorize_path: AUTHORIZE_PATH
  }
end
request(method: :get, path: nil, params: {}, body: {}, headers: {}) click to toggle source
# File lib/smugsyncv2/client.rb, line 83
def request(method: :get, path: nil, params: {}, body: {}, headers: {})
  url     = path.nil? ? BASE_URL : File.join(API_ORIGIN, path)
  base_headers = { 'User-Agent' => USER_AGENT, 'Accept' => 'application/json' }
  headers = base_headers.merge(headers || {})

  adapter(url: url)
  response = @connection.send(method) do |req|
    oauth_header = get_oauth_header(method, url, params)
    req.headers.merge!('Authorization' => oauth_header)

    req.url url
    req.headers.merge!(headers)
    req.params.merge!(params)
    req.body = body
  end
  @response = DeepOpenStruct.load(response.body)
end
user() click to toggle source
# File lib/smugsyncv2/client.rb, line 101
def user
  res = request
  uri = res.Response.Uris.AuthUser.Uri
  user = request(path: uri)
  user = user.Response.User.Uris
  @uris = user
end