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 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KeyCache
4
+ VERSION = '0.0.2'.freeze
5
+ end
data/lib/key_cache.rb ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'key_cache/version'
4
+ require 'key_cache/cache'
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: []