artirix_data_models 0.20.0 → 0.21.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 +4 -4
- data/README.md +25 -0
- data/artirix_data_models.gemspec +1 -0
- data/lib/artirix_data_models/cache_service.rb +70 -145
- data/lib/artirix_data_models/cached_action_adaptor/get.rb +2 -2
- data/lib/artirix_data_models/cached_action_adaptor/get_full.rb +4 -4
- data/lib/artirix_data_models/cached_action_adaptor/get_some.rb +2 -2
- data/lib/artirix_data_models/cached_action_adaptor.rb +3 -4
- data/lib/artirix_data_models/version.rb +1 -1
- data/lib/artirix_data_models.rb +2 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e774ad4922bb0f7943c4cc423b2ae1873f6b46e6
|
4
|
+
data.tar.gz: 57534ba90ffbd420208668a691e6d9da0dfb7909
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0dd43e33cf943a652303f559063f71d4ce98a2239da72d633b87c2fc64f10088d61417bc72687dfc9226ce335fadcfa72a4933afe92ccf1fab7a81b41a018bf
|
7
|
+
data.tar.gz: 3463066ddcb4ac5e7adf630546c84512ec66b0c33849a23cc4c70f012ec6b3c5b1d8327ae7026a053cbca93f78272ae7c256dc36223148a0e21deaf7eef4a45e
|
data/README.md
CHANGED
@@ -315,6 +315,31 @@ end
|
|
315
315
|
|
316
316
|
## Changes
|
317
317
|
|
318
|
+
### 0.21.0
|
319
|
+
|
320
|
+
Changed cache to use `ArtirixCacheService` (gem `artirix_cache_service`).
|
321
|
+
|
322
|
+
Deprecated the use of method_missing on cache in favour of the `.key` method:
|
323
|
+
|
324
|
+
```ruby
|
325
|
+
# this is deprecated
|
326
|
+
ArtirixDataModels::CacheService.dao_get_some_key dao_name, model_pks
|
327
|
+
|
328
|
+
# in favour of this
|
329
|
+
ArtirixDataModels::CacheService.key :dao_get_some, dao_name, model_pks
|
330
|
+
```
|
331
|
+
|
332
|
+
Deprecated the key `return_if_none` on `first_options` in favour of `return_if_missing`:
|
333
|
+
|
334
|
+
```ruby
|
335
|
+
# this is deprecated
|
336
|
+
ArtirixDataModels::CacheService.first_options 'some', 'other', return_if_none: :default
|
337
|
+
|
338
|
+
# in favour of this
|
339
|
+
ArtirixDataModels::CacheService.first_options 'some', 'other', return_if_missing: :default
|
340
|
+
```
|
341
|
+
|
342
|
+
|
318
343
|
### 0.20.0
|
319
344
|
Added `ensure_relative` boolean option to the creation of a `DataGateway` (disable by default). With it enabled, it will ensure that any given `path` is relative by removing the leading `/`. This is necessary if the Gateway should call a nested endpoint and not just a host.
|
320
345
|
|
data/artirix_data_models.gemspec
CHANGED
@@ -1,179 +1,104 @@
|
|
1
1
|
module ArtirixDataModels::CacheService
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.first_options(*options, return_if_none: :default)
|
8
|
-
key = options.detect { |x| OptionsStore.has? x }
|
9
|
-
return OptionsStore.get(key) if key.present?
|
10
|
-
|
11
|
-
case return_if_none
|
12
|
-
when NilClass
|
13
|
-
nil
|
14
|
-
when :default
|
15
|
-
OptionsStore.default.dup
|
16
|
-
else
|
17
|
-
{}
|
18
|
-
end
|
2
|
+
def self.reload_service
|
3
|
+
@service = nil
|
4
|
+
service
|
19
5
|
end
|
20
6
|
|
21
|
-
def self.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
if KeyCleaner.valid_method method
|
29
|
-
KeyCleaner.final_key(m, *args)
|
30
|
-
|
31
|
-
elsif OptionsStore.valid_method method
|
32
|
-
OptionsStore.send m, *args, &block
|
7
|
+
def self.service
|
8
|
+
@service ||= ArtirixCacheService::Service.new.tap do |service|
|
9
|
+
prefix = ArtirixDataModels.configuration.try(:cache_app_prefix)
|
10
|
+
if prefix
|
11
|
+
service.register_key_prefix "#{prefix}__"
|
12
|
+
end
|
33
13
|
|
34
|
-
|
35
|
-
|
14
|
+
options = ArtirixDataModels.configuration.try(:cache_options)
|
15
|
+
if options
|
16
|
+
options.each do |name, opts|
|
17
|
+
if name.to_s == 'default_options'
|
18
|
+
service.register_default_options opts
|
19
|
+
else
|
20
|
+
service.register_options name, opts
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
36
24
|
|
37
|
-
else
|
38
|
-
super
|
39
25
|
end
|
40
26
|
end
|
41
27
|
|
42
|
-
def self.
|
43
|
-
|
44
|
-
|
45
|
-
if KeyCleaner.valid_method method
|
46
|
-
true
|
47
|
-
|
48
|
-
elsif OptionsStore.valid_method method
|
49
|
-
OptionsStore.respond_to? m, include_all
|
50
|
-
|
51
|
-
elsif Expirer.valid_method method
|
52
|
-
Expirer.respond_to? m, include_all
|
53
|
-
|
54
|
-
else
|
55
|
-
super
|
56
|
-
end
|
28
|
+
def self.digest_element(element)
|
29
|
+
service.digest element
|
57
30
|
end
|
58
31
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
method_name.end_with? '_key'
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.final_key(m, *args)
|
67
|
-
cleaned = clean_key_section(m, *args)
|
68
|
-
CacheStoreHelper.final_key cleaned
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
def self.clean_key_section(key, *args)
|
73
|
-
key_name = clean_key_name key
|
74
|
-
a = clean_key_args args
|
75
|
-
suffix = a.present? ? "/#{a}" : ''
|
76
|
-
"#{key_name}#{suffix}"
|
32
|
+
def self.first_options(*options, return_if_missing: :default, **opts)
|
33
|
+
if opts.key? :return_if_none
|
34
|
+
ActiveSupport::Deprecation.warn('use `return_if_missing` instead of `return_if_none`')
|
35
|
+
return_if_missing = opts[:return_if_none]
|
77
36
|
end
|
78
37
|
|
79
|
-
|
80
|
-
key.to_s.gsub(/_key$/, '').to_sym
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.clean_key_args(args)
|
84
|
-
args.map { |x| x.try(:cache_key) || x.to_s }.join '/'
|
85
|
-
end
|
38
|
+
service.options *options, return_if_missing: return_if_missing
|
86
39
|
end
|
87
40
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
def self.method_missing(m, *args, &block)
|
94
|
-
if has?(m)
|
95
|
-
get(m)
|
96
|
-
else
|
97
|
-
super
|
98
|
-
end
|
99
|
-
end
|
41
|
+
def self.key(*given_args)
|
42
|
+
service.key *given_args
|
43
|
+
end
|
100
44
|
|
101
|
-
|
102
|
-
|
103
|
-
|
45
|
+
def self.options(options_name)
|
46
|
+
service.registered_options options_name
|
47
|
+
end
|
104
48
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
49
|
+
def self.options?(options_name)
|
50
|
+
service.registered_options? options_name
|
51
|
+
end
|
109
52
|
|
110
|
-
|
111
|
-
|
112
|
-
|
53
|
+
# we use `delete_matched` method -> it will work fine with Redis but it seems that it won't with Memcached
|
54
|
+
def self.expire_cache(pattern = nil, add_wildcard: true, add_prefix: true)
|
55
|
+
return false unless ArtirixDataModels.cache.present?
|
113
56
|
|
114
|
-
|
115
|
-
Hash(option_store.send(name))
|
116
|
-
end
|
57
|
+
p = final_pattern(pattern, add_wildcard: add_wildcard, add_prefix: add_prefix)
|
117
58
|
|
118
|
-
|
119
|
-
|
120
|
-
end
|
59
|
+
ArtirixDataModels.cache.delete_matched p
|
60
|
+
end
|
121
61
|
|
122
|
-
|
123
|
-
|
124
|
-
|
62
|
+
def self.final_pattern(pattern, add_wildcard: true, add_prefix: true)
|
63
|
+
p = pattern
|
64
|
+
p = p.present? ? "#{p}*" : '' if add_wildcard
|
65
|
+
p = "*#{service.key_prefix}*#{p}" if add_prefix
|
66
|
+
p
|
67
|
+
end
|
125
68
|
|
126
|
-
def self.disabled_options_store
|
127
|
-
DisabledOptionsStore.new
|
128
|
-
end
|
129
69
|
|
130
|
-
|
131
|
-
|
132
|
-
{}
|
133
|
-
end
|
70
|
+
def self.method_missing(m, *args, &block)
|
71
|
+
method = m.to_s
|
134
72
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
end
|
73
|
+
if method.end_with? '_key'
|
74
|
+
ActiveSupport::Deprecation.warn('using method_missing with `service.some_key("1", "2")` is deprecated, use this instead: `service.key(:some, "1", "2")`')
|
75
|
+
key = method.gsub(/_key$/, '')
|
76
|
+
self.key key, *args
|
140
77
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
78
|
+
elsif method.end_with? '_options'
|
79
|
+
ActiveSupport::Deprecation.warn('using method_missing with `service.some_options` is deprecated, use this instead: `service.options(:some)`')
|
80
|
+
options_name = method.gsub(/_options$/, '')
|
81
|
+
self.options options_name
|
145
82
|
|
146
|
-
|
147
|
-
|
148
|
-
add_wildcard: add_wildcard,
|
149
|
-
add_prefix: add_prefix
|
83
|
+
else
|
84
|
+
super
|
150
85
|
end
|
151
86
|
end
|
152
87
|
|
153
|
-
|
154
|
-
|
155
|
-
def self.final_key(key_value)
|
156
|
-
"#{prefix}__#{key_value}"
|
157
|
-
end
|
158
|
-
|
159
|
-
def self.final_pattern(pattern, add_wildcard: true, add_prefix: true)
|
160
|
-
p = pattern
|
161
|
-
p = p.present? ? "#{p}*" : '' if add_wildcard
|
162
|
-
p = "*#{prefix}*#{p}" if add_prefix
|
163
|
-
p
|
164
|
-
end
|
88
|
+
def self.respond_to_missing?(m, include_all = false)
|
89
|
+
method = m.to_s
|
165
90
|
|
166
|
-
|
167
|
-
|
91
|
+
if method.end_with? '_key'
|
92
|
+
ActiveSupport::Deprecation.warn('using method_missing with `service.some_key("1", "2")` is deprecated, use this instead: `service.key(:some, "1", "2")`')
|
93
|
+
true
|
168
94
|
|
169
|
-
|
95
|
+
elsif method.end_with? '_options'
|
96
|
+
ActiveSupport::Deprecation.warn('using method_missing with `service.some_options` is deprecated, use this instead: `service.options(:some)`')
|
97
|
+
options_name = method.gsub(/_options$/, '')
|
98
|
+
self.options options_name
|
170
99
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
def self.prefix
|
175
|
-
ArtirixDataModels.configuration.try(:cache_app_prefix)
|
100
|
+
else
|
101
|
+
super
|
176
102
|
end
|
177
103
|
end
|
178
|
-
|
179
104
|
end
|
@@ -10,13 +10,13 @@ class ArtirixDataModels::CachedActionAdaptor::Get < ArtirixDataModels::CachedAct
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def load_cache_key
|
13
|
-
ArtirixDataModels::CacheService.
|
13
|
+
ArtirixDataModels::CacheService.key :dao_get, dao_name, model_pk
|
14
14
|
end
|
15
15
|
|
16
16
|
def load_cache_options
|
17
17
|
ArtirixDataModels::CacheService.first_options "dao_#{dao_name}_get_options",
|
18
18
|
"dao_#{dao_name}_options",
|
19
19
|
'dao_get_options',
|
20
|
-
|
20
|
+
return_if_missing: :default
|
21
21
|
end
|
22
22
|
end
|
@@ -52,20 +52,20 @@ class ArtirixDataModels::CachedActionAdaptor::GetFull < ArtirixDataModels::Cache
|
|
52
52
|
|
53
53
|
module WithTimestamp
|
54
54
|
def self.cache_key_from_model(model)
|
55
|
-
ArtirixDataModels::CacheService.
|
55
|
+
ArtirixDataModels::CacheService.key :dao_get_full, model
|
56
56
|
end
|
57
57
|
|
58
58
|
def self.cache_options(dao_name)
|
59
59
|
ArtirixDataModels::CacheService.first_options "dao_#{dao_name}_get_full_options",
|
60
60
|
"dao_#{dao_name}_options",
|
61
61
|
'dao_get_full_options',
|
62
|
-
|
62
|
+
return_if_missing: :default
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
module WithoutTimestamp
|
67
67
|
def self.cache_key_from_model(model)
|
68
|
-
ArtirixDataModels::CacheService.
|
68
|
+
ArtirixDataModels::CacheService.key :dao_get_full_no_time, model
|
69
69
|
end
|
70
70
|
|
71
71
|
def self.cache_options(dao_name)
|
@@ -74,7 +74,7 @@ class ArtirixDataModels::CachedActionAdaptor::GetFull < ArtirixDataModels::Cache
|
|
74
74
|
'dao_get_full_no_time_options',
|
75
75
|
"dao_#{dao_name}_options",
|
76
76
|
'dao_get_full_options',
|
77
|
-
|
77
|
+
return_if_missing: :default
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
@@ -10,13 +10,13 @@ class ArtirixDataModels::CachedActionAdaptor::GetSome < ArtirixDataModels::Cache
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def load_cache_key
|
13
|
-
ArtirixDataModels::CacheService.
|
13
|
+
ArtirixDataModels::CacheService.key :dao_get_some, dao_name, model_pks
|
14
14
|
end
|
15
15
|
|
16
16
|
def load_cache_options
|
17
17
|
ArtirixDataModels::CacheService.first_options "dao_#{dao_name}_get_some_options",
|
18
18
|
"dao_#{dao_name}_options",
|
19
19
|
'dao_get_some_options',
|
20
|
-
|
20
|
+
return_if_missing: :default
|
21
21
|
end
|
22
22
|
end
|
@@ -94,22 +94,21 @@ class ArtirixDataModels::CachedActionAdaptor
|
|
94
94
|
|
95
95
|
def cache_exist?
|
96
96
|
logger.debug "EXIST CACHE with key #{cache_key.inspect}"
|
97
|
-
return false unless cache
|
97
|
+
return false unless cache
|
98
98
|
|
99
99
|
cache.exist? cache_key, cache_options
|
100
100
|
end
|
101
101
|
|
102
|
-
|
103
102
|
def cache_read
|
104
103
|
logger.debug "READ CACHE with key #{cache_key.inspect}"
|
105
|
-
return nil unless cache
|
104
|
+
return nil unless cache
|
106
105
|
|
107
106
|
cache.read cache_key, cache_options
|
108
107
|
end
|
109
108
|
|
110
109
|
def cache_write(value)
|
111
110
|
logger.debug "WRITE CACHE with key #{cache_key.inspect}"
|
112
|
-
return value unless cache
|
111
|
+
return value unless cache
|
113
112
|
|
114
113
|
cache.write cache_key, value, cache_options
|
115
114
|
value
|
data/lib/artirix_data_models.rb
CHANGED
@@ -9,6 +9,8 @@ require 'keyword_init'
|
|
9
9
|
require 'naught'
|
10
10
|
require 'hashie'
|
11
11
|
|
12
|
+
require 'artirix_cache_service'
|
13
|
+
|
12
14
|
# note DO NOT require kaminari or will_paginate, it'll be done when invoking `ArtirixDataModels::EsCollection.work_with_will_paginate`
|
13
15
|
# note: do not require SimpleConfig, it has to exist before used. Same as we don't require Rails.
|
14
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artirix_data_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Turiño
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '3.4'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: artirix_cache_service
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: simpleconfig
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|