greencache 0.0.1 → 0.1.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: fd924fd562c22233595cde3eca25cdd69da88f22
4
- data.tar.gz: b9e4e115ba90713299eafcb38fa6a300b37a9370
3
+ metadata.gz: e4c83976dd73945a021cc5c23a22c16e6654771e
4
+ data.tar.gz: 60b7fedbe8db7abb295d2e67b29c5d80b0e3f32b
5
5
  SHA512:
6
- metadata.gz: ceb54a296bac09558022ec22c29ccb91ead6de930055d7726c778835e3cb9bc79834d2fa141f0ef92437558a058b9e0cec14f876308460b460a4c73429cf09f3
7
- data.tar.gz: 1fe8b49123c5a006b232278d3547d6387bf9def0a708d8d6ed9523504ea53b4e2aecd1a2936654a2f30d086836ab720d1f195332ef5b6328b23ed81963f747a6
6
+ metadata.gz: ce7746c74b41b9b5ad7ca8441a77313d5ca6f72877d9e5ad75b98b0dec68a94cead40d0fc094d958e119e26355f56bbd5df99467632efd890ac2de0d73fc009f
7
+ data.tar.gz: af8df99f8ee8eb5d14af40058dfc4d43db1bf50cc15ccf6613c81114029b9409a1e81ea49a9722dd1163ad2e262dba288895b52b96c85dd03275cffb7abd4f18
data/README.md CHANGED
@@ -26,7 +26,7 @@ Or install it yourself as:
26
26
 
