Class: ManagerRemoteHttp

Inherits:
Object show all
Defined in:
lib/mrpin/core/remote/http/manager_remote_http.rb

Constant Summary collapse

METHODS =
[:post, :get]
DEFAULT_READ_TIMEOUT =
10
DEFAULT_OPEN_TIMEOUT =
10
DEFAULT_REDIRECT_LIMIT =
0

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ManagerRemoteHttp

Returns a new instance of ManagerRemoteHttp.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/mrpin/core/remote/http/manager_remote_http.rb', line 8

def initialize(options = {})

  url = options.assert_property!(:url)

  faraday_options =
      {
          request:
              {
                  timeout:      options[:read_timeout] || DEFAULT_READ_TIMEOUT,
                  open_timeout: options[:open_timeout] || DEFAULT_OPEN_TIMEOUT
              }
      }

  redirect_limit = options[:redirect_limit] || DEFAULT_REDIRECT_LIMIT

  @connection = Faraday.new(url, faraday_options) do |builder|
    builder.request :url_encoded # for POST/PUT params
    builder.request :retry, {max: 3, interval: 0.2, interval_randomness: 0, backoff_factor: 1.5} # [0.2 0.3 0.45] intervals between retries

    if redirect_limit > 0
      builder.use FaradayMiddleware::FollowRedirects, {limit: redirect_limit}
    end

    builder.adapter :net_http
  end
end

Instance Method Details

#get(controller, params = nil) ⇒ Object Also known as: request_get_to



36
37
38
# File 'lib/mrpin/core/remote/http/manager_remote_http.rb', line 36

def get(controller, params = nil)
  run_request(:get, controller, params)
end

#json_to(controller, params = {}, method = :post) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/mrpin/core/remote/http/manager_remote_http.rb', line 76

def json_to(controller, params = {}, method = :post)
  result = nil

  begin

    unless METHODS.include?(method)
      raise ArgumentError, "Not supported method: #{method}"
    end

    response = @connection.send(method) do |req|
      req.url controller
      req.headers['Content-Type'] = 'application/json'
      req.body                    = params.to_json
    end

    result = if response.success?
               JSON.parse response.body, {symbolize_names: true}
             else
               {
                   status:   EResponseType::ERT_ERROR,
                   response: [response.status, response.body].join(':')
               }
             end

  rescue Exception => e
    result = {status: EResponseType::ERT_ERROR, response: e.message}
  end

  result
end

#post(controller, params = nil) ⇒ Object



43
44
45
# File 'lib/mrpin/core/remote/http/manager_remote_http.rb', line 43

def post(controller, params = nil)
  run_request(:post, controller, params)
end