h2ocube_rails_cache 0.2.1 → 0.3.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
  SHA256:
3
- metadata.gz: '0289601a9b244df72fd7fe25a6efc79248550fced3d6b866bde35f1e70518c7b'
4
- data.tar.gz: 3229f9da97c42c9a81038c9424a2fa38211238ae187f2bb32b952108e13f0ec9
3
+ metadata.gz: a2cfe66da39df5c16bf3aef04e9e33b11ad5e1518588916515965f67973ccd4f
4
+ data.tar.gz: 24d05e2c7afcbc6ca316bbb51028b172f9874de56c1cdccf068c3adce310e489
5
5
  SHA512:
6
- metadata.gz: de46981ebbc21dbebbd0bd1340c84fe03034eb0235ac6ae47b82fec80bc73d83de0b1c506934e0e9d7bad77043ab16e6d2a9391712a56ee2affca96951415749
7
- data.tar.gz: 606709734ddb3890ba891133ae21c739d23e4358a3b43118fe4863efb2c9b4e79e1381baeb2504905cc54e63cfdb79bacc9446f18c7df9387a2b01df71a79328
6
+ metadata.gz: 462463ed9d937cffa39fb84b04de25c7674ae5d3b7acab81bb7fc7c8f5e0471f3b652d51b24bbfd3c927628a6af4d4346651fe389bdc5e0e10ae975e45a5896a
7
+ data.tar.gz: aaf774d66b1203f2db36422c56b626b14c9f770645f0171f31cbf10d36fe8e77205dfd2d41b8a5bdc7d6043997cac5e7019c8dcfc733030fb80b3a112610d902
data/README.md CHANGED
@@ -32,11 +32,12 @@ And then execute:
32
32
 
33
33
  ## Write Options
34
34
 
35
+ * `expires_in` such as 5.minutes, when value is nil, will not be expired
35
36
  * `updated_at` will write timestamp with key_updated_at
36
37
 
37
38
  ## Fetch Options
38
39
 
39
- * `expires_in` such as 5.minutes
40
+ * `expires_in` such as 5.minutes, when value is nil, will not be expired
40
41
  * `force` true / false or Proc that return true / false
41
42
  * `updated_at` will write timestamp with key_updated_at
42
43
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'h2ocube_rails_cache'
7
- gem.version = '0.2.1'
7
+ gem.version = '0.3.0'
8
8
  gem.authors = ['Ben']
9
9
  gem.email = ['ben@h2ocube.com']
10
10
  gem.description = 'Just an redis cache.'
@@ -8,19 +8,18 @@ module ActiveSupport
8
8
  def initialize(options = {})
9
9
  options ||= {}
10
10
  @config = options
11
+ @namespace = options[:namespace]
11
12
  @data = Redis.new(options)
12
13
  super(options)
13
14
  end
14
15
 
15
16
  def keys(key = '*')
16
- options.reverse_merge! config
17
- key = normalize_key key, config
17
+ key = normalize_key key
18
18
  @data.keys key
19
19
  end
20
20
 
21
21
  def fetch(key, options = {}, &block)
22
- options.reverse_merge! config
23
- key = normalize_key(key, options)
22
+ key = normalize_key key
24
23
 
25
24
  if @data.exists(key)
26
25
  if options.key?(:force)
@@ -43,8 +42,7 @@ module ActiveSupport
43
42
  end
44
43
 
45
44
  def fetch_raw(key, options = {}, &block)
46
- options.reverse_merge! config
47
- key = normalize_key key, options
45
+ key = normalize_key key
48
46
  instrument :fetch, key, options do
49
47
  exist?(key) ? read(key) : write(key, block, options)
50
48
  end
@@ -52,7 +50,7 @@ module ActiveSupport
52
50
 
53
51
  def read(key, options = {})
54
52
  options.reverse_merge! config
55
- key = normalize_key key, options
53
+ key = normalize_key key
56
54
  return nil if key.start_with?('http')
57
55
  instrument :read, key, options do
58
56
  exist?(key) ? load_entry(@data.get(key)) : nil
@@ -61,7 +59,7 @@ module ActiveSupport
61
59
 
62
60
  def read_raw(key, options = {})
63
61
  options.reverse_merge! config
64
- key = normalize_key key, options
62
+ key = normalize_key key
65
63
  @data.get key
66
64
  end
67
65
 
@@ -77,9 +75,9 @@ module ActiveSupport
77
75
  results
78
76
  end
79
77
 
80
- def write(key, entry, options = {})
81
- options.reverse_merge! config
82
- key = normalize_key(key, options)
78
+ def write(key, entry, opts = {})
79
+ options = opts.reverse_merge config
80
+ key = normalize_key key
83
81
 
84
82
  return false if key.start_with?('http')
85
83
 
@@ -89,9 +87,13 @@ module ActiveSupport
89
87
  Rails.logger.warn "CacheWarn: '#{key}' is not cacheable!"
90
88
  nil
91
89
  else
92
- expires_in = options[:expires_in].to_i
93
- @data.setex key, expires_in, entry
94
- @data.setex "#{key}_updated_at", expires_in, Time.now.to_i if options[:updated_at]
90
+ if opts.key?(:expires_in) && opts[:expires_in].nil?
91
+ @data.set key, entry
92
+ else
93
+ expires_in = options[:expires_in].to_i
94
+ @data.setex key, expires_in, entry
95
+ @data.setex "#{key}_updated_at", expires_in, Time.now.to_i if options[:updated_at]
96
+ end
95
97
  load_entry entry
