net_http-rest_client 0.0.1

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 +104 -0
  2. metadata +45 -0
@@ -0,0 +1,104 @@
1
+ require 'timeout'
2
+ require 'net/http'
3
+
4
+ module Net
5
+ class HTTP
6
+ class RestClient
7
+ VERSION = '0.0.1'
8
+
9
+ def self.version
10
+ VERSION
11
+ end
12
+
13
+ attr_reader :params
14
+ attr_reader :cookies
15
+ attr_reader :response
16
+
17
+ def initialize params = {}
18
+ defaults = {
19
+ :port => 80,
20
+ :user_agent => 'Net::HTTP::RestClient'
21
+ }
22
+ if params[:port]==443 && !params[:ssl]
23
+ defaults.merge! :ssl => {
24
+ :use_ssl => true,
25
+ :verify_mode => OpenSSL::SSL::VERIFY_NONE
26
+ }
27
+ end
28
+ @params = defaults.merge(params)
29
+ @cookies = {}
30
+ end
31
+
32
+ def get params = {}
33
+ request Net::HTTP::Get, params
34
+ end
35
+
36
+ def post params = {}
37
+ request Net::HTTP::Post, params
38
+ end
39
+
40
+ def put params = {}
41
+ request Net::HTTP::Put, params
42
+ end
43
+
44
+ def delete params = {}
45
+ request Net::HTTP::Delete, params
46
+ end
47
+
48
+ private
49
+
50
+ def request method, params
51
+ params = @params.merge(params)
52
+ req = method.new(params[:url])
53
+ req['User-Agent'] = params[:user_agent]
54
+ params[:body] && req.body = params[:body]
55
+ params[:virtual_host] && req['Host'] = params[:virtual_host]
56
+ params[:user] && req.basic_auth(params[:user], params[:password])
57
+ if @cookies.size > 0
58
+ cookies = []
59
+ @cookies.each do |key, value|
60
+ cookies << "#{key}=#{value}"
61
+ end
62
+ req['Cookie'] = cookies.join(';')
63
+ end
64
+ if params[:headers]
65
+ params[:headers].each do |key, value|
66
+ req[key] = value
67
+ end
68
+ end
69
+ if params[:timeout]
70
+ Timeout::timeout(params[:timeout]) do
71
+ response = execute req, params
72
+ end
73
+ else
74
+ response = execute req, params
75
+ end
76
+ if response['Set-Cookie'] && response['Set-Cookie'].size>0
77
+ parse_cookies response
78
+ end
79
+ @response = response
80
+ return response.body
81
+ end
82
+
83
+ def parse_cookies response
84
+ response['Set-Cookie'].split(';').each do |pair|
85
+ data = pair.split('=')
86
+ raise 'Invalid cookie format' if data.size>2
87
+ key = data[0].strip
88
+ value = data[1] && data[1].strip
89
+ @cookies[key] = value
90
+ end
91
+ end
92
+
93
+ def execute req, params
94
+ Net::HTTP.start(
95
+ params[:host],
96
+ params[:port],
97
+ params[:ssl]
98
+ ) do |http|
99
+ http.request(req)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ 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.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Promix17
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-03-10 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://hardc0de.com/hg/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: []