lucid_shopify-cache 0.3.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 +7 -0
- data/README.md +51 -0
- data/lib/lucid_shopify/cache/version.rb +7 -0
- data/lib/lucid_shopify/cache.rb +93 -0
- data/lib/lucid_shopify/cached_get.rb +48 -0
- data/lib/lucid_shopify-cache.rb +6 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d4bd3b8c8f5fdfbb220f971f45871968a8757ef35c465ea1966dfc28f458d2aa
|
4
|
+
data.tar.gz: 4c41f6c64d5c66da2f6aa5a4056748dcff2823dcba1189ba9d9f8fe22ce14622
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7f40200770a8bb8083ebf69a8c78d2619ca30db89934aaee3f70d17459a8126b8c4c1f8cff8a41adb578c87ba53f0c61917cc0867bc2539f02e1f25228e0ac5d
|
7
|
+
data.tar.gz: 44e66e48b13e4a3670d1e432fd278a9683235f42fa61e65b6e173bc759feb02d2cb4eda7d1603ad841ceb12ebc84541e93205b299b4affea30707665d1c9f5ae
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
lucid_shopify-cache
|
2
|
+
===================
|
3
|
+
|
4
|
+
Installation
|
5
|
+
------------
|
6
|
+
|
7
|
+
Add the following lines to your ‘Gemfile’:
|
8
|
+
|
9
|
+
git_source :lucid { |r| "https://github.com/lucidnz/gem-lucid_#{r}.git" }
|
10
|
+
|
11
|
+
gem 'lucid_shopify-cache', lucid: 'shopify-cache'
|
12
|
+
|
13
|
+
|
14
|
+
Usage
|
15
|
+
-----
|
16
|
+
|
17
|
+
### Make a cached GET request
|
18
|
+
|
19
|
+
require 'lucid_shopify/cached_get'
|
20
|
+
|
21
|
+
cached_get = LucidShopify::CachedGet.new
|
22
|
+
|
23
|
+
args = [request_credentials, 'orders', fields: %w(id tags)]
|
24
|
+
|
25
|
+
cached_get.(*args)
|
26
|
+
cached_get.(*args) # fetched from the cache
|
27
|
+
|
28
|
+
To clear the cache:
|
29
|
+
|
30
|
+
cached_get.clear(*args)
|
31
|
+
|
32
|
+
|
33
|
+
### Example: shop attributes
|
34
|
+
|
35
|
+
args = [request_credentials, 'shop', {}]
|
36
|
+
|
37
|
+
cached_get.(*args)['shop']
|
38
|
+
|
39
|
+
For the next hour, the data will be cached.
|
40
|
+
|
41
|
+
You might want to set the TTL to a high value and clear it only
|
42
|
+
when shop data actually changes. In this case, set up a ‘shop/update’
|
43
|
+
webhook which calls:
|
44
|
+
|
45
|
+
cached_get.clear(*args).(*args)['shop']
|
46
|
+
|
47
|
+
|
48
|
+
### TTL
|
49
|
+
|
50
|
+
The default cache TTL is 3600 seconds (one hour), but this can be
|
51
|
+
changed by setting the environment variable ‘LUCID_SHOPIFY_CACHE_TTL’.
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module LucidShopify
|
6
|
+
class Cache
|
7
|
+
TTL = ENV['LUCID_SHOPIFY_CACHE_TTL'] || 3600
|
8
|
+
|
9
|
+
extend Dry::Initializer
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
param :namespace, default: proc { 'lucid_shopify-cache' }
|
13
|
+
# @return [Redis]
|
14
|
+
option :redis_client, default: proc { defined?(Redis) && Redis.current }
|
15
|
+
|
16
|
+
#
|
17
|
+
# Create a new instance with a new namespace appended to the current one.
|
18
|
+
#
|
19
|
+
# @param new_namespace [String]
|
20
|
+
#
|
21
|
+
# @return [Cache]
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# cache.add_namespace(myshopify_domain)
|
25
|
+
#
|
26
|
+
# @example Using the {+} operator alias
|
27
|
+
# cache + myshopify_domain
|
28
|
+
#
|
29
|
+
def add_namespace(new_namespace)
|
30
|
+
self.class.new("#{namespace}:#{new_namespace}", redis_client)
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :+, :add_namespace
|
34
|
+
|
35
|
+
#
|
36
|
+
# Fetch value from the cache, falling back to the given block when the cache
|
37
|
+
# is empty.
|
38
|
+
#
|
39
|
+
# @param key [String]
|
40
|
+
# @param ttl [Integer]
|
41
|
+
#
|
42
|
+
# @yieldreturn [#to_json]
|
43
|
+
#
|
44
|
+
# @return [Object]
|
45
|
+
#
|
46
|
+
def call(key, ttl: TTL)
|
47
|
+
key = namespaced_key(key)
|
48
|
+
|
49
|
+
fetch(key) || cache(key, yield, ttl)
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# @param key [String]
|
54
|
+
#
|
55
|
+
# @return [Object, nil]
|
56
|
+
#
|
57
|
+
private def fetch(key)
|
58
|
+
val = redis_client.get(key)
|
59
|
+
|
60
|
+
val && JSON.parse(val)
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# @param key [String]
|
65
|
+
# @param val [#to_json]
|
66
|
+
# @param ttl [Integer]
|
67
|
+
#
|
68
|
+
# @return [Object]
|
69
|
+
#
|
70
|
+
private def cache(key, val, ttl)
|
71
|
+
redis_client.set(key, val.to_json)
|
72
|
+
redis_client.expire(key, ttl)
|
73
|
+
|
74
|
+
val
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# @param key [String]
|
79
|
+
#
|
80
|
+
# @return [String]
|
81
|
+
#
|
82
|
+
private def namespaced_key(key)
|
83
|
+
"#{namespace}:#{key}"
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# @param key [String]
|
88
|
+
#
|
89
|
+
def clear(key)
|
90
|
+
redis_client.del(namespaced_key(key))
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
require 'lucid_shopify/cache'
|
7
|
+
|
8
|
+
module LucidShopify
|
9
|
+
class CachedGet
|
10
|
+
extend Dry::Initializer
|
11
|
+
|
12
|
+
# @return [Cache]
|
13
|
+
option :cache, default: proc { Cache.new }
|
14
|
+
# @return [LucidShopify::Client]
|
15
|
+
option :client, default: proc { Client.new }
|
16
|
+
|
17
|
+
#
|
18
|
+
# @see {LucidShopify::Client#get}
|
19
|
+
#
|
20
|
+
# @param ttl [Integer]
|
21
|
+
#
|
22
|
+
def call(*get_args, ttl: Cache::TTL)
|
23
|
+
cache.(key(*get_args), ttl: ttl) { client.get(*get_args) }.freeze
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# @see {LucidShopify::Client#get}
|
28
|
+
#
|
29
|
+
# @return [self]
|
30
|
+
#
|
31
|
+
def clear(*get_args)
|
32
|
+
cache.clear(key(*get_args))
|
33
|
+
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# @see {LucidShopify::Client#get}
|
39
|
+
#
|
40
|
+
private def key(credentials, path, params = {})
|
41
|
+
[
|
42
|
+
credentials.myshopify_domain,
|
43
|
+
path,
|
44
|
+
params,
|
45
|
+
].join(':')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lucid_shopify-cache
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kelsey Judson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.52.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.52.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-initializer
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.4'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.4'
|
55
|
+
description:
|
56
|
+
email: kelsey@lucid.nz
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- README.md
|
62
|
+
- lib/lucid_shopify-cache.rb
|
63
|
+
- lib/lucid_shopify/cache.rb
|
64
|
+
- lib/lucid_shopify/cache/version.rb
|
65
|
+
- lib/lucid_shopify/cached_get.rb
|
66
|
+
homepage: https://github.com/lucidnz/gem-lucid_shopify-cache
|
67
|
+
licenses:
|
68
|
+
- ISC
|
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.3
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Cache Shopify API data
|
90
|
+
test_files: []
|