Sha256: 5e5e3444575020628f7838fc909021950c3b47b55ee3a08abb704fb613302107

Contents?: true

Size: 1.96 KB

Versions: 6

Compression:

Stored size: 1.96 KB

Contents

module Vzaar
  module Request
    class Base < Struct.new(:conn, :opts)
      include Vzaar::Helper

      class << self
        [:authenticated, :http_verb].each do |method_name|
          define_method(method_name) do |val|
            define_method(method_name) do
              param = self.options[method_name]
              blank?(param) ? val : param
            end
          end
        end

        def endpoint(obj=nil, &fn)
          define_method(:endpoint) { block_given? ? yield(self) : obj }
        end

        def resource(name)
          define_method(:resource) { name }
        end

        def format(f)
          define_method(:format) do
            # JC: options should always overwrite format param
            self.options[:format] ? self.options[:format] : f
          end
        end
      end

      authenticated nil
      http_verb :get
      format :xml

      def execute
        conn.using_connection(url, user_options) do |res|
          _res = Response::Base.new(res)
          if _res.json?
            return _res.body
          else
            return resource_klass.new(_res.body, res.code)
          end
        end
      end

      protected

      attr_reader :xml_body, :json_body

      def resource_klass
        name = resource.is_a?(Symbol) ? resource.to_s.capitalize : resource
        Resource.const_get(name)
      end

      def options
        @options ||= symb_keys(opts)
      end

      def format_suffix
        format
      end

      def url
        Url.new(endpoint, format_suffix, url_params).build
      end

      def user_options
        { format: format.to_sym,
          authenticated: authenticated,
          http_verb: http_verb,
          data: data
        }
      end

      def xml?
        format == :xml
      end

      def url_params
        options[:params] || {}
      end

      def data
        xml? ? xml_body : json_body
      end

      def sanitize_str(str)
        (str || "").encode(xml: :text)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
vzaar-1.6.2 lib/vzaar/request/base.rb
vzaar-1.6.1 lib/vzaar/request/base.rb
vzaar-1.6.0 lib/vzaar/request/base.rb
vzaar-1.5.3 lib/vzaar/request/base.rb
vzaar-1.5.2 lib/vzaar/request/base.rb
vzaar-1.5.1 lib/vzaar/request/base.rb