module Cropio::Connection::Authenticable

Contains authentication options for connection.

Public Instance Methods

authenticate!() click to toggle source

Public interface for authentication request

# File lib/cropio/connection/authenticable.rb, line 6
def authenticate!
  auth_request
end

Protected Instance Methods

auth_request() click to toggle source

Send authentication request.

# File lib/cropio/connection/authenticable.rb, line 25
def auth_request
  process_result RestClient.post(url_for('sign_in'),
                                 auth_request_params.to_json,
                                 authentication_headers)
rescue RestClient::Unauthorized => e
  process_result(e.http_body)
end
auth_request_params() click to toggle source

Return params based on user credentials.

# File lib/cropio/connection/authenticable.rb, line 46
def auth_request_params
  {
    user_login: {
      email: Cropio.credentials.email,
      password: Cropio.credentials.password
    }
  }
rescue NoMethodError => e
  process_auth_params_error(e) || raise(e)
end
authenticate_before(*methods) click to toggle source

Define wrappers around specified methods to be sure they are authenticated.

# File lib/cropio/connection/authenticable.rb, line 14
def authenticate_before(*methods)
  methods.each do |method_name|
    unauthentificated_method = method(method_name)
    singleton_class.send(:define_method, method_name) do |*args|
      authenticate! unless authenticated?
      unauthentificated_method.call(*args)
    end
  end
end
authenticated?() click to toggle source

Returns true if user has api token.

# File lib/cropio/connection/authenticable.rb, line 58
def authenticated?
  !Cropio.credentials.api_token.nil?
rescue NoMethodError => e
  e.name == :api_token ? false : raise(e)
end
process_auth_params_error(e) click to toggle source

Process NoMethodError and prints norification if exeption was produced by empty credentials.

# File lib/cropio/connection/authenticable.rb, line 66
def process_auth_params_error(e)
  return unless %i(email password).include?(e.name)
  fail "Cropio credentials is not specified: #{e.name}"
end
process_result(result) click to toggle source

Process result returned by authentication request.

# File lib/cropio/connection/authenticable.rb, line 34
def process_result(result)
  result = JSON.parse(result)

  if result['success']
    Cropio.credentials.api_token = result['user_api_token']
    true
  else
    fail 'Access to Cropio denied.'
  end
end