Module: Sinatra::UniRate

Defined in:
lib/sinatra/unirate.rb

Overview

Sinatra extension wrapping the UniRate API (https://unirateapi.com) for free currency exchange rates, conversion, supported-currency listings, and VAT rates.

Register it in a classic app:

require "sinatra"
require "sinatra/unirate"
set :unirate_api_key, ENV.fetch("UNIRATE_API_KEY")

get("/eur") { unirate_convert(100, "USD", "EUR").to_s }

...or a modular app:

require "sinatra/base"
require "sinatra/unirate"

class MyApp < Sinatra::Base
register Sinatra::UniRate
set :unirate_api_key, ENV.fetch("UNIRATE_API_KEY")
get("/eur") { unirate_convert(100, "USD", "EUR").to_s }
end

Configuration is expressed through Sinatra settings:

set :unirate_api_key,           "..."                        # falls back to ENV["UNIRATE_API_KEY"]
set :unirate_base_url,          "https://api.unirateapi.com"
set :unirate_timeout,           30
set :unirate_default_currency,  "USD"
set :unirate_enable_historical, false                        # Pro-gated; off by default
set :unirate_mount_routes,      false                        # add /unirate/* JSON proxy routes

Defined Under Namespace

Modules: Helpers

Class Method Summary collapse

Class Method Details

.client_for(settings) ⇒ Object

Builds a SinatraClient from a Sinatra settings object. The API key falls back to ENV when the setting is unset/blank so a secret never has to be committed to the host app.



96
97
98
99
100
101
102
103
104
105
106
# File 'lib/sinatra/unirate.rb', line 96

def client_for(settings)
  key = settings.unirate_api_key
  key = ENV.fetch("UNIRATE_API_KEY", nil) if key.nil? || key.to_s.empty?

  ::UniRate::SinatraClient.new(
    api_key: key,
    base_url: settings.unirate_base_url,
    timeout: settings.unirate_timeout,
    enable_historical: settings.unirate_enable_historical
  )
end

.registered(app) ⇒ Object

Sinatra registration hook. Sets default settings, mixes in the helpers, and — when :unirate_mount_routes is on — adds the JSON proxy routes.



110
111
112
113
114
# File 'lib/sinatra/unirate.rb', line 110

def registered(app)
  apply_defaults(app)
  app.helpers(Helpers)
  mount_routes(app)
end