hypetext 1.0.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/hypetext.rb +138 -0
  2. metadata +46 -0
@@ -0,0 +1,138 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'timeout'
4
+
5
+ class HypeText
6
+
7
+ attr_accessor :ssl_verify, :rootCA, :timeout, :ssl_verify
8
+ attr_reader :last_call, :full_call
9
+
10
+ def initialize(params={})
11
+ # set required settings
12
+ @rootCA = params[:rootCA] ||= nil
13
+ @timeout = params[:timeout] ||= 0
14
+ @ssl_verify = true
15
+ unless params[:ssl_verify].nil?
16
+ @ssl_verify = params[:ssl_verify]
17
+ end
18
+ end
19
+
20
+ def get_by_url(url, p={})
21
+ # Simple method for getting data by url
22
+ # url is required, p = {:params=>{}, :headers={}, :timeout=0}
23
+ # returns hash = {"response"=>NET::HTTP:RESPONSE, "url"=>string, "body"=>NET::HTTP:RESPONSE.body}
24
+
25
+ # Set required settings
26
+ params = p[:params] ||= {}
27
+ headers = p[:headers] ||= {}
28
+ timeout = p[:timeout] ||= @timeout
29
+
30
+ # parse out uri stuff
31
+ u = URI.parse(url)
32
+ path = u.path
33
+ unless params.empty?
34
+ # Add query params if they exist
35
+ a = []
36
+ params.each do |k,v|
37
+ a << "#{k}=#{v}"
38
+ end
39
+ path = "#{path}?#{a.join('&')}"
40
+ end
41
+
42
+ # Setup Http
43
+ http = Net::HTTP.new(u.host, u.port)
44
+ if url.match(/^https/)
45
+ # If its an ssl url.. time setup up the ssl
46
+ http = Net::HTTP.new(u.host, 443)
47
+ http.use_ssl = true
48
+ http.ca_file = @rootCA
49
+ if @ssl_verify
50
+ # set verification
51
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
52
+ else
53
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
54
+ end
55
+ http.verify_depth = 5 # Protect against stack looping...
56
+ end
57
+ begin
58
+ Timeout::timeout(timeout) do
59
+ # Request the url
60
+ resp, data = http.get(path, headers)
61
+ @full_call = "#{u.host}:#{u.port}#{path}"
62
+ @last_call = @full_call
63
+ if resp.code.match /^301|^302/
64
+ a = self.get_by_url(resp.header['location'])
65
+ end
66
+ if a
67
+ return {:response=>a[:response], :url=>a[:url], :body=>a[:body]}
68
+ end
69
+ return {:response=>resp, :url=>@full_call, :body=>resp.body}
70
+ end
71
+ rescue Timeout::Error
72
+ # If the call times out.. Catch it and throw an HttpClientException for better handling up the stack
73
+ raise HypeTextException::TimeoutError.new("Get #{@full_call} Timed Out")
74
+ end
75
+ end
76
+
77
+ def post_by_url(url, params, p={})
78
+ # Simple method for posting data by url
79
+ # url is required, params is a hash of post params and headers is a hash of headers
80
+ # returns hash = {"response"=>NET::HTTP:RESPONSE, "url"=>string, "body"=>NET::HTTP:RESPONSE.body}
81
+ headers = p[:headers] ||= {}
82
+ timeout = p[:timeout] ||= @timeout
83
+ if params.empty?
84
+ raise HypeTextExcetion::MissingPostParams.new("HypeText.post_by_url(url, params) requires parameters.")
85
+ end
86
+
87
+ # Uri parsing
88
+ u = URI.parse(url)
89
+ path = u.path
90
+
91
+ # Construct params
92
+ a = []
93
+ params.each do |key, value|
94
+ a << "#{key}=#{value}"
95
+ end
96
+ post_params = a.join("&")
97
+
98
+ # Setup Http
99
+ if url.match(/^https/)
100
+ # If its an ssl url.. time setup up the ssl
101
+ http = Net::HTTP.new(u.host, u.port)
102
+ http.use_ssl = true
103
+ http.ca_file = @rootCA
104
+ if @ssl_verify
105
+ # set verification
106
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
107
+ else
108
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
109
+ end
110
+ http.verify_depth = 5 # Protect against stack looping...
111
+ else
112
+ http = Net::HTTP.new(u.host, u.port)
113
+ end
114
+ begin
115
+ Timeout::timeout(timeout) do
116
+ resp, data = http.post(path, post_params)
117
+ @full_call = "#{u.host}:#{u.port}#{path}"
118
+ @last_call = @full_call
119
+ return {:response=>resp, :url=>@full_call, :body=>resp.body, :params=>params}
120
+ end
121
+ rescue Timeout::Error
122
+ # If the call times out.. Catch it and throw an HttpClientException for better handling up the stack
123
+ raise HypeTextException::TimeoutError.new("Post to #{@full_call} Timed Out")
124
+ end
125
+ end
126
+
127
+ end
128
+
129
+
130
+ class HypeTextException < Exception
131
+
132
+ class MissingPostParams < HypeTextException
133
+ end
134
+
135
+ class TimeoutError < HypeTextException
136
+ end
137
+
138
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hypetext
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Heijmans
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-11 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A gem that provides a simple and dirty HTTP client that handles get,
15
+ post, and automatic SSL
16
+ email: parabuzzle@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/hypetext.rb
22
+ homepage: https://github.com/parabuzzle/hypetext
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.25
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: Simple dirty HTTP client library
46
+ test_files: []