96
98
  end
97
99
  end
@@ -99,7 +101,7 @@ module ActiveSupport
99
101
 
100
102
  def delete(key, options = {})
101
103
  options.reverse_merge! config
102
- key = normalize_key key, options
104
+ key = normalize_key key
103
105
 
104
106
  instrument :delete, key, options do
105
107
  @data.keys(key).each { |k| @data.del k }
@@ -107,9 +109,8 @@ module ActiveSupport
107
109
  end
108
110
  end
109
111
 
110
- def exist?(key, options = {})
111
- options.reverse_merge! config
112
- key = normalize_key key, options
112
+ def exist?(key)
113
+ key = normalize_key key
113
114
  @data.exists key
114
115
  end
115
116
 
@@ -126,7 +127,7 @@ module ActiveSupport
126
127
 
127
128
  def expire(key, expires_in)
128
129
  options.reverse_merge! config
129
- key = normalize_key key, options
130
+ key = normalize_key key
130
131
 
131
132
  instrument :expire, key, expires_in: expires_in.to_i do
132
133
  @data.expire key, expires_in.to_i
@@ -135,7 +136,7 @@ module ActiveSupport
135
136
 
136
137
  def increment(key, amount = 1, options = {})
137
138
  options.reverse_merge! config
138
- key = normalize_key key, options
139
+ key = normalize_key key
139
140
 
140
141
  instrument :increment, key, amount: amount do
141
142
  if amount == 1
@@ -148,7 +149,7 @@ module ActiveSupport
148
149
 
149
150
  def decrement(key, amount = 1, options = {})
150
151
  options.reverse_merge! config
151
- key = normalize_key key, options
152
+ key = normalize_key key
152
153
 
153
154
  instrument :decrement, key, amount: amount do
154
155
  if amount == 1
@@ -165,24 +166,24 @@ module ActiveSupport
165
166
 
166
167
  private
167
168
 
168
- def normalize_key(key, options)
169
+ def normalize_key(key)
169
170
  key = expanded_key(key)
170
- namespace = options[:namespace] if options
171
- prefix = namespace.is_a?(Proc) ? namespace.call : namespace
172
- key = "#{prefix}:#{key}" if prefix && !key.start_with?(prefix)
171
+ key = "#{namespace}:#{key}" if !key.start_with?(namespace)
173
172
  key
174
173
  end
175
174
 
176
- # def instrument(operation, key, options = {})
177
- # payload = { key: key }
178
- # payload.merge!(options) if options.is_a?(Hash)
179
- # ActiveSupport::Notifications.instrument("cache_#{operation}.active_support", payload) { yield(payload) }
180
- # end
181
- #
182
- # def log(operation, key, options = {})
183
- # return unless logger && logger.debug? && !silence?
184
- # logger.debug(" \e[95mCACHE #{operation}\e[0m #{key}#{options.blank? ? "" : " (#{options.inspect})"}")
185
- # end
175
+ def instrument(operation, key, options = nil)
176
+ log { "Cache #{operation}: #{key}#{" (#{options.inspect})" unless options.blank?}" }
177
+
178
+ payload = { key: key }
179
+ payload.merge!(options) if options.is_a?(Hash)
180
+ ActiveSupport::Notifications.instrument("cache_#{operation}.active_support", payload) { yield(payload) }
181
+ end
182
+
183
+ def log
184
+ return unless logger && logger.debug? && !silence?
185
+ logger.debug(yield)
186
+ end
186
187
 
187
188
  def dump_entry(entry)
188
189
  entry = entry.call if entry.class.to_s == 'Proc'
data/test/cache_test.rb CHANGED
@@ -40,6 +40,14 @@ describe 'h2ocube_rails_cache' do
40
40
  Rails.cache.exist?('expire').must_be_same_as false
41
41
  end
42
42
 
43
+ it '#write expire_in nil' do
44
+ Rails.cache.delete 'expire'
45
+ Rails.cache.write 'expire', true, expires_in: nil
46
+ Rails.cache.exist?('expire').must_be_same_as true
47
+ sleep 2
48
+ Rails.cache.exist?('expire').must_be_same_as true
49
+ end
50
+
43
51
  it '#expire' do
44
52
  Rails.cache.write 'expire', true
45
53
  Rails.cache.expire 'expire', 1.second
@@ -119,7 +127,7 @@ describe 'h2ocube_rails_cache' do
119
127
  'true'
120
128
  end.must_equal 'true'
121
129
 
122
- Rails.cache.fetch 'fetch force', force: -> (key, options) { true } do
130
+ Rails.cache.fetch 'fetch force', force: -> (_key, _options) { true } do
123
131
  'true again'
124
132
  end.must_equal 'true again'
125
133
 
@@ -127,7 +135,7 @@ describe 'h2ocube_rails_cache' do
127
135
  'false'
128
136
  end.must_equal 'true again'
129
137
 
130
- Rails.cache.fetch 'fetch force', force: -> (key, options) { false } do
138
+ Rails.cache.fetch 'fetch force', force: -> (_key, _options) { false } do
131
139
  'false again'
132
140
  end.must_equal 'true again'
133
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: h2ocube_rails_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-11 00:00:00.000000000 Z
11
+ date: 2018-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis