key_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.
- checksums.yaml +7 -0
- data/README.md +44 -0
- data/lib/key_cache/cache.rb +95 -0
- data/lib/key_cache/version.rb +5 -0
- data/lib/key_cache.rb +4 -0
- metadata +91 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '09335c3db16a6a41f1275e6bddab8821dcf9f79637eea1a1c90497e623649bee'
|
4
|
+
data.tar.gz: 12e94c9f02ae1cf555b5be2e6e58a3ad215dcbb8d76a7164ab75696403e4ce25
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2991d2c88d08080abc65d3903398ff996895cd5a537444e5a0b76088475ece6cccc55a7fec4f40385f673667a60040f8d8a327019c09c12dc6451c2603706cb8
|
7
|
+
data.tar.gz: 5b7a934925d75ac3b46e85494dca672505848c9a453732eea80a5cb8f3241a8487a8ad21b366a8871248b83c3e724c3bba0068c4c165b2c12b08b7257f45d343
|
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# KeyCache::Cache
|
2
|
+
|
3
|
+
## Description
|
4
|
+
|
5
|
+
This modules is an Rails Concern which provides a simple mechanism for
|
6
|
+
caching values in redis.
|
7
|
+
|
8
|
+
## Arguments
|
9
|
+
|
10
|
+
*key*: key value to store the location. Use "/" to define segments and ":"
|
11
|
+
to define segments that you want to be replaced by values returned from methods in your class
|
12
|
+
|
13
|
+
*value*: When saving the record, this method will be called to get the value to store in Redis.
|
14
|
+
|
15
|
+
*method*: defines a method which can be called to get the value of the stored Redis key
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
class SomeModel < ApplicationRecord
|
21
|
+
include KeyCache::Cache
|
22
|
+
|
23
|
+
cache_key key: "some_model/:id",
|
24
|
+
value: :some_attribute,
|
25
|
+
method: :some_model_cache
|
26
|
+
end
|
27
|
+
|
28
|
+
s = SomeModel.save!(some_value: "this value")
|
29
|
+
|
30
|
+
s.some_attribute
|
31
|
+
# > this value
|
32
|
+
|
33
|
+
s.some_attribute_key
|
34
|
+
# > some_model/:id
|
35
|
+
|
36
|
+
s.some_attribute_redis_key
|
37
|
+
# > some_model:1
|
38
|
+
|
39
|
+
s.save_some_attribute # Saves key to Redis
|
40
|
+
|
41
|
+
s.destroy_some_attribute # Deletes key from Redis
|
42
|
+
|
43
|
+
s.destory # Delete record and redis key
|
44
|
+
```
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KeyCache
|
4
|
+
##
|
5
|
+
# KeyCache::Cache
|
6
|
+
#
|
7
|
+
# Description
|
8
|
+
#
|
9
|
+
# This modules is an Rails Concern which provides a simple mechanism for
|
10
|
+
# caching values in redis.
|
11
|
+
#
|
12
|
+
# Arguments
|
13
|
+
#
|
14
|
+
# key: key value to store the location. Use "/" to define segments and ":"
|
15
|
+
# to define segements that you want to be replaced by values returned
|
16
|
+
# from methods in your class
|
17
|
+
#
|
18
|
+
# value: When saving the record, this method will be called to get the value
|
19
|
+
# to store in Redis.
|
20
|
+
#
|
21
|
+
# method: defines a method which can be called to get the value of the
|
22
|
+
# stored Redis key
|
23
|
+
#
|
24
|
+
# Usage
|
25
|
+
#
|
26
|
+
# class SomeModel < ApplicationRecord
|
27
|
+
# include KeyCache::Cache
|
28
|
+
#
|
29
|
+
# cache_key key: "some_model/:id",
|
30
|
+
# value: :some_attribute,
|
31
|
+
# method: :some_model_cache
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# s = SomeModel.save!(some_value: "this value")
|
35
|
+
#
|
36
|
+
# s.some_attribute
|
37
|
+
# > this value
|
38
|
+
#
|
39
|
+
# s.some_attribute_key
|
40
|
+
# > some_model/:id
|
41
|
+
#
|
42
|
+
# s.some_attribute_redis_key
|
43
|
+
# > some_model:1
|
44
|
+
#
|
45
|
+
# s.save_some_attribute # Saves key to Redis
|
46
|
+
#
|
47
|
+
# s.destroy_some_attribute # Deletes key from Redis
|
48
|
+
#
|
49
|
+
# s.destory # Delete record and redis key
|
50
|
+
module Cache
|
51
|
+
extend ActiveSupport::Concern
|
52
|
+
|
53
|
+
class_methods do
|
54
|
+
def cache_key(options = {})
|
55
|
+
key = options.fetch(:key)
|
56
|
+
value = options.fetch(:value)
|
57
|
+
method = options.fetch(:method)
|
58
|
+
|
59
|
+
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
60
|
+
def #{method}
|
61
|
+
Redis.current.get(cache_key_decode("#{key}"))
|
62
|
+
end
|
63
|
+
|
64
|
+
def #{method}_key
|
65
|
+
"#{key}"
|
66
|
+
end
|
67
|
+
|
68
|
+
def #{method}_redis_key
|
69
|
+
cache_key_decode("#{key}")
|
70
|
+
end
|
71
|
+
|
72
|
+
def save_#{method}
|
73
|
+
Redis.current.set(cache_key_decode("#{key}"), self.send("#{value.to_sym}"))
|
74
|
+
end
|
75
|
+
|
76
|
+
after_save :save_#{method}
|
77
|
+
|
78
|
+
def destroy_#{method}
|
79
|
+
Redis.current.del(cache_key_decode("#{key}"))
|
80
|
+
end
|
81
|
+
|
82
|
+
after_destroy :destroy_#{method}
|
83
|
+
METHOD
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def cache_key_decode(key)
|
88
|
+
key_parts = key.split('/')
|
89
|
+
key_parts.map! do |v|
|
90
|
+
v.match(/^:/) ? send(v.tr(':', '')) : v
|
91
|
+
end
|
92
|
+
key_parts.join(':')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/key_cache.rb
ADDED
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: key_cache
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nicholas W. Watson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-03-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.0'
|
55
|
+
description: KeyCache ties in to ActiveRecord callbacks and enables you to store info
|
56
|
+
in redis
|
57
|
+
email: nicholas.w.watson@me.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- lib/key_cache.rb
|
64
|
+
- lib/key_cache/cache.rb
|
65
|
+
- lib/key_cache/version.rb
|
66
|
+
homepage: https://github.com/nwwatson/key_cache
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.7.6
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: KeyCache ties in to ActiveRecord callbacks and enables you to store info
|
90
|
+
in redis
|
91
|
+
test_files: []
|