class Fintual::Client

Client component to make the requests and get data

Public Class Methods

new(email, password) click to toggle source
# File lib/fintual/client.rb, line 15
def initialize(email, password)
  @email = email
  @password = password
  @user_agent = "fintual-ruby/#{Fintual::VERSION}"
  @headers = {
    'Content-Type': 'application/json',
    'User-Agent': @user_agent
  }
  @default_params = {}
  @default_params = {
    user_email: @email,
    user_token: get_token
  }
end

Public Instance Methods

build_goal(**kwargs) click to toggle source
# File lib/fintual/client.rb, line 58
def build_goal(**kwargs)
  Fintual::Goal.new(**kwargs)
end
delete() click to toggle source
# File lib/fintual/client.rb, line 34
def delete
  request('delete')
end
get() click to toggle source
# File lib/fintual/client.rb, line 30
def get
  request('get')
end
goals() click to toggle source
# File lib/fintual/client.rb, line 53
def goals
  result = get.call('goals')
  result.map { |data| build_goal(data[:attributes]) }
end
request(method) click to toggle source
# File lib/fintual/client.rb, line 38
def request(method)
  proc do |resource, **kwargs|
    parameters = params(method, **kwargs)
    response = make_request(method, resource, parameters)
    content = JSON.parse(response.body, symbolize_names: true)
    data = content[:data]
    error = content[:error]

    if content[:status] == "error"
      raise_custom_error(content)
    end
    data
  end
end
to_s() click to toggle source
# File lib/fintual/client.rb, line 62
def to_s
  visible_chars = 4
  hidden_part = '*' * (@api_key.size - visible_chars)
  visible_key = @api_key.slice(0, visible_chars)
  "Client(🔑=#{hidden_part + visible_key}"
end

Private Instance Methods

client() click to toggle source
# File lib/fintual/client.rb, line 71
def client
  @client ||= Net::HTTP
end
get_token() click to toggle source
# File lib/fintual/client.rb, line 98
def get_token
  payload = {
    user: {email: @email, password: @password}
    }
  request('post').call('access_tokens', payload)[:attributes][:token]
end
make_request(method, resource, parameters) click to toggle source
# File lib/fintual/client.rb, line 75
def make_request(method, resource, parameters)
  uri = URI.parse("#{Fintual::Constants::SCHEME}#{Fintual::Constants::BASE_URL}#{resource}")
  https = Net::HTTP.new(uri.host, uri.port)
  https.use_ssl = true
  case method.downcase
  when 'get'
    req = Net::HTTP::Get.new(uri.path, @headers)
  when 'post'
    req = Net::HTTP::Post.new(uri.path, @headers)
  end
  req.body = parameters.to_json
  https.request(req)
end
params(method, **kwargs) click to toggle source
# File lib/fintual/client.rb, line 89
def params(method, **kwargs)
  { **@default_params, **kwargs }

end
raise_custom_error(error) click to toggle source
# File lib/fintual/client.rb, line 94
def raise_custom_error(error)
  raise Fintual::Errors::FintualError.new(error[:message])
end