webcache 0.1.1 → 0.2.0

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: 31ef4fc734aa42ccb8ed629de15a5bf7d48fd2ea
4
- data.tar.gz: 2e44e49b6e8c66a26c83fb2fcb2ca1cadab7a6c1
3
+ metadata.gz: 5c2a4162f4e389f2e179228e16f143ac6c22f7aa
4
+ data.tar.gz: e3790f1a5d4e219de4b3499e582e527bf4e03af3
5
5
  SHA512:
6
- metadata.gz: 5336d34a8cafb3c8311209b4e50cb7191a8caa3da4fe999a4bf6036a7abed161e5d3b54c3e3cfbe64a7e81efd476a2016ba8a08f8eb0ca19795ef2463e789b69
7
- data.tar.gz: 4ffdc6145037c4459e49cab3ca28bdc2f2f3915a6f15480e1c6ea44363dde1540043e7655e5653dfb2dba90b789e33bed3e2d28dc5567217db61b1ea889b43a4
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
- WebCache provides a hassle-free caching for HTTP download.
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
- Use `WebCache.get url` to load from cache, or download:
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
- content = cache.get 'http://example.com'
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` folder, and
40
- expire after 60 minutes. The cache folder will be created as needed.
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
- content = cache.get 'http://example.com'
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
- content = cache.get 'http://example.com'
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
- content = cache.get 'http://example.com'
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
- content = cache.get 'http://example.com'
83
+ response = cache.get 'http://example.com'
79
84
  cache.cached? 'http://example.com'
80
85
  # => false
81
86
 
82
87
  cache.enable
83
- content = cache.get 'http://example.com'
88
+ response = cache.get 'http://example.com'
84
89
  cache.cached? 'http://example.com'
85
90
  # => true
86
91
  ```
87
92
 
88
- Error Handling
93
+ Response Object
89
94
  --------------------------------------------------
90
95
 
91
- Whenever a request results in any HTTP error, two things will happen:
96
+ The response object holds these properties:
92
97
 
93
- 1. The return value will be set to the error message
94
- 2. The `last_error` variable will be set to the error message
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
- puts cache.get 'http://example.com/not_found'
114
+ response = cache.get 'http://example.com/not_found'
115
+ puts response
101
116
  # => '404 Not Found'
102
117
 
103
- puts cache.last_error
118
+ puts response.error
104
119
  # => '404 Not Found'
105
120
  ```
data/lib/webcache.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require 'webcache/version'
2
2
  require 'webcache/web_cache'
3
+ require 'webcache/response'
@@ -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
@@ -1,3 +1,3 @@
1
1
  class WebCache
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -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
- content = http_get(url)
24
- if @last_error
25
- content = @last_error
26
- else
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
- content
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, content)
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 content
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).read
71
- rescue OpenURI::HTTPError => e
72
- @last_error = e.message
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.1.1
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-05-21 00:00:00.000000000 Z
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.4.6
114
+ rubygems_version: 2.5.1
100
115
  signing_key:
101
116
  specification_version: 4
102
117
  summary: Hassle-free caching for HTTP download