disk_cache 0.0.2

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/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ cache/*
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - rbx-19mode
5
+ - jruby-19mode
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in file_cache.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Maximilian Haack
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # DiskCache
2
+
3
+ [![Build Status](https://secure.travis-ci.org/propertybase/disk_cache.png)](https://travis-ci.org/propertybase/disk_cache)
4
+
5
+ What does it do? You give DiskCache the URL of a file and DiskCache makes sure
6
+ that it has the file stored on disk. You can retrieve your files with the same
7
+ URL you used to save the file.
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'disk_cache'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install disk_cache
22
+
23
+ ## Usage
24
+
25
+ ```ruby
26
+ # to save an image in the cache
27
+ DiskCache.put('http://example.com/1234abc.jpg')
28
+ #=> nil
29
+
30
+ # to get an image from the cache
31
+ DiskCache.get('http://example.com/1234abc.jpg')
32
+ #=> #<File:1234abc.jpg>
33
+ # or
34
+ #=> nil # if the file isn't stored in the cache
35
+
36
+ # to get a file no matter if it was stored in the cache or not
37
+ # this will get the file from disk or download it and save it in the cache
38
+ DiskCache.pget('http://example.com/1234abc.jpg')
39
+ #=> #<File:1234abc.jpg>
40
+
41
+ # to delete an image from the cache
42
+ DiskCache.del('http://example.com/1234abc.jpg')
43
+ #=> nil
44
+ ```
45
+
46
+
47
+ ## Ideas
48
+
49
+ - option to check if an image has changed (i.e. HTTP Last-Modified)
50
+
51
+ ```ruby
52
+ Net::HTTP.start("example.com") do |http|
53
+ response = http.request_head('/1352127364208.png')
54
+ puts response['Last-Modified']
55
+ end
56
+ ```
57
+
58
+ - option to change the path of the cache
59
+
60
+ - option to force a .put, i.e. overwrite
61
+
62
+ - option to set the depth of subfolders
63
+
64
+
65
+ ## Contributing
66
+
67
+ 1. Fork it
68
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
69
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
70
+ 4. Push to the branch (`git push origin my-new-feature`)
71
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'disk_cache/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "disk_cache"
8
+ gem.version = DiskCache::VERSION
9
+ gem.authors = ["Maximilian Haack"]
10
+ gem.email = ["mxhaack@gmail.com"]
11
+ gem.description = %q{A simple way to cache your files.}
12
+ gem.summary = %q{Cache files that you have have to use several times.}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_development_dependency "rake"
21
+ gem.add_development_dependency "rspec"
22
+ end
@@ -0,0 +1,3 @@
1
+ module DiskCache
2
+ VERSION = "0.0.2"
3
+ end
data/lib/disk_cache.rb ADDED
@@ -0,0 +1,149 @@
1
+ require 'disk_cache/version'
2
+ require 'open-uri'
3
+ require 'digest/sha2'
4
+
5
+ module DiskCache
6
+ extend self
7
+
8
+ # Public: save a file to the cache
9
+ #
10
+ # url - The URL to the file
11
+ #
12
+ # Example:
13
+ #
14
+ # DiskCache.put('http://example.com/test123.jpg')
15
+ # #=> nil
16
+ #
17
+ # Returns: nil
18
+ def put(url)
19
+ file = filepath(url)
20
+ return nil if File.exist?(file)
21
+
22
+ FileUtils.mkdir_p path(url)
23
+ File.open(file, "wb") { |f| f << open(url).read }
24
+ nil
25
+ end
26
+
27
+ # Public: get a file from the cache
28
+ #
29
+ # url - The URL to the file
30
+ #
31
+ # Examples:
32
+ #
33
+ # DiskCache.get('http://example.com/test123.jpg')
34
+ # # => #<File:9ae274d94c34542ddd1b64667c1d4e392211ff67>
35
+ #
36
+ # DiskCache.get('http://example.com/test123.jpg')
37
+ # # => nil
38
+ #
39
+ # Returns the File or nil
40
+ def get(url)
41
+ File.open(filepath(url), "rb")
42
+ rescue Errno::ENOENT
43
+ nil
44
+ end
45
+
46
+ # Public: get a file and save it to the cache if it isn't there already
47
+ #
48
+ # url - The URL to the file
49
+ #
50
+ # Examples:
51
+ #
52
+ # DiskCache.get('http://example.com/test123.jpg')
53
+ # # => #<File:9ae274d94c34542ddd1b64667c1d4e392211ff67>
54
+ #
55
+ # Returns a File
56
+ def pget(url)
57
+ put(url)
58
+ get(url)
59
+ end
60
+
61
+ # Public: delete a file from the cache
62
+ #
63
+ # url - The URL to the file
64
+ #
65
+ # Example:
66
+ #
67
+ # DiskCache.del('http://example.com/test123.jpg')
68
+ # # => nil
69
+ #
70
+ # Returns nil
71
+ def del(url)
72
+ FileUtils.rm filepath(url), force: true
73
+ end
74
+
75
+ private
76
+
77
+ # Internal: Hashes a given piece of data with SHA1
78
+ #
79
+ # datum - piece of data to be hashed
80
+ #
81
+ # Examples:
82
+ #
83
+ # hash('hi')
84
+ # # => "c22b5f9178342609428d6f51b2c5af4c0bde6a42"
85
+ #
86
+ # Returns String with hexdigest
87
+ def hash(datum)
88
+ @hasher ||= Digest::SHA1.new
89
+ @hasher.hexdigest(datum)
90
+ end
91
+
92
+ # Internal: Return the directory of the cache as a String
93
+ def cache_dir
94
+ Dir.pwd + '/cache/'
95
+ end
96
+
97
+ # Internal: Calculate a path from a hash
98
+ #
99
+ # hsh - the hash
100
+ #
101
+ # Example:
102
+ #
103
+ # path_h('9ae274d94c34542ddd1b64667c1d4e392211ff67')
104
+ # # => "cache/9a/e2/"
105
+ def path_h(hsh)
106
+ dir = hsh[0..1] + '/'
107
+ subdir = hsh[2..3] + '/'
108
+ cache_dir + dir + subdir
109
+ end
110
+
111
+ # Internal: calculate the path from a URL
112
+ #
113
+ # url - The URL to the file
114
+ #
115
+ # Example:
116
+ #
117
+ # path('http://example.com/test123.jpg')
118
+ # # => "cache/9a/e2/"
119
+ def path(url)
120
+ path_h hash(url)
121
+ end
122
+
123
+ # Internal: calculate the filename from a hash
124
+ #
125
+ # hsh - the hash
126
+ #
127
+ # Example:
128
+ #
129
+ # filename_h('9ae274d94c34542ddd1b64667c1d4e392211ff67')
130
+ # # => "74d94c34542ddd1b64667c1d4e392211ff67"
131
+ def filename_h(hsh)
132
+ hsh[4..-1]
133
+ end
134
+
135
+ # Internal: calculate the path/filename of a file's URL
136
+ #
137
+ # url - the URL of the file
138
+ #
139
+ # Example:
140
+ #
141
+ # filepath!('http://example.com/test123.jpg')
142
+ # # => "cache/9a/e2/74d94c34542ddd1b64667c1d4e392211ff67"
143
+ #
144
+ # Returns a Sting with the full path and filename
145
+ def filepath(url)
146
+ hsh = hash url
147
+ path_h(hsh) + filename_h(hsh)
148
+ end
149
+ end
@@ -0,0 +1,110 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="365px" height="290px" viewBox="0 0 365 290" enable-background="new 0 0 365 290" xml:space="preserve">
6
+ <g>
7
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M186.523,42.629c-5.146,4.192-9.271,9.407-9.339,18.68
8
+ C173.461,53.847,177.921,43.395,186.523,42.629z"/>
9
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M123.948,53.836c7.713-4.167,10.029,14.72,5.604,19.613
10
+ C130.161,64.435,129.688,56.502,123.948,53.836z"/>
11
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M258.439,84.657c-6.472,7.459-15.34,1.071-24.283,0
12
+ c-19.291-2.311-37.813,6.279-51.368,12.142c-30.483-15.506,8.09-36.934,38.293-35.49C241.571,62.287,255.368,71.441,258.439,84.657
13
+ z M206.138,68.78c-9.442,5.189-24.801,4.463-25.218,18.679c13.235,0.783,15.879-9.026,28.953-8.405
14
+ C208.595,75.662,209.309,70.278,206.138,68.78z M249.1,80.922c-0.981-4.312-4.509-6.076-10.273-5.604
15
+ C238.269,81.168,246.137,78.592,249.1,80.922z"/>
16
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M135.156,84.657c4.476-1.044,8.57-2.613,12.142,0
17
+ c-0.284,6.877-7.897,6.424-12.142,9.34c0,5.915,0,11.83,0,17.745c-5.259,4.703-12.976,6.949-16.812,13.076
18
+ c3.135,8.071,8.689,13.726,15.877,17.745c4.63-0.261,6.327-5.545,11.208-2.802c-6.817,22.618-25.415,0.727-32.689-8.406
19
+ c-2.53,1.206-3.32,4.151-7.472,3.736c0.448-2.938-1.33-3.651-1.868-5.604c-7.304,1.725-10.321,7.736-19.613,7.472
20
+ c16.933-7.661,29.157-20.031,43.896-29.887c0-4.358,0-8.717,0-13.075c-12.206-8.964-38.5-3.84-52.302-11.208
21
+ C83.698,60.844,125.495,70.63,135.156,84.657z M88.458,79.054c4.574,1.797,12.003,0.818,15.877-0.935
22
+ C99.76,76.322,92.331,77.302,88.458,79.054z"/>
23
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M262.175,78.119c3.953-1.745,9.671,2.763,15.878,1.868
24
+ c0.017,4.97-8.155,5.776-12.142,3.736c0.127-2.676,6.411,0.807,6.538-1.868C269.202,80.433,264.614,80.351,262.175,78.119z"/>
25
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M71.646,81.855c-23.154-1.819-48.734,7.468-49.5,29.887
26
+ c-0.111,3.249,0.055,10.499,2.802,14.943c4.358,7.051,15.351,3.564,18.679,13.076c-17.196-4.129-25.099-13.865-23.349-30.821
27
+ C22.707,85.399,45.711,76.568,71.646,81.855z"/>
28
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M335.024,98.667c-6.505-12.485-20.566-17.415-41.095-15.878
29
+ C309.887,79.15,332.258,83.12,335.024,98.667z"/>
30
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M262.175,87.459c1.246-2.656,4.153,0.721,5.604,0.935
31
+ C266.478,91.106,263.17,88.129,262.175,87.459z"/>
32
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M219.213,88.394c9.786,1.591,14.354,12.004,26.151,13.075
33
+ c14.428,1.31,21.944-8.832,34.557-12.142c34.323-9.008,62.154,22.959,36.425,50.435c-4.15-9.265,4.082-13.921,2.802-25.218
34
+ c-1.492-13.156-14.128-21.953-28.953-19.613c-4.989,0.788-9.372,6.17-14.943,8.406C255.177,111.395,219.595,110.784,219.213,88.394
35
+ z"/>
36
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M45.495,90.261c-3.193,5.843-16.902,9.244-12.142,26.151
37
+ c-4.729-4.163,0.298-12.912-0.934-19.613C36.929,94.771,41.102,92.406,45.495,90.261z"/>
38
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M84.722,108.007c4.129-1.163,5.093-5.492,11.208-4.67
39
+ c3.946,12.136-11.755,12.458-23.349,12.142c-1-4.604-2.942-8.267-6.538-10.274c-10.696-1.044-17.042,2.26-26.151,2.803
40
+ C44.802,88.732,76.079,99.026,84.722,108.007z"/>
41
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M313.543,127.62c-4.974,1.819-8.905-0.382-14.009-0.935
42
+ c-3.296,2.591-6.112,8.619-3.736,14.01c-11.935,10.238-19.867,29.062-31.755,42.028c-29.346,32.013-80.396,45.875-146.633,42.963
43
+ c-21.421-0.941-46.364-3.273-56.972-14.01c-16.806-17.009-17.606-69.736-2.802-90.595c1.437-2.922-0.408-9.125,2.802-10.273
44
+ c7.459,2.57,3.389,13.441,5.604,19.613c4.615,12.864,30.345,21.159,48.566,23.35c68.329,8.211,126.044-27.586,170.916-42.963
45
+ c1.343-3.327,0.954-8.386,3.736-10.273c5.58,1.948,3.293,6.625,5.604,10.273C299.982,118.893,312.243,119.485,313.543,127.62z
46
+ M256.571,133.224c0,4.67,0,9.34,0,14.01c17.53-3.018,32.683-8.412,33.623-28.02C274.791,119.688,268.945,129.72,256.571,133.224z
47
+ M57.636,143.497c2.292-0.261,4.305-5.573,2.802-6.538C59.663,139.297,57.879,140.628,57.636,143.497z M205.203,149.102
48
+ c-0.035,6.262,2.396,10.057,2.802,15.877c15.756-6.971,39.716-5.737,41.095-27.085C235.18,138.609,220.17,146.32,205.203,149.102z
49
+ M66.976,166.847c0.883-6.916,5.052-16.135,0.934-22.415C64.852,149.008,57.265,163.712,66.976,166.847z M257.505,174.318
50
+ c2.373-1.989,5.732-3.469,8.406-6.538c3.599-4.131,10.779-16.792,9.34-16.812C264.421,152.788,248.867,162.037,257.505,174.318z
51
+ M77.25,170.582c4.59-1.431,8.138,3.009,10.274,0.935c-3.352-5.56,3.273-9.159,2.802-14.943c-5.494-0.11-7.863-3.345-12.142-4.67
52
+ C73.106,155.974,76.713,164.221,77.25,170.582z M195.863,152.837c-11.24,2.77-23.607,4.412-34.557,7.472c0,4.67,0,9.34,0,14.01
53
+ c16.108,1.165,26.879-3.008,39.227-5.604C199.478,162.921,199.495,156.055,195.863,152.837z M94.061,171.517
54
+ c8.027,2.247,17.244,3.304,28.019,2.802c-0.616-4.475,0.96-10.269,0-12.142c-8.43-0.91-18.129-0.551-24.283-3.735
55
+ C96.551,162.799,96.351,168.202,94.061,171.517z M131.42,162.177c0.224,4.894-2.273,7.066-2.802,11.208
56
+ c6.938,2.091,17.681,0.376,26.151,0.934c0-4.67,0-9.34,0-14.01C145.928,159.874,140.743,163.094,131.42,162.177z M211.741,178.055
57
+ c-1.32,11.904,6.023,15.146,7.472,24.283c13.203-5.166,22.749-13.987,33.623-21.481c-5.313-2.472-4.873-10.694-6.538-16.812
58
+ C236.302,170.238,224.683,174.807,211.741,178.055z M168.778,190.196c-0.727,9.132,1.317,15.493,0.934,24.282
59
+ c18.011,1.2,29.297-4.325,42.029-8.405c-2.256-9.264-8.135-14.903-8.406-26.151C193.193,184.724,182.508,188.981,168.778,190.196z
60
+ M66.042,203.271c-0.139-7.333-3.821-11.122-7.472-14.943C60.173,194.196,62.315,199.526,66.042,203.271z M83.788,211.677
61
+ c-2.131-7.831-4.333-15.592-11.208-18.679c-0.543,5.212,2.791,6.548,2.802,11.207c-0.58,3.212-5.024,1.893-5.604,2.802
62
+ C73.072,209.939,78.548,210.689,83.788,211.677z M133.288,195.8c0.056,8.038,3.105,13.084,2.802,21.481
63
+ c8.71-0.318,18.873,0.815,26.151-0.935c-0.284-4.262-1.548-15.125-0.934-23.349C152.832,194.852,141.989,197.003,133.288,195.8z
64
+ M92.193,212.611c3.603,1.378,7.057,2.905,12.142,2.802c-1.25-6.222-5.409-9.535-5.604-16.812
65
+ c-4.921-0.06-6.855-3.107-12.142-2.802C87.456,202.192,94.924,205.574,92.193,212.611z M106.203,197.668
66
+ c1.691,7.025,5.9,11.534,7.472,18.679c4.415,0.281,11.899,2.389,15.877,0C128.68,203.571,121.551,192.951,106.203,197.668z"/>
67
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M197.731,121.082c0.981,11.655-1.498,23.475-13.075,19.613
68
+ c-1.245-8.125,8.42-7.704,6.537-14.01c-1.758-5.887-9.642-2.651-16.811-5.604C176.042,109.851,193.845,115.804,197.731,121.082z"/>
69
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M200.533,115.479c3.937-0.161,0.641,2.091,0,2.802
70
+ c3.373,10.495,23.844-1.871,28.02,7.472C220.211,119.987,196.217,130.807,200.533,115.479z"/>
71
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M31.485,117.346c3.703,3.146,6.414,7.285,11.208,9.34
72
+ C37.045,129.198,31.933,123.141,31.485,117.346z"/>
73
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M180.92,129.487c-0.19,2.923,0.63,6.856-0.934,8.406
74
+ c-5.957-4.733-16.772,0.167-25.217-2.802C155.783,124.985,172.876,127.209,180.92,129.487z"/>
75
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M258.439,207.007c1.207,2.192-6.614,3.027-10.273,4.67
76
+ c-27.143,12.185-56.536,34.2-97.133,30.821C197.218,241.051,221.287,217.487,258.439,207.007z"/>
77
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M65.108,225.687c9.354,12.75,27.871,16.337,48.566,17.745
78
+ C93.812,244.924,68.588,243.69,65.108,225.687z"/>
79
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M161.307,232.225c-13.334,0.617-33.814,3.582-48.566,0.934
80
+ c0.823,0.147-5.321,1.021-1.868-0.934C128.293,233.028,146.332,230.921,161.307,232.225z"/>
81
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M127.684,243.432c3.443-2.16,10.882-0.325,15.877-0.934
82
+ C140.118,244.658,132.679,242.823,127.684,243.432z"/>
83
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M38.023,42.629C82.539,0.251,168.45,6.151,250.968,7.138
84
+ c7.848,0.094,16.719-1.368,23.349,0c11.871,2.451,25.224,17.023,31.755,28.02c4.845,8.154,7.067,20.015,11.208,27.085
85
+ c13.085,22.346,46.477,27.908,37.358,67.245c-4.239,18.291-23.693,25.693-33.623,43.897c-3.577,6.559-4.243,13.956-7.472,19.613
86
+ c-12.425,21.775-44.768,38.018-71.915,50.434c-20.634,9.438-43.315,23.67-62.576,28.953c-12.695,3.482-31.551,6.412-50.435,10.273
87
+ c-27.106,5.544-57.922,8.286-79.387-0.934c-11.146-4.787-23.773-16.287-26.151-27.085c-5.578-25.329,11.102-67.953,3.736-98.066
88
+ c-5.056-20.67-22.906-34.925-16.812-60.708C15.172,74.001,40.463,75.064,38.023,42.629z M346.232,130.422
89
+ c10.41-28.818-14.1-53.59-47.633-52.303c6.19-2.108,12.84-0.034,19.613,0c-16.228-19.917-20.158-60.96-54.17-64.443
90
+ c-47.05-4.819-108.237,1.462-153.17,5.604c31.311,8.204,65.113-5.872,98.067-2.802c30.411,2.834,51.748,21.332,68.18,35.491
91
+ c-19.244-10.752-39.329-30.848-69.114-33.623c-24.766-2.308-42.278,4.428-63.51,5.604c-17.014,0.942-34.695-3.396-49.5-1.868
92
+ c-17.392,1.796-47.009,16.645-51.368,29.888c-1.588,4.823,0.142,10.746-1.868,15.877c-7.14,18.231-32.366,23.279-23.349,54.17
93
+ c2.51,8.6,9.292,13.555,12.142,19.614c8.393,17.847,5.012,46.601,2.802,68.18c-1.381,13.484-5.358,29.068-2.802,42.028
94
+ c6.843,34.686,73.448,29.463,105.539,21.481c11.469-2.854,21.589-8.207,30.821-9.34c4.057-0.498,8.442,1.187,14.944,0
95
+ c9.153-1.672,21.952-11.397,32.688-16.812c31.866-16.069,75.01-30.342,92.463-57.906c4.461-7.046,6.14-18.473,9.34-24.283
96
+ c2.247-4.08,8.411-4.896,7.472-10.273c0.399,1.505-3.482,3.134-3.736,0.934C331.436,150.569,342.594,140.495,346.232,130.422z"/>
97
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M77.25,36.091c7.441-13.146,29.974-2.976,47.632-2.802
98
+ c26.067,0.258,51.737-8.142,75.651-6.538c28.813,1.933,54.964,15.638,69.114,32.689c-18.568-14.5-45.291-31.016-81.256-30.821
99
+ c-19.053,0.104-38.58,7.634-63.51,6.538C106.123,34.332,89.279,27.845,77.25,36.091z"/>
100
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M182.788,39.827c-2.311,0.118-1.588-1.144,0-0.935
101
+ c32.046-2.848,63.885,1.937,74.717,23.35C243.382,43.987,216.276,38.717,182.788,39.827z"/>
102
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M134.222,48.232c-17.639-5.811-54.154-8.276-59.774,13.076
103
+ c-2.662-13.006,18.243-20.401,38.292-19.614C120.785,42.011,131.524,42.773,134.222,48.232z"/>
104
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M315.411,148.167c19.058-3.155,22.938-26.103,19.613-48.566
105
+ c5.83,13.193,0.506,26.607-0.934,40.161C328.267,142.967,324.55,148.277,315.411,148.167z"/>
106
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M47.363,228.488c2.129,1.295,0.348,6.501,0.934,9.34
107
+ c35.593,29.644,117.108,12.831,158.774-0.934c25.871-8.547,47.983-23.19,71.915-29.888
108
+ c-38.938,26.75-124.252,53.648-195.199,48.566C67.182,254.384,43.721,247.924,47.363,228.488z"/>
109
+ </g>
110
+ </svg>
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe DiskCache do
4
+ let(:path) { 'spec/asset/Trollface.svg' }
5
+ let(:file) { File.open(path, 'r') }
6
+
7
+ context "storing and accessing" do
8
+ it ".put" do
9
+ DiskCache.put(path)
10
+ DiskCache.get(path).should_not be_nil
11
+ end
12
+
13
+ it ".get" do
14
+ DiskCache.put(path)
15
+ file_from_cache = DiskCache.get(path)
16
+ FileUtils.compare_file(file, file_from_cache).should be_true
17
+ end
18
+
19
+ it ".pget" do
20
+ DiskCache.del(path)
21
+ file_from_cache = DiskCache.pget(path)
22
+ FileUtils.compare_file(file, file_from_cache).should be_true
23
+ end
24
+ end
25
+
26
+ context "removing data" do
27
+ before(:each) { DiskCache.put(path) }
28
+
29
+ it ".delete" do
30
+ DiskCache.del(path)
31
+ DiskCache.get(path).should be_nil
32
+ end
33
+ end
34
+ end
@@ -0,0 +1 @@
1
+ require 'disk_cache'
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: disk_cache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Maximilian Haack
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: A simple way to cache your files.
47
+ email:
48
+ - mxhaack@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - .travis.yml
55
+ - Gemfile
56
+ - LICENSE.txt
57
+ - README.md
58
+ - Rakefile
59
+ - disk_cache.gemspec
60
+ - lib/disk_cache.rb
61
+ - lib/disk_cache/version.rb
62
+ - spec/asset/Trollface.svg
63
+ - spec/file_cache/file_cache_spec.rb
64
+ - spec/spec_helper.rb
65
+ homepage: ''
66
+ licenses: []
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ segments:
78
+ - 0
79
+ hash: 804760917571637690
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ segments:
87
+ - 0
88
+ hash: 804760917571637690
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.24
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Cache files that you have have to use several times.
95
+ test_files:
96
+ - spec/asset/Trollface.svg
97
+ - spec/file_cache/file_cache_spec.rb
98
+ - spec/spec_helper.rb