class Chaindotcom::AddressMapper

Public Instance Methods

load(address) click to toggle source
# File lib/chaindotcom/address_mapper.rb, line 20
def load(address)
  address.load_state = :loading

  remote_address = run_request(address)
  populate_values(address, remote_address)

  address.load_state = :loaded
end

Private Instance Methods

populate_values(address, remote_address) click to toggle source
# File lib/chaindotcom/address_mapper.rb, line 63
def populate_values(address, remote_address)
  remote_address.each do |key, value|
    address.public_send("#{key}=", value)
  end
end
run_request(address) click to toggle source
# File lib/chaindotcom/address_mapper.rb, line 31
def run_request(address)
  Faraday::Request.register_middleware(username_only_auth: lambda { ::Faraday::Request::UsernameOnlyAuthentication })

  chain_cert = OpenSSL::X509::Certificate.new(File.read('config/chain.pem'))
  conn = Faraday.new( url: "https://api.chain.com",
                      ssl: {
                              :client_cert  => chain_cert
                            }) do |faraday|
    faraday.request  :username_only_auth, ENV['CHAIN_API_KEY']
    faraday.response :logger
    faraday.adapter  Faraday.default_adapter
  end

  response = conn.get "/v1/bitcoin/addresses/#{address.hash}"

  parsed_response = JSON.parse(response.body, symbolize_names: true)

  if response.status == 500 && parsed_response[:message].match(/Unable to find address with hash/)
    {
      balance: 0,
      received: 0,
      sent: 0,
      unconfirmed_received: 0,
      unconfirmed_sent: 0,
      unconfirmed_balance: 0,
    }
  else
    parsed_response
  end

end