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 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