net-http-rest_client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/net/http/rest_client.rb +139 -0
  2. metadata +45 -0
@@ -0,0 +1,139 @@
1
+ require 'timeout'
2
+ require 'net/http'
3
+
4
+ module Net
5
+ class HTTP
6
+ # Pure ruby http rest client class
7
+ class RestClient
8
+ VERSION = '0.1.0'
9
+
10
+ # Get class verion
11
+ def self.version
12
+ VERSION
13
+ end
14
+
15
+ # Main longstanding params (the same params as params at #initialize)
16
+ attr_reader :params
17
+ # Main longstanding cookies
18
+ attr_reader :cookies
19
+ # Main longstanding headers
20
+ attr_reader :headers
21
+ # Returns last Net::HTTP::Response
22
+ attr_reader :response
23
+
24
+ ##
25
+ # To create class just pass params to constructor
26
+ # Net::HTTP::RestClient.new :host => '127.0.0.1', :port => 8080
27
+ def initialize params = {}
28
+ defaults = {
29
+ :port => 80,
30
+ :user_agent => 'Net::HTTP::RestClient'
31
+ }
32
+ if params[:port]==443 && !params[:ssl]
33
+ defaults.merge! :ssl => {
34
+ :use_ssl => true,
35
+ :verify_mode => OpenSSL::SSL::VERIFY_NONE
36
+ }
37
+ end
38
+ @params = defaults.merge(params)
39
+ @cookies = {}
40
+ @headers = {}
41
+ @params[:headers] && @headers=@params[:headers]
42
+ @params[:cookies] && @cookies=@params[:cookies]
43
+ end
44
+
45
+ def clear_cookies
46
+ @cookies = {}
47
+ end
48
+
49
+ def clear_headers
50
+ @headers = {}
51
+ end
52
+
53
+ def get url, params = {}
54
+ params[:url] = url
55
+ request Net::HTTP::Get, params
56
+ end
57
+
58
+ def post url, data=nil, params = {}
59
+ params[:url] = url
60
+ params[:body] = data
61
+ request Net::HTTP::Post, params
62
+ end
63
+
64
+ def put url, data=nil, params = {}
65
+ params[:url] = url
66
+ params[:body] = data
67
+ request Net::HTTP::Put, params
68
+ end
69
+
70
+ def delete url, params = {}
71
+ params[:url] = url
72
+ request Net::HTTP::Delete, params
73
+ end
74
+
75
+ def head url, params = {}
76
+ params[:url] = url
77
+ request Net::HTTP::Head, params
78
+ end
79
+
80
+ private
81
+
82
+ def request method, params
83
+ params = { :headers => {}, :cookies => {} }.merge(params)
84
+ params = @params.merge(params)
85
+ req = method.new(params[:url])
86
+ req['User-Agent'] = params[:user_agent]
87
+ params[:body] && req.body = params[:body]
88
+ params[:virtual_host] && req['Host'] = params[:virtual_host]
89
+ params[:user] && req.basic_auth(params[:user], params[:password])
90
+ cookies = []
91
+ @cookies.merge(params[:cookies]).each do |key, value|
92
+ if value
93
+ cookies << "#{key}=#{value}"
94
+ else
95
+ cookies << "#{key}"
96
+ end
97
+ end
98
+ cookies.size>0 && req['Cookie'] = cookies.join(';')
99
+ @headers.merge(params[:headers]).each do |key, value|
100
+ req[key] = value
101
+ end
102
+ response = nil
103
+ if params[:timeout]
104
+ Timeout::timeout(params[:timeout]) do
105
+ response = execute req, params
106
+ end
107
+ else
108
+ response = execute req, params
109
+ end
110
+ @response = response
111
+ return nil unless response
112
+ if response['Set-Cookie'] && response['Set-Cookie'].size>0
113
+ parse_cookies response
114
+ end
115
+ return response.body
116
+ end
117
+
118
+ def parse_cookies response
119
+ response['Set-Cookie'].split(';').each do |pair|
120
+ data = pair.split('=')
121
+ raise 'Invalid cookie format' if data.size>2
122
+ key = data[0].strip
123
+ value = data[1] && data[1].strip
124
+ @cookies[key] = value
125
+ end
126
+ end
127
+
128
+ def execute req, params
129
+ Net::HTTP.start(
130
+ params[:host],
131
+ params[:port],
132
+ params[:ssl]
133
+ ) do |http|
134
+ http.request(req)
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: net-http-rest_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Promix17
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-03-23 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Pure http rest client library
15
+ email: promix17@yandex.ru
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ./lib/net/http/rest_client.rb
21
+ homepage: https://bitbucket.org/promix17/net-http-rest_client/
22
+ licenses: []
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 1.8.23
42
+ signing_key:
43
+ specification_version: 3
44
+ summary: Pure http rest client library
45
+ test_files: []