Sha256: 510552b197b2eedddbac79ea88547423d2371547987d5813210d53df549626d8

Contents?: true

Size: 995 Bytes

Versions: 4

Compression:

Stored size: 995 Bytes

Contents

require 'fluxx/resource'

module Fluxx
  # API Token handler
  class Token < Resource
    GRANT_TYPE = 'client_credentials'
    EXPIRATION_DELTA = 60

    path '/oauth/token'

    # Resource creation helper
    #
    # @param params [Hash] request parameters to pass to the endpoint
    # @return [Object] instance
    def self.create(params = {})
      client_id = Thread.current.thread_variable_get(:FLUXX_CLIENT_ID)
      secret = Thread.current.thread_variable_get(:FLUXX_SECRET)

      super(params.merge(
        grant_type: GRANT_TYPE,
        client_id: client_id || ENV['FLUXX_CLIENT_ID'],
        client_secret: secret || ENV['FLUXX_SECRET']
      ))
    end

    # Creates or refreshes a token
    #
    # @return [Fluxx::Token] instance
    def self.fresh
      @token ||= create
      @expires_in ||= 0

      if Time.now.to_i > @expires_in + @token.expires_in - EXPIRATION_DELTA
        @token = create
        @expires_in = Time.now.to_i
      end

      @token
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
fluxx-0.1.5 lib/fluxx/token.rb
fluxx-0.1.4 lib/fluxx/token.rb
fluxx-0.1.3 lib/fluxx/token.rb
fluxx-0.1.1 lib/fluxx/token.rb