27
27
  ```ruby
28
28
 
29
- GreenCache.configure do |c|
29
+ Greencache.configure do |c|
30
30
  c.redis = $redis
31
31
  c.secret = <some_long_hash>
32
32
  c.encrypt = true
data/greencache.gemspec CHANGED
@@ -22,9 +22,8 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "rspec", "~> 3.0"
24
24
  spec.add_development_dependency "fakeredis", "~> 0.5"
25
- spec.add_development_dependency "pliny", "~> 0.0"
26
25
 
27
26
  spec.add_dependency "fernet", "~> 2.1"
28
27
  spec.add_dependency "redis", "~> 3.1"
29
- spec.add_dependency "multi_json", "~> 1.10"
28
+ spec.add_dependency "multi_json", "~> 1.9", ">= 1.9.3"
30
29
  end
@@ -18,5 +18,18 @@ module Greencache
18
18
  @logger = nil
19
19
  @log_prefix = "greencache"
20
20
  end
21
+
22
+ def to_hash
23
+ {
24
+ cache_time: cache_time,
25
+ encrypt: encrypt,
26
+ secret: secret,
27
+ skip_cache: skip_cache,
28
+ silent: silent,
29
+ logger: logger,
30
+ log_prefix: log_prefix,
31
+ redis: redis
32
+ }
33
+ end
21
34
  end
22
35
  end
@@ -1,3 +1,3 @@
1
1
  module Greencache
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/greencache.rb CHANGED
@@ -7,6 +7,7 @@ Fernet::Configuration.run do |config|
7
7
  end
8
8
 
9
9
  module Greencache
10
+ class CacheMiss < RuntimeError; end
10
11
  class << self
11
12
  attr_writer :configuration
12
13
 
@@ -14,46 +15,65 @@ module Greencache
14
15
  yield(configuration)
15
16
  end
16
17
 
17
- def cache(redis_key, &block)
18
- return block.call if skip_cache? || !redis_up?
19
- value = read_from_cache(redis_key)
20
- return value if value
18
+ def cache(redis_key, config = {}, &block)
19
+ config = merge_config(config)
20
+ return block.call if config[:skip_cache] || !redis_up?
21
+ read_from_cache!(redis_key, config)
22
+ rescue CacheMiss
21
23
  value = block.call
22
- write_into_cache(redis_key, value)
24
+ write_into_cache(redis_key, value, config)
23
25
  value
24
26
  end
25
27
 
26
- def read_from_cache(redis_key, &block)
27
- value = get_value(redis_key)
28
- value.nil? ? log("cache.miss", redis_key) : log("cache.hit", redis_key)
29
- return value
28
+ private def read_from_cache!(redis_key, config)
29
+ value = get_value!(redis_key, config)
30
+ log("cache.hit", redis_key, config)
31
+ value
32
+ rescue CacheMiss
33
+ log("cache.miss", redis_key, config)
34
+ raise
35
+ end
36
+
37
+ def read_from_cache
38
+ read_from_cache!(redis_key)
39
+ rescue CacheMiss
30
40
  end
31
41
 
32
- def write_into_cache(redis_key, value)
42
+ def write_into_cache(redis_key, value, config)
33
43
  with_redis do
34
- log("cache.write", redis_key)
35
- set_value(redis_key, value)
44
+ log("cache.write", redis_key, config)
45
+ set_value(redis_key, value, config)
36
46
  end
37
47
  value
38
48
  end
39
49
 
40
- def get_value(key)
41
- decrypt redis.get(key)
50
+ private def get_value!(key, config)
51
+ raise CacheMiss unless redis.exists(key)
52
+ decrypt redis.get(key), config
53
+ end
54
+
55
+ def get_value(key, config)
56
+ get_value!(key, config)
57
+ rescue CacheMiss
58
+ end
59
+
60
+ def set_value(key, value, config)
61
+ redis.setex key, config[:cache_time], encrypt(value, config)
42
62
  end
43
63
 
44
- def set_value(key, value)
45
- redis.setex key, configuration.cache_time, encrypt(value)
64
+ def merge_config(config)
65
+ configuration.to_hash.merge(config)
46
66
  end
47
67
 
48
- def encrypt(value)
49
- return prep_value(value) unless encrypt?
50
- fernet.generate(secret, prep_value(value))
68
+ def encrypt(value, config)
69
+ return prep_value(value) unless config[:encrypt]
70
+ fernet.generate(config[:secret], prep_value(value))
51
71
  end
52
72
 
53
- def decrypt(value)
73
+ def decrypt(value, config)
54
74
  return nil if value.nil?
55
- return value unless encrypt?
56
- verifier = fernet.verifier(secret, value)
75
+ return value unless config[:encrypt]
76
+ verifier = fernet.verifier(config[:secret], value)
57
77
  return MultiJson.load(verifier.message) if verifier.valid?
58
78
  return nil
59
79
  end
@@ -80,14 +100,6 @@ module Greencache
80
100
  block.call if redis_up?
81
101
  end
82
102
 
83
- def cache_time
84
- configuration.cache_time
85
- end
86
-
87
- def skip_cache?
88
- configuration.skip_cache
89
- end
90
-
91
103
  def test?
92
104
  ENV["RACK_ENV"] == 'test'
93
105
  end
@@ -96,20 +108,12 @@ module Greencache
96
108
  MultiJson.encode(value)
97
109
  end
98
110
 
99
- def encrypt?
100
- configuration.encrypt
101
- end
102
-
103
- def secret
104
- configuration.secret
105
- end
106
-
107
- def log(str, key)
108
- configuration.logger.log(log_prefix(str) => 1, :key => key) unless configuration.silent
111
+ def log(str, key, config)
112
+ config[:logger].log(log_prefix(str, config) => 1, :key => key) unless config[:silent]
109
113
  end
110
114
 
111
- def log_prefix(str)
112
- [configuration.log_prefix, str].join(".")
115
+ def log_prefix(str, config)
116
+ [config[:log_prefix], str].join(".")
113
117
  end
114
118
 
115
119
  def fernet
@@ -1,9 +1,11 @@
1
1
  require 'spec_helper'
2
2
  require 'fernet'
3
+ require 'logger'
4
+ require 'multi_json'
3
5
 
4
6
  Greencache.configure do |c|
5
7
  c.redis = Redis.new
6
- c.logger = Pliny
8
+ c.logger = Logger.new(StringIO.new)
7
9
  c.silent = true
8
10
  end
9
11
 
@@ -48,7 +50,7 @@ describe Greencache do
48
50
  end
49
51
 
50
52
  it 'uses the cached' do
51
- expect(rc).to receive(:read_from_cache){ {} }
53
+ expect(rc).to receive(:read_from_cache!){ {} }
52
54
  Dummy.run
53
55
  end
54
56
 
@@ -63,49 +65,48 @@ describe Greencache do
63
65
  expect(Dummy).to receive(:get_value){ "bar" }
64
66
  Dummy.run
65
67
  end
66
-
67
68
  end
68
69
 
69
- describe 'configuration' do
70
- it 'respects cache_time' do
71
- config.cache_time = 100
72
- expect(rc.cache_time).to eq(100)
73
- end
70
+ context 'merging the configuration' do
74
71
 
75
- it 'respects skip_cache' do
72
+ it 'keeps the global config' do
76
73
  config.skip_cache = true
77
- expect(rc.skip_cache?).to eq(true)
74
+
75
+ config = rc.merge_config({})
76
+ expect(config).to be_a(Hash)
77
+ expect(config[:skip_cache]).to eql(true)
78
78
  end
79
79
 
80
- it 'knows the secret' do
81
- config.secret = "bar"
82
- expect(rc.secret).to eq("bar")
80
+ it 'overrides provided values' do
81
+ config.skip_cache = true
82
+
83
+ config = rc.merge_config({skip_cache: false})
84
+ expect(config).to be_a(Hash)
85
+ expect(config[:skip_cache]).to eql(false)
83
86
  end
84
87
  end
85
88
 
86
89
  it 'can write into the cache' do
87
90
  p = Proc.new { "" }
88
- expect(rc).to receive(:set_value).with("foo", "")
89
- rc.write_into_cache("foo", p.call)
91
+ config = rc.merge_config({})
92
+ expect(rc).to receive(:set_value).with("foo", "", config)
93
+ rc.write_into_cache("foo", p.call, config)
90
94
  end
91
95
 
92
- it 'can get a value' do
96
+ it "can get a value that's been set" do
97
+ rc.redis.set "foo", "bar"
93
98
  expect(rc.redis).to receive(:get).with("foo"){ "bar" }
94
- expect(rc).to receive(:decrypt).with("bar")
95
- rc.get_value("foo")
99
+ expect(rc).to receive(:decrypt).with("bar", {encrypt: true})
100
+ rc.get_value("foo", {encrypt: true})
96
101
  end
97
102
 
98
103
  it 'can set a value' do
99
- config.cache_time = 100
100
- config.encrypt = false
101
104
  expect(rc.redis).to receive(:setex).with("foo", 100, '"bar"')
102
- rc.set_value("foo", "bar")
105
+ rc.set_value("foo", "bar", {cache_time: 100, encrypt: false})
103
106
  end
104
107
 
105
108
  it 'encrypts' do
106
- config.encrypt = true
107
- config.secret = "foo"
108
109
  expect(rc.fernet).to receive(:generate).with("foo", '"bar"'){ "abc" }
109
- rc.encrypt("bar")
110
+ rc.encrypt("bar", {encrypt: true, secret: 'foo'})
110
111
  end
111
112
  end
data/spec/spec_helper.rb CHANGED
@@ -4,7 +4,6 @@ Bundler.require
4
4
  require 'greencache'
5
5
  require 'redis'
6
6
  require 'fakeredis'
7
- require 'pliny'
8
7
 
9
8
  RSpec.configure do |config|
10
9
  config.expect_with :rspec do |expectations|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greencache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Middleton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-27 00:00:00.000000000 Z
12
+ date: 2015-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,20 +67,6 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0.5'
70
- - !ruby/object:Gem::Dependency
71
- name: pliny
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '0.0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '0.0'
84
70
  - !ruby/object:Gem::Dependency
85
71
  name: fernet
86
72
  requirement: !ruby/object:Gem::Requirement
@@ -115,14 +101,20 @@ dependencies:
115
101
  requirements:
116
102
  - - "~>"
117
103
  - !ruby/object:Gem::Version
118
- version: '1.10'
104
+ version: '1.9'
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 1.9.3
119
108
  type: :runtime
120
109
  prerelease: false
121
110
  version_requirements: !ruby/object:Gem::Requirement
122
111
  requirements:
123
112
  - - "~>"
124
113
  - !ruby/object:Gem::Version
125
- version: '1.10'
114
+ version: '1.9'
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 1.9.3
126
118
  description: A wrapper for Redis, for caching and encryption with Fernet
127
119
  email:
128
120
  - neil@neilmiddleton.com
@@ -162,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
154
  version: '0'
163
155
  requirements: []
164
156
  rubyforge_project:
165
- rubygems_version: 2.4.5
157
+ rubygems_version: 2.4.5.1
166
158
  signing_key:
167
159
  specification_version: 4
168
160
  summary: A gem for caching values in redis and encrypting them