Class: ResourceAccessor

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

Constant Summary collapse

VERSION =
'1.2.7'

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.



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

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.



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

def ca_file
  @ca_file
end

#timeoutObject

Returns the value of attribute timeout.



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

def timeout
  @timeout
end

#validate_ssl_certObject Also known as: validate_ssl_cert?

Returns the value of attribute validate_ssl_cert.



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

def validate_ssl_cert
  @validate_ssl_cert
end

Class Method Details

.query_from_hash(params, escape = true) ⇒ Object



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

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



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
128
# File 'lib/resource_accessor/resource_accessor.rb', line 75

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



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

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


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

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



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

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



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

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



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

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



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

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