class ParcelApi::Client

Attributes

address[RW]
auth_address[RW]
client_id[RW]
client_secret[RW]
password[RW]
redis[RW]
username[RW]

Public Class Methods

connection() click to toggle source
# File lib/parcel_api/client.rb, line 18
def self.connection
  @connection ||= new.connection
end
new() click to toggle source
# File lib/parcel_api/client.rb, line 22
def initialize
  @client_id     = client_id     || ENV['CLIENT_ID']
  @client_secret = client_secret || ENV['CLIENT_SECRET']
  @username      = username      || ENV['USERNAME']
  @password      = password      || ENV['PASSWORD']
  @address       = address       || 'https://api.nzpost.co.nz'
  @auth_address  = auth_address  || 'https://oauth.nzpost.co.nz/as/token.oauth2'
  @redis         = redis         || Redis.new
end

Public Instance Methods

connection() click to toggle source
# File lib/parcel_api/client.rb, line 32
def connection
  @access_token_cache ||= begin
    if json = @redis.get(:parcel_api_access_token)
      access_token = OAuth2::AccessToken.from_hash client, JSON.parse(json)
    else
      access_token = client.password.get_token @username, @password
      @redis.set(:parcel_api_access_token, access_token.to_hash.to_json, ex: (access_token.expires_in.seconds - 1.hour))
      access_token
    end
  end
end

Private Instance Methods

client() click to toggle source
# File lib/parcel_api/client.rb, line 46
def client
  OAuth2::Client.new(@client_id, @client_secret, site: @address, token_url: @auth_address, connection_opts: { headers: { 'client_id' => @client_id } })
end