http_session 0.2.1 → 0.3.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.
- data/VERSION +1 -1
- data/http_session.gemspec +2 -2
- data/lib/http_session.rb +14 -8
- metadata +16 -16
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/http_session.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{http_session}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{David Burry}]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-11-06}
|
13
13
|
s.description = %q{A useful yet still extremely light-weight web client built on top of Ruby Net::HTTP. Keeps certain information internally in a session for each host/port used. Great for simple web page scraping or web service API usage.}
|
14
14
|
s.email = %q{dburry@falcon}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/http_session.rb
CHANGED
@@ -114,8 +114,12 @@ class HttpSession
|
|
114
114
|
# Session initialization and basic handling
|
115
115
|
#
|
116
116
|
|
117
|
-
#
|
118
|
-
|
117
|
+
# Simplest thread-safe pooling mechanism is to make a separate session store for every thread.
|
118
|
+
# Each thread makes its own connection(s), the way you'd expect that way.
|
119
|
+
# Just don't try to share http_session instances between separate threads, and it will work fine.
|
120
|
+
def self.session_store
|
121
|
+
Thread.current['http_session_sessions'] ||= {}
|
122
|
+
end
|
119
123
|
|
120
124
|
# storage for open session handle, for instance method usage
|
121
125
|
attr_accessor :handle
|
@@ -144,18 +148,19 @@ class HttpSession
|
|
144
148
|
|
145
149
|
# check if a session exists yet ot not
|
146
150
|
def self.exists?(host, use_ssl=false, port=nil)
|
147
|
-
|
151
|
+
session_store.has_key?(key(host, use_ssl, port))
|
148
152
|
end
|
149
153
|
|
150
154
|
# get the session for the given host and port, nil if there isn't one yet
|
151
155
|
def self.get(host, use_ssl=false, port=nil)
|
152
|
-
|
156
|
+
session_store[key(host, use_ssl, port)]
|
153
157
|
end
|
154
158
|
|
155
159
|
# get the session for the given host and port, creating a new one if it doesn't exist
|
156
160
|
def self.use(host, use_ssl=false, port=nil)
|
157
|
-
|
158
|
-
|
161
|
+
exists?(host, use_ssl, port) ?
|
162
|
+
get(host, use_ssl, port) :
|
163
|
+
(session_store[key(host, use_ssl, port)] = new(host, use_ssl, port_or_default(port, use_ssl)))
|
159
164
|
end
|
160
165
|
|
161
166
|
# done with this session, close and reset it
|
@@ -167,8 +172,9 @@ class HttpSession
|
|
167
172
|
|
168
173
|
# delete session from session storage (you should probably call close on it too, and set all references to nil so it gets garbage collected)
|
169
174
|
def delete
|
170
|
-
|
171
|
-
|
175
|
+
if self.class.exists?(handle.address, handle.use_ssl?, handle.port)
|
176
|
+
self.class.session_store.delete(self.class.key(handle.address, handle.use_ssl?, handle.port))
|
177
|
+
end
|
172
178
|
end
|
173
179
|
|
174
180
|
# return the given port, or defaults for ssl setting if it's nil
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-06 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70196754286760 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.8.7
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70196754286760
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
requirement: &
|
27
|
+
requirement: &70196754285420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70196754285420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &70196754284000 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70196754284000
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &70196754282040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70196754282040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &70196754280780 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70196754280780
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
|
-
requirement: &
|
71
|
+
requirement: &70196754279500 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.4.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70196754279500
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rdoc
|
82
|
-
requirement: &
|
82
|
+
requirement: &70196754278100 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70196754278100
|
91
91
|
description: A useful yet still extremely light-weight web client built on top of
|
92
92
|
Ruby Net::HTTP. Keeps certain information internally in a session for each host/port
|
93
93
|
used. Great for simple web page scraping or web service API usage.
|