Sha256: 295cff381892e92f4cfeb80fc89d1a3a418906986d2db8011e7d09491a62fd29

Contents?: true

Size: 1.32 KB

Versions: 14

Compression:

Stored size: 1.32 KB

Contents

require 'timeout'

module Centaman
  #:nodoc:
  class Service < Wrapper
    DEFAULT_TIMEOUT_TIME = 15

    def after_init(args)
      # overwritten by subclasses
    end

    def wrap_request_in_case_of_timeout(proc, options = {})
      time = options.fetch(:timeout_time, DEFAULT_TIMEOUT_TIME)
      resp = nil
      begin
        resp = Timeout.timeout(time) do
          proc.call
        end
      rescue Timeout::Error
        raise Exceptions::CentamanTimeout
      end
      resp
    end

    def fetch_all
      @get_request ||= begin
        req = Proc.new do
          self.class.get(endpoint, payload(:get))
        end
        resp = wrap_request_in_case_of_timeout(req, timeout_time: 20)

        raise resp['Message'] if resp.is_a?(Hash)
        resp
      end
    end

    def post
      @post_request ||= begin
        req = Proc.new do
          self.class.post(endpoint, payload(:post))
        end
        resp = wrap_request_in_case_of_timeout(req)
        self.respond_to?(:build_object) ? after_post(resp) : resp
      end
    end

    def after_post(response)
      build_object(response)
    end

    def payload(request_type = :get)
      hash = { payload_key(request_type) => options_hash }
      hash.merge(headers: headers)
    end

    def payload_key(request_type)
      request_type == :get ? :query : :body
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
centaman-0.1.13 lib/centaman/service.rb
centaman-0.1.12 lib/centaman/service.rb
centaman-0.1.11 lib/centaman/service.rb
centaman-0.1.10 lib/centaman/service.rb
centaman-0.1.9 lib/centaman/service.rb
centaman-0.1.8 lib/centaman/service.rb
centaman-0.1.7 lib/centaman/service.rb
centaman-0.1.6 lib/centaman/service.rb
centaman-0.1.5 lib/centaman/service.rb
centaman-0.1.4 lib/centaman/service.rb
centaman-0.1.3 lib/centaman/service.rb
centaman-0.1.2 lib/centaman/service.rb
centaman-0.1.1 lib/centaman/service.rb
centaman-0.1.0 lib/centaman/service.rb