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