Class: ResourceAccessor

Inherits:
Object
  • Object
show all
Defined in:
lib/resource_accessor/resource_accessor.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(timeout = 10000, ca_file = nil, validate_ssl_cert = false) ⇒ ResourceAccessor

Returns a new instance of ResourceAccessor.



9
10
11
12
13
# File 'lib/resource_accessor/resource_accessor.rb', line 9

def initialize timeout = 10000, ca_file = nil, validate_ssl_cert = false
  @timeout = timeout
  @ca_file = ca_file
  @validate_ssl_cert = validate_ssl_cert
end

Instance Attribute Details

#ca_fileObject

Returns the value of attribute ca_file.



5
6
7
# File 'lib/resource_accessor/resource_accessor.rb', line 5

def ca_file
  @ca_file
end

#timeoutObject

Returns the value of attribute timeout.



5
6
7
# File 'lib/resource_accessor/resource_accessor.rb', line 5

def timeout
  @timeout
end

#validate_ssl_certObject Also known as: validate_ssl_cert?

Returns the value of attribute validate_ssl_cert.



5
6
7
# File 'lib/resource_accessor/resource_accessor.rb', line 5

def validate_ssl_cert
  @validate_ssl_cert
end

Class Method Details

.query_from_hash(params, escape = true) ⇒ Object



49
50
51
52
53
# File 'lib/resource_accessor/resource_accessor.rb', line 49

def self.query_from_hash(params, escape=true)
  return nil if params.nil? or params.empty?

  encode params, escape
end

Instance Method Details

#execute_request(url, query, method, headers, body, escape, cookie = nil) ⇒ Object



74
75
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/resource_accessor/resource_accessor.rb', line 74

def execute_request url, query, method, headers, body, escape, cookie=nil
  headers["User-Agent"] = "Ruby/#{RUBY_VERSION}" unless headers["User-Agent"]
  headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8" unless headers["Content-Type"]

  if cookie
    headers['Cookie'] = cookie
  end

  query_string = ResourceAccessor.query_from_hash(query, escape)
  new_url = query_string.nil? ? url : "#{url}?#{query_string}"
  # new_url = escape ? URI.escape(new_url) : new_url

  uri = URI.parse(URI.escape(new_url))

  connection = Net::HTTP.new(uri.host, uri.port)

  if uri.scheme == "https"
    connection.use_ssl = true

    if validate_ssl_cert?
      connection.ca_file = ca_file
      connection.verify_mode = OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
    else
      connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
  end

  #request.basic_auth(@username, @password) unless @username

  method = :get if method.nil?

  if method == :get
    request = Net::HTTP::Get.new(uri.request_uri, headers)
  elsif method == :post
    request = Net::HTTP::Post.new(uri.request_uri, headers)

    request.body = body if body.kind_of? String
    request.set_form_data(body) if body.kind_of? Hash
  elsif method == :put
    request = Net::HTTP::Put.new(uri.request_uri, headers)

    request.body = body if body.kind_of? String
    request.set_form_data(body) if body.kind_of? Hash
  else
    request = Net::HTTP::Get.new(uri.request_uri, headers)
  end

  connection.read_timeout = timeout
  connection.open_timeout = timeout

  Timeout.timeout(timeout) do
    return connection.request(request)
  end
end

#get_ajax_response(params, headers = {}) ⇒ Object



27
28
29
30
31
# File 'lib/resource_accessor/resource_accessor.rb', line 27

def get_ajax_response params, headers = {}
  headers['X-Requested-With'] = 'XMLHttpRequest'

  locate_response(params[:url], params[:query], params[:method], headers, params[:body], params[:escape], params[:cookie])
end


39
40
41
42
43
44
45
46
47
# File 'lib/resource_accessor/resource_accessor.rb', line 39

def get_cookie url, user_name, password
  headers = {"Content-Type" => "application/x-www-form-urlencoded; charset=UTF-8"}

  body = {:username => user_name, :password => password}

  response = locate_response(url, nil, :post, headers, body)

  response.response['set-cookie']
end

#get_json_response(params, headers = {}) ⇒ Object



33
34
35
36
37
# File 'lib/resource_accessor/resource_accessor.rb', line 33

def get_json_response params, headers = {}
  headers["Content-Type"] = "application/json;charset=UTF-8"

  locate_response(params[:url], params[:query], params[:method], headers, params[:body], params[:escape], params[:cookie])
end

#get_response(params, headers = {}) ⇒ Object



15
16
17
# File 'lib/resource_accessor/resource_accessor.rb', line 15

def get_response params, headers = {}
  locate_response(params[:url], params[:query], params[:method], headers, params[:body], params[:escape], params[:cookie])
end

#get_soap_response(params, headers = {}) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/resource_accessor/resource_accessor.rb', line 19

def get_soap_response params, headers = {}
  headers["SOAPAction"] = params[:soap_action] if params[:soap_action]
  headers["SOAPAction"] = "" unless headers["SOAPAction"]
  headers["Content-Type"] = "text/xml;charset=UTF-8" unless headers["Content-Type"]

  locate_response(params[:url], params[:query], params[:method], headers, params[:body], params[:escape], params[:cookie])
end

#locate_response(url, query, method, headers, body, escape = true, cookie = nil) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/resource_accessor/resource_accessor.rb', line 55

def locate_response url, query, method, headers, body, escape=true, cookie=nil
  response = execute_request url, query, method, headers, body, escape, cookie

  if response.class == Net::HTTPMovedPermanently
    location = response['location']

    if URI(location).scheme
      new_uri = URI(location)
    else
      new_uri = URI(url)
      new_uri.path = location
    end

    response = execute_request new_uri.to_s, query, method, headers, body, escape, cookie
  end

  response
end