glebtv-httpclient 3.2.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f1fdf05ea5ea3a8e6ae1d34a30ea0c9f2d96d64
4
- data.tar.gz: 63dc5a23fd66a60cc43dcb36822bf584ac0ad46b
3
+ metadata.gz: cf53dd7d1fb84aafaf0d492a43fea2120759dab6
4
+ data.tar.gz: e57fc09b5ff8aecaffe1b6691175c4fdadb50e33
5
5
  SHA512:
6
- metadata.gz: 72a594a622305d413831c95ee52af3303894c0a7f945ae9ca82b8015f675aee44df2da25163100e33575ab02d270f498849c2c2b5ac358280db98f7fcb708417
7
- data.tar.gz: 29a42481ba18e44194d22a48b05aa808eb779e524a4fe06b2ed23829c2ab68cb3db0107783c043c7d4709a12ef3bd539460826f28514ed6ac2b37efd74717a3e
6
+ metadata.gz: 007324756e3fc82d18487b249df8568963b1b783d9af76179db92bc75be378672dd1afde44cce40a2a7175945ac403c889d3855fb1c63ac97f087005a729b489
7
+ data.tar.gz: fbcccac32b648db73853951458782f978e17e3094060740f4fb9d93fbd437cdd751afa300fa0cf871143fd87e9842a908910121b6a057c10b6108c0fe5d58404
@@ -2,5 +2,6 @@ rvm:
2
2
  - 1.9.3
3
3
  - 2.0.0
4
4
  - 2.1.0
5
- - jruby-19mode
6
- - rbx-2.2.1
5
+
6
+ notifications:
7
+ email: false
@@ -1,15 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- glebtv-httpclient (3.2.0)
5
- PriorityQueue
4
+ glebtv-httpclient (3.2.1)
6
5
  activesupport
7
6
  addressable
7
+ lru_redux
8
8
 
9
9
  GEM
10
10
  remote: http://rubygems.org/
11
11
  specs:
12
- PriorityQueue (0.1.2)
13
12
  activesupport (4.0.2)
14
13
  i18n (~> 0.6, >= 0.6.4)
15
14
  minitest (~> 4.2)
@@ -29,6 +28,7 @@ GEM
29
28
  ffi2-generators (0.1.1)
30
29
  i18n (0.6.9)
31
30
  json (1.8.1)
31
+ lru_redux (0.8.1)
32
32
  mime-types (2.1)
33
33
  minitest (4.7.5)
34
34
  multi_json (1.8.4)
@@ -46,7 +46,7 @@ GEM
46
46
  diff-lcs (>= 1.1.3, < 2.0)
47
47
  rspec-mocks (2.14.5)
48
48
  rubinius-coverage (2.0.3)
49
- rubinius-debugger (2.0.0)
49
+ rubinius-debugger (2.0.1)
50
50
  rubinius-developer_tools (2.0.0)
51
51
  rubinius-coverage (~> 2.0)
52
52
  rubinius-debugger (~> 2.0)
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_dependency "activesupport"
24
- spec.add_dependency "PriorityQueue"
24
+ spec.add_dependency "lru_redux"
25
25
  spec.add_dependency "addressable"
26
26
 
27
27
  spec.add_development_dependency "bundler"
@@ -21,7 +21,6 @@ require 'httpclient/cookie'
21
21
  require 'httpclient/cookie'
22
22
 
23
23
  require 'httpclient/lru_cache'
24
- require 'httpclient/lru_threadsafe'
25
24
 
26
25
  require 'active_support/core_ext'
27
26
 
@@ -235,7 +234,7 @@ require 'active_support/core_ext'
235
234
  # ruby -rhttpclient -e 'p HTTPClient.head(ARGV.shift).header["last-modified"]' http://dev.ctor.org/
236
235
  #
237
236
  class HTTPClient
238
- @@dns_cache = HTTPClient::ThreadSafeCache.new(ttl: 20.minutes, soft_ttl: 10.minute, retry_delay: 5.minutes)
237
+ @@dns_cache = HTTPClient::LRUCache.new(ttl: 20.minutes, soft_ttl: 10.minute, retry_delay: 5.minutes)
239
238
  cattr_accessor :dns_cache
240
239
 
241
240
  def own_methods
@@ -3,18 +3,16 @@
3
3
  # Taken from: https://github.com/kindkid/lrucache/blob/master/lib/lrucache.rb
4
4
  # (MIT Licensed). Thanks!
5
5
 
6
- require "priority_queue"
6
+ require "lru_redux"
7
7
 
8
8
  # Not thread-safe!
9
9
  class HTTPClient
10
10
  class LRUCache
11
11
 
12
- attr_reader :default, :max_size, :ttl, :soft_ttl, :retry_delay
12
+ attr_reader :max_size, :ttl, :soft_ttl, :retry_delay
13
13
 
14
14
  def initialize(opts={})
15
15
  @max_size = Integer(opts[:max_size] || 100)
16
- @default = opts[:default]
17
- @eviction_handler = opts[:eviction_handler]
18
16
  @ttl = Float(opts[:ttl] || 0)
19
17
  @soft_ttl = Float(opts[:soft_ttl] || 0)
20
18
  @retry_delay = Float(opts[:retry_delay] || 0)
@@ -23,96 +21,39 @@ class HTTPClient
23
21
  raise "soft_ttl must not be negative" if @soft_ttl < 0
24
22
  raise "retry_delay must not be negative" if @retry_delay < 0
25
23
 
26
- @pqueue = PriorityQueue.new
27
- @data = {}
28
- @counter = 0
24
+ @data = LruRedux::Cache.new(@max_size)
29
25
  end
30
26
 
