s3cache 0.9.0 → 0.9.1

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: 0a51920e30cb54e8c38d56b3cc78c3133a42174b
4
- data.tar.gz: c593b0eeb21e7af37f19a3d0a4e09de1d632da9c
3
+ metadata.gz: 2864f8ce4c8dcfeff913d831aa3f9b1b9e3adbb8
4
+ data.tar.gz: 448bb973a9b930f59cc79e67f9d935e49fe1e6a6
5
5
  SHA512:
6
- metadata.gz: fa94435ad8f2fce4aba9e1bcf474339fd4360c4d4214c0ee9a7bafa8bb4534d429d7ccb1c851365b47b076937f5deb6ee3361c0f9d861519f1df9e95390da1e4
7
- data.tar.gz: 9b3f3764f0476666a7278498c65faeda42129bf955c7cb288859ba6ad2926aaaf8065186bca44f96bcea593042d3631a75247d00206f6c63cf82fbf4cd118634
6
+ metadata.gz: 29dff18cf4bdf462a3b2e7763b37d675df6314b5b90b0b9fc7499942c90d0e409ce1a596c0dd83c07231791e49ecfa88f91204f0c349444565b617cf19ec280d
7
+ data.tar.gz: 7135a8ec19821db2a4544476f32e6063faf3ca62e9a5bc70edd4405865af81baf1b546539020606e828253b2301d20e9a40f1366907241cd2935b701d534af4b
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,41 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ s3cache (0.9.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ aws-sdk (2.2.24)
10
+ aws-sdk-resources (= 2.2.24)
11
+ aws-sdk-core (2.2.24)
12
+ jmespath (~> 1.0)
13
+ aws-sdk-resources (2.2.24)
14
+ aws-sdk-core (= 2.2.24)
15
+ diff-lcs (1.2.5)
16
+ jmespath (1.1.3)
17
+ rake (10.4.0)
18
+ rspec (3.1.0)
19
+ rspec-core (~> 3.1.0)
20
+ rspec-expectations (~> 3.1.0)
21
+ rspec-mocks (~> 3.1.0)
22
+ rspec-core (3.1.7)
23
+ rspec-support (~> 3.1.0)
24
+ rspec-expectations (3.1.2)
25
+ diff-lcs (>= 1.2.0, < 2.0)
26
+ rspec-support (~> 3.1.0)
27
+ rspec-mocks (3.1.3)
28
+ rspec-support (~> 3.1.0)
29
+ rspec-support (3.1.2)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ aws-sdk (~> 2)
36
+ rake (~> 10.x)
37
+ rspec (~> 3.x)
38
+ s3cache!
39
+
40
+ BUNDLED WITH
41
+ 1.10.6
data/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
1
+ Redistribution and use in source and binary forms, with or without
2
+ modification, are permitted provided that the following conditions are
3
+ met:
4
+
5
+ (1) Redistributions of source code must retain the above copyright
6
+ notice, this list of conditions and the following disclaimer.
7
+
8
+ (2) Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in
10
+ the documentation and/or other materials provided with the
11
+ distribution.
12
+
13
+ (3)The name of the author may not be used to
14
+ endorse or promote products derived from this software without
15
+ specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
21
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
26
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
+ POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ #S3Cache
2
+ A simple caching library that serializes objects to the filesystem and is compatible with the Rails.cache API
3
+
4
+ #Installation
5
+ gem install s3cache
6
+
7
+ Or add the following to your Gemfile (do this for now):
8
+
9
+ gem 's3cache', :git => 'git://github.com/eddietejeda/s3cache.git'
10
+
11
+ #Usage examples
12
+
13
+ require 's3cache'
14
+ cache = S3Cache.new({:bucket_name => "aws-bucket-name"})
15
+
16
+ cache.write("cache_name", "cache_contents")
17
+
18
+ contents = filecache.read("cache_name")
19
+
20
+ filecache.fetch("cache_name") do
21
+ "cache_contents"
22
+ end
data/lib/s3cache.rb ADDED
@@ -0,0 +1,119 @@
1
+ require 'digest'
2
+ require 'fileutils'
3
+ require 'pathname'
4
+ require 'yaml'
5
+
6
+ class S3Cache
7
+
8
+ VERSION = "0.9.1"
9
+
10
+ def initialize(**params)
11
+
12
+ if not params.to_h[:bucket_name]
13
+ puts "requires {:bucket_name => String, (optional) :expires => Integer, (optional) :debug => Boolean }"
14
+ end
15
+
16
+ @bucket_name = params.to_h[:bucket_name]
17
+ @expires = params.to_h[:expires] ? params.to_h[:expires] : 32.days
18
+ @debug = params.to_h[:debug] ? params.to_h[:debug] : false
19
+
20
+ if ENV['AWS_ACCESS_KEY_ID'].nil? || ENV['AWS_SECRET_ACCESS_KEY'].nil?
21
+ puts 'Enviroment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY must be defined. Learn more http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#config-settings-and-precedence'
22
+ else
23
+ @s3 = Aws::S3::Client.new
24
+ if not bucket_exist?
25
+ puts "creating bucket #{@bucket_name}" if @debug
26
+ bucket_create
27
+ end
28
+ end
29
+ end
30
+
31
+ def read(key, **params)
32
+ key_name = cache_key( key )
33
+ puts "read #{key_name}" if @debug
34
+ if exist?(key_name)
35
+ Marshal.load(@s3.get_object({ bucket: @bucket_name, key: key_name }).body.read)
36
+ else
37
+ return false
38
+ end
39
+ end
40
+
41
+ def write(key, contents, **params)
42
+ key_name = cache_key( key )
43
+ puts "write #{key_name}" if @debug
44
+ @s3.put_object({
45
+ bucket: @bucket_name,
46
+ key: key_name,
47
+ expires: Time.now + @expires.days,
48
+ body: Marshal.dump(contents),
49
+ })
50
+ end
51
+
52
+ def fetch(key, **params)
53
+ key_name = cache_key( key )
54
+
55
+ if(exist?(key_name) )
56
+ puts "fetch->read #{key_name}" if @debug
57
+ read (key_name)
58
+ else
59
+ puts "fetch->write #{key_name}" if @debug
60
+ value = yield
61
+ write(key_name, value)
62
+ read (key_name)
63
+ end
64
+ end
65
+
66
+ def exist?(key)
67
+ key_name = cache_key( key )
68
+ begin
69
+ response = @s3.get_object({:bucket => @bucket_name, :key => key_name})
70
+ rescue
71
+ response = nil
72
+ end
73
+ puts "exists? #{response} #{key_name}" if @debug
74
+ return !response.nil?
75
+ end
76
+
77
+ def clear
78
+ cache_keys.each do |key|
79
+ puts "deleting key #{key}" if @debug
80
+ @s3.delete_object({:bucket => @bucket_name, :key => key})
81
+ end
82
+ end
83
+
84
+ # --------- private ---------
85
+ private
86
+
87
+ def cache_keys
88
+ @s3.list_objects({:bucket => @bucket_name}).first[:contents].collect{|e|e.key}
89
+ end
90
+
91
+ def cache_valid(key)
92
+ exist?(key)
93
+ end
94
+
95
+ def cache_key(key)
96
+ if(key.is_a?(String) && key.downcase.match(/^[a-f0-9]{64}$/) )
97
+ key
98
+ else
99
+ Digest::SHA256.hexdigest(key.to_s).to_s
100
+ end
101
+ end
102
+
103
+ def bucket_create
104
+ @s3.create_bucket({
105
+ acl: "private", # accepts private, public-read, public-read-write, authenticated-read
106
+ bucket: @bucket_name, # required
107
+ })
108
+ end
109
+
110
+ def bucket_exist?
111
+ begin
112
+ response = @s3.head_bucket({ bucket: @bucket_name })
113
+ rescue
114
+ response = nil
115
+ end
116
+ return !response.nil?
117
+ end
118
+ end
119
+
data/s3cache.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ #encoding: utf-8
2
+ require File.expand_path('../lib/s3cache.rb', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 's3cache'
6
+ gem.version = S3Cache::VERSION
7
+ gem.description = %q(A simple caching library that serializes objects to the filesystem and is compatible with the Rails.cache API)
8
+ gem.summary = gem.description
9
+
10
+ gem.files = `git ls-files`.split("\n")
11
+ gem.require_paths = ['lib']
12
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
13
+ # gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+
15
+ gem.homepage = "https://github.com/eddietejeda/s3cache"
16
+
17
+ gem.license = 'BSD-3-Clause'
18
+ gem.authors = ['Eddie A Tejeda']
19
+ gem.email = ['eddie@codeforamerica.org']
20
+
21
+ gem.add_development_dependency 'rake','~> 10.x'
22
+ gem.add_development_dependency 'rspec','~> 3.x'
23
+ gem.add_development_dependency 'aws-sdk','~> 2'
24
+ end
25
+
@@ -0,0 +1,46 @@
1
+ # I can't figure out how to test s3 modules without requiring a bunch of new gems.
2
+ # Should look into fake-s3 gem
3
+ require 'aws-sdk'
4
+
5
+ # require 'spec_helper'
6
+ require_relative '../lib/s3cache'
7
+
8
+ describe S3Cache do
9
+
10
+ before do
11
+ # @s3 = Aws::S3::Client.new(stub_responses: true)
12
+ # @s3cache = S3Cache.new({:bucket_name => 'test-s3-cache'})
13
+ # @cache_name = ['spec', 'test']
14
+ # @cached_contents = 'Hello World'
15
+ end
16
+
17
+ describe "test methods" do
18
+
19
+ it "S3Cache#write should save serialized object to tmp" do
20
+ # @s3cache.write(@cache_name, @cached_contents)
21
+ # expect(@s3cache.exist?(@cache_name)).to be_truthy
22
+ end
23
+
24
+ it "S3Cache#read should be able to read serialized objects" do
25
+ # @s3cache.read(@cache_name).eql?( @cached_contents)
26
+ end
27
+
28
+ it "S3Cache#fetch should be able to read serialized objects" do
29
+ # cache_name_fetch = "#{@cache_name}-fetch"
30
+ # cache_contents_fetch = "Hello World Fetch"
31
+ #
32
+ # response = @s3cache.fetch( cache_name_fetch) do
33
+ # cache_contents_fetch
34
+ # end
35
+ #
36
+ # cache_name_fetch.eql?( response)
37
+ # @s3cache.read(cache_name_fetch).eql?( response)
38
+ end
39
+
40
+ it "S3Cache#clear should clear cache" do
41
+ # @s3cache.clear
42
+ # expect(@s3cache.exist?(@cache_name)).to be_falsey
43
+ end
44
+
45
+ end
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eddie A Tejeda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-14 00:00:00.000000000 Z
11
+ date: 2016-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -59,7 +59,15 @@ email:
59
59
  executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
- files: []
62
+ files:
63
+ - ".gitignore"
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - LICENSE.txt
67
+ - README.md
68
+ - lib/s3cache.rb
69
+ - s3cache.gemspec
70
+ - spec/s3cache_spec.rb
63
71
  homepage: https://github.com/eddietejeda/s3cache
64
72
  licenses:
65
73
  - BSD-3-Clause
@@ -86,3 +94,4 @@ specification_version: 4
86
94
  summary: A simple caching library that serializes objects to the filesystem and is
87
95
  compatible with the Rails.cache API
88
96
  test_files: []
97
+ has_rdoc: