Sha256: ce4a0d50064a7b71e2bf8ef3fdb7f7e12b0b668a65e8b7a8a7bd3b56bb66daa1

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

module OpenWeatherAPI
  module Resources
    class Base

      attr_reader :api_obj

      def initialize(api_obj)
        @api_obj = api_obj
      end

      def execute(**hash, &block)
        @parameters = hash
        setup_indifferent_access(@parameters)

        # Let's use json
        execute_json **hash, &block
      end

      private

      def execute_json(**hash, &block)
        response = RestClient.send :get, base_url, params: build_params(@parameters), accept: :json
        raise "Invalid response." unless response.code == 200

        json = JSON.parse(response.body)
        setup_indifferent_access(json)

        return block.call(json) if block_given?
        json
      end

      def base_url
        'http://api.openweathermap.org/data/2.5/'
      end

      def setup_indifferent_access(sub_hash)
        sub_hash.default_proc = proc{|h, k| h.key?(k.to_s) ? h[k.to_s] : nil}
        sub_hash.each { |k, v| setup_indifferent_access(v) if v.is_a?(Hash) }
      end

      def build_params(parameters = {})
        {
          APPID: @api_obj.api_key,
          lang:  @api_obj.default_language
        }.merge(parameters)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
open-weather-api-0.0.4 lib/open-weather-api/resources/base.rb