31
- def clear
32
- @data.clear
33
- @pqueue.delete_min until @pqueue.empty?
34
- @counter = 0 #might as well
35
- end
36
-
37
- def include?(key)
38
- datum = @data[key]
39
- return false if datum.nil?
40
- if datum.expired?
41
- delete(key)
42
- false
43
- else
44
- access(key)
45
- true
46
- end
47
- end
48
-
49
- def store(key, value, args={})
50
- evict_lru! unless @data.include?(key) || @data.size < max_size
51
- ttl, soft_ttl, retry_delay = extract_arguments(args)
52
- expiration = expiration_date(ttl)
53
- soft_expiration = expiration_date(soft_ttl)
27
+ def store(key, value)
28
+ expiration = Time.now + @ttl
29
+ soft_expiration = Time.now + @soft_ttl
54
30
  @data[key] = Datum.new(value, expiration, soft_expiration)
55
- access(key)
56
31
  value
57
32
  end
58
33
 
59
34
  alias :[]= :store
60
35
 
61
- def fetch(key, args={})
36
+ def fetch(key)
62
37
  datum = @data[key]
63
38
  if datum.nil?
64
- if block_given?
65
- store(key, value = yield, args)
66
- else
67
- @default
68
- end
39
+ store(key, value = yield)
69
40
  elsif datum.expired?
70
41
  delete(key)
71
- if block_given?
72
- store(key, value = yield, args)
73
- else
74
- @default
75
- end
42
+ store(key, value = yield)
76
43
  elsif datum.soft_expired?
77
- if block_given?
78
- begin
79
- store(key, value = yield, args)
80
- rescue RuntimeError => e
81
- access(key)
82
- ttl, soft_ttl, retry_delay = extract_arguments(args)
83
- datum.soft_expiration = (Time.now + retry_delay) if retry_delay > 0
84
- datum.value
85
- end
86
- else
87
- access(key)
44
+ begin
45
+ store(key, value = yield)
46
+ rescue RuntimeError => e
47
+ datum.soft_expiration = (Time.now + retry_delay) if retry_delay > 0
88
48
  datum.value
89
49
  end
90
50
  else
91
- access(key)
92
51
  datum.value
93
52
  end
94
53
  end
95
54
 
96
55
  alias :[] :fetch
97
56
 
98
- def empty?
99
- size == 0
100
- end
101
-
102
- def size
103
- @data.size
104
- end
105
-
106
- def keys
107
- @data.keys
108
- end
109
-
110
- def delete(key)
111
- @pqueue.delete(key)
112
- datum = @data.delete(key)
113
- datum.value unless datum.nil?
114
- end
115
-
116
57
  private
117
58
 
118
59
  class Datum
@@ -132,40 +73,5 @@ class HTTPClient
132
73
  !@soft_expiration.nil? && @soft_expiration <= Time.now
133
74
  end
134
75
  end
135
-
136
- def expiration_date(ttl)
137
- if ttl.is_a?(Time)
138
- ttl
139
- else
140
- ttl = Float(ttl)
141
- (ttl > 0) ? (Time.now + ttl) : nil
142
- end
143
- end
144
-
145
- def extract_arguments(args)
146
- if args.is_a?(Hash)
147
- ttl = args[:ttl] || @ttl
148
- soft_ttl = args[:soft_ttl] || @soft_ttl
149
- retry_delay = args[:retry_delay] || @retry_delay
150
- [ttl, soft_ttl, retry_delay]
151
- else
152
- # legacy arg
153
- ttl = args || @ttl
154
- [ttl, @soft_ttl, @retry_delay]
155
- end
156
- end
157
-
158
- def evict_lru!
159
- key, priority = @pqueue.delete_min
160
- unless priority.nil?
161
- datum = @data.delete(key)
162
- @eviction_handler.call(datum.value) if @eviction_handler && datum
163
- end
164
- end
165
-
166
- def access(key)
167
- @pqueue.change_priority(key, @counter += 1)
168
- end
169
-
170
76
  end
171
77
  end
@@ -1,3 +1,3 @@
1
1
  class HTTPClient
2
- VERSION = '3.2.0' unless defined?(VERSION)
2
+ VERSION = '3.2.1' unless defined?(VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glebtv-httpclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-02 00:00:00.000000000 Z
12
+ date: 2014-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -26,7 +26,7 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: PriorityQueue
29
+ name: lru_redux
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '>='
@@ -169,7 +169,6 @@ files:
169
169
  - lib/httpclient/http.rb
170
170
  - lib/httpclient/include_client.rb
171
171
  - lib/httpclient/lru_cache.rb
172
- - lib/httpclient/lru_threadsafe.rb
173
172
  - lib/httpclient/session.rb
174
173
  - lib/httpclient/ssl_config.rb
175
174
  - lib/httpclient/util.rb
@@ -1,29 +0,0 @@
1
- # Make LRU cache Threadsafe
2
- # Idea from: https://github.com/SamSaffron/lru_redux/blob/master/lib/lru_redux/thread_safe_cache.rb
3
- # (MIT License)
4
-
5
- require 'thread'
6
- require 'monitor'
7
-
8
- class HTTPClient::ThreadSafeCache < HTTPClient::LRUCache
9
- include MonitorMixin
10
-
11
- def initialize(opts={})
12
- super(opts)
13
- end
14
-
15
- def self.synchronize(*methods)
16
- methods.each do |method|
17
- define_method method do |*args, &blk|
18
- synchronize do
19
- super(*args, &blk)
20
- end
21
- end
22
- end
23
-
24
- alias :[]= :store
25
- alias :[] :fetch
26
- end
27
-
28
- synchronize :fetch, :store, :delete, :clear, :include?, :empty, :size, :keys
29
- end