webcache 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +32 -17
- data/lib/webcache.rb +1 -0
- data/lib/webcache/response.rb +21 -0
- data/lib/webcache/version.rb +1 -1
- data/lib/webcache/web_cache.rb +10 -15
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c2a4162f4e389f2e179228e16f143ac6c22f7aa
|
4
|
+
data.tar.gz: e3790f1a5d4e219de4b3499e582e527bf4e03af3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90d54a6b3b0005cc06212337fb71ac681924ca0725dedb2ea2b074f88d0884c29ce97428d187b227be5ee582ff4d2cc1966ab5e9e3eac01826ddd38c8177e36a
|
7
|
+
data.tar.gz: 3788c024218d83ae2041fba24c07b76ef95001d6fca166445caa238c488a2233465d4e972abda51829e4687292287481b2e4d1cfba6997f53cf2af875d0b2f16
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ WebCache
|
|
8
8
|
|
9
9
|
---
|
10
10
|
|
11
|
-
|
11
|
+
Hassle-free caching for HTTP download.
|
12
12
|
|
13
13
|
---
|
14
14
|
|
@@ -28,22 +28,27 @@ gem 'webcache'
|
|
28
28
|
Usage
|
29
29
|
--------------------------------------------------
|
30
30
|
|
31
|
-
|
31
|
+
Load a file from cache, or download if needed:
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
require 'webcache'
|
35
35
|
cache = WebCache.new
|
36
|
-
|
36
|
+
response = cache.get 'http://example.com'
|
37
|
+
puts response # => "<html>...</html>"
|
38
|
+
puts response.content # => same as above
|
39
|
+
puts response.to_s # => same as above
|
40
|
+
puts response.error # => nil
|
41
|
+
puts response.base_uri # => "http://example.com/"
|
37
42
|
```
|
38
43
|
|
39
|
-
By default, the cached objects are stored in the `./cache`
|
40
|
-
expire after 60 minutes. The cache
|
44
|
+
By default, the cached objects are stored in the `./cache` directory, and
|
45
|
+
expire after 60 minutes. The cache directory will be created as needed.
|
41
46
|
|
42
47
|
You can change these settings on initialization:
|
43
48
|
|
44
49
|
```ruby
|
45
50
|
cache = WebCache.new 'tmp/my_cache', 7200
|
46
|
-
|
51
|
+
response = cache.get 'http://example.com'
|
47
52
|
```
|
48
53
|
|
49
54
|
Or later:
|
@@ -52,7 +57,7 @@ Or later:
|
|
52
57
|
cache = WebCache.new
|
53
58
|
cache.dir = 'tmp/my_cache'
|
54
59
|
cache.life = 7200 # seconds
|
55
|
-
|
60
|
+
response = cache.get 'http://example.com'
|
56
61
|
```
|
57
62
|
|
58
63
|
To check if a URL is cached, use the `cached?` method:
|
@@ -62,7 +67,7 @@ cache = WebCache.new
|
|
62
67
|
cache.cached? 'http://example.com'
|
63
68
|
# => false
|
64
69
|
|
65
|
-
|
70
|
+
response = cache.get 'http://example.com'
|
66
71
|
cache.cached? 'http://example.com'
|
67
72
|
# => true
|
68
73
|
```
|
@@ -75,31 +80,41 @@ cache.disable
|
|
75
80
|
cache.enabled?
|
76
81
|
# => false
|
77
82
|
|
78
|
-
|
83
|
+
response = cache.get 'http://example.com'
|
79
84
|
cache.cached? 'http://example.com'
|
80
85
|
# => false
|
81
86
|
|
82
87
|
cache.enable
|
83
|
-
|
88
|
+
response = cache.get 'http://example.com'
|
84
89
|
cache.cached? 'http://example.com'
|
85
90
|
# => true
|
86
91
|
```
|
87
92
|
|
88
|
-
|
93
|
+
Response Object
|
89
94
|
--------------------------------------------------
|
90
95
|
|
91
|
-
|
96
|
+
The response object holds these properties:
|
92
97
|
|
93
|
-
|
94
|
-
|
98
|
+
**`response.content`**:
|
99
|
+
Contains the HTML content. In case of an error, this will include the
|
100
|
+
error message. The `#to_s` method of the response object also returns
|
101
|
+
the same content.
|
102
|
+
|
103
|
+
**`response.error`**:
|
104
|
+
In case of an error, this contains the error message, `nil` otherwose.
|
105
|
+
|
106
|
+
**`response.base_uri`**:
|
107
|
+
Contains the actual address of the page. This is useful when the request
|
108
|
+
is redirected. For example, `http://example.com` will set the
|
109
|
+
`base_uri` to `http://example.com/` (note the trailing slash).
|
95
110
|
|
96
|
-
If `last_error` is anything but `false`, it means failure.
|
97
111
|
|
98
112
|
```ruby
|
99
113
|
cache = WebCache.new
|
100
|
-
|
114
|
+
response = cache.get 'http://example.com/not_found'
|
115
|
+
puts response
|
101
116
|
# => '404 Not Found'
|
102
117
|
|
103
|
-
puts
|
118
|
+
puts response.error
|
104
119
|
# => '404 Not Found'
|
105
120
|
```
|
data/lib/webcache.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
class WebCache
|
2
|
+
class Response
|
3
|
+
attr_accessor :error, :base_uri, :content
|
4
|
+
|
5
|
+
def initialize(opts={})
|
6
|
+
if opts.respond_to?(:read) && opts.respond_to?(:base_uri)
|
7
|
+
self.content = opts.read
|
8
|
+
self.base_uri = opts.base_uri
|
9
|
+
self.error = nil
|
10
|
+
elsif opts.is_a? Hash
|
11
|
+
self.error = opts[:error] if opts[:error]
|
12
|
+
self.base_uri = opts[:base_uri] if opts[:base_uri]
|
13
|
+
self.content = opts[:content] if opts[:content]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
content
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/webcache/version.rb
CHANGED
data/lib/webcache/web_cache.rb
CHANGED
@@ -13,21 +13,17 @@ class WebCache
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def get(url)
|
16
|
-
@last_error = false
|
17
16
|
return http_get url unless enabled?
|
18
17
|
|
19
18
|
path = get_path url
|
20
19
|
FileUtils.rm path if old? path
|
21
|
-
return load_file_content path if File.exist? path
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
save_file_content(path, content)
|
28
|
-
end
|
21
|
+
return load_file_content(path) if File.exist? path
|
22
|
+
|
23
|
+
response = http_get(url)
|
24
|
+
save_file_content(path, response) unless !response || response.error
|
29
25
|
|
30
|
-
|
26
|
+
response
|
31
27
|
end
|
32
28
|
|
33
29
|
def cached?(url)
|
@@ -50,7 +46,6 @@ class WebCache
|
|
50
46
|
private
|
51
47
|
|
52
48
|
def get_path(url)
|
53
|
-
@last_url = url
|
54
49
|
File.join dir, Digest::MD5.hexdigest(url)
|
55
50
|
end
|
56
51
|
|
@@ -58,18 +53,18 @@ class WebCache
|
|
58
53
|
Marshal.load File.binread(path)
|
59
54
|
end
|
60
55
|
|
61
|
-
def save_file_content(path,
|
56
|
+
def save_file_content(path, response)
|
62
57
|
FileUtils.mkdir_p dir
|
63
58
|
File.open path, 'wb' do |f|
|
64
|
-
f.write Marshal.dump
|
59
|
+
f.write Marshal.dump response
|
65
60
|
end
|
66
61
|
end
|
67
62
|
|
68
63
|
def http_get(url)
|
69
64
|
begin
|
70
|
-
open(url)
|
71
|
-
rescue
|
72
|
-
|
65
|
+
Response.new open(url)
|
66
|
+
rescue => e
|
67
|
+
Response.new error: e.message, base_uri: url, content: e.message
|
73
68
|
end
|
74
69
|
end
|
75
70
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: runfile
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.11'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '9.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '9.0'
|
69
83
|
description: Easy to use file cache for web downloads
|
70
84
|
email: db@dannyben.com
|
71
85
|
executables: []
|
@@ -74,6 +88,7 @@ extra_rdoc_files: []
|
|
74
88
|
files:
|
75
89
|
- README.md
|
76
90
|
- lib/webcache.rb
|
91
|
+
- lib/webcache/response.rb
|
77
92
|
- lib/webcache/version.rb
|
78
93
|
- lib/webcache/web_cache.rb
|
79
94
|
homepage: https://github.com/DannyBen/webcache
|
@@ -96,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
111
|
version: '0'
|
97
112
|
requirements: []
|
98
113
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.
|
114
|
+
rubygems_version: 2.5.1
|
100
115
|
signing_key:
|
101
116
|
specification_version: 4
|
102
117
|
summary: Hassle-free caching for HTTP download
|