Sha256: e32ac527bd9863f77485df096789d0f95d291cc8e336e99d417178ce4d07ea85

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

require 'faraday'
require 'json'

module Saru
  module Connection
    class Base

      ENDPOINT_HOST = "https://www.wanikani.com"
      ENDPOINT_BASE = "/api/user"

      WanikaniConnectionError = Class.new(StandardError)

      attr_reader :levels

      def initialize levels
        @levels = levels
      end

      def call
        response.status == 200 ? content : raise_error
      end

    private

      def response
        raise ArgumentError, 'Missing API key' unless Saru.valid?
        @response ||= connection.get path
      end

      def content
        @content ||= JSON.parse(response.body)
      end

      def connection
        @connection ||= Faraday.new ENDPOINT_HOST do |connection|
          connection.headers[ 'Content-Type' ] = 'application/json'
          connection.adapter :net_http
        end
      end

      def base_path
        "#{ENDPOINT_BASE}/#{Saru.api_key}"
      end

      def levels_request
        Array(levels).join(',')
      end

      def raise_error
        raise WanikaniConnectionError, %Q{
          Wanikani responded with #{response.status} (expecting 200)

          request: GET #{path}

          response:
            #{response.inspect}
        }
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
saru-0.2.0 lib/saru/connection/base.rb
saru-0.1.0 lib/saru/connection/base.rb