Sha256: 2e34c0765e4c5e8a6e6e513a23f9afa064c7e8292b3719abfe2486b512c18773

Contents?: true

Size: 1.87 KB

Versions: 5

Compression:

Stored size: 1.87 KB

Contents

module Lipseys
  class Base

    protected

    # Wrapper to `self.requires!` that can be used as an instance method.
    def requires!(*args)
      self.class.requires!(*args)
    end

    def self.requires!(hash, *params)
      params.each do |param|
        if param.is_a?(Array)
          raise ArgumentError.new("Missing required parameter: #{param.first}") unless hash.has_key?(param.first)

          valid_options = param[1..-1]
          raise ArgumentError.new("Parameter: #{param.first} must be one of: #{valid_options.join(', ')}") unless valid_options.include?(hash[param.first])
        else
          raise ArgumentError.new("Missing required parameter: #{param}") unless hash.has_key?(param)
        end
      end
    end

    def content_for(xml_doc, field)
      node = xml_doc.css(field).first
      node.nil? ? nil : node.content.strip
    end

    def get_response_xml(api_url, params)
      uri = URI(api_url)
      uri.query = URI.encode_www_form(params_to_auth(params))

      response = Net::HTTP.get_response(uri)
      xml_doc = Nokogiri::XML(response.body)

      raise Lipseys::NotAuthenticated if not_authenticated?(xml_doc)

      xml_doc
    end

    def not_authenticated?(xml_doc)
      msg = content_for(xml_doc, 'CatalogError')
      msg =~ /Login failed/i || msg =~ /Credentials Not Valid/i
    end

    def stream_to_tempfile(api_url, params)
      tempfile  = Tempfile.new
      uri       = URI(api_url)
      uri.query = URI.encode_www_form(params_to_auth(params))

      Net::HTTP.get_response(uri) do |response|
        File.open(tempfile, 'w') do |file|
          response.read_body do |chunk|
            file.write(chunk.force_encoding('UTF-8'))
          end
        end
      end

      tempfile
    end

    private

    def params_to_auth(params)
      {
        email: params.fetch(:username),
        pass: params.fetch(:password),
      }
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lipseys-5.0.1 lib/lipseys/base.rb
lipseys-5.0.0 lib/lipseys/base.rb
lipseys-4.0.0 lib/lipseys/base.rb
lipseys-3.0.1 lib/lipseys/base.rb
lipseys-3.0.0 lib/lipseys/base.rb