artirix_data_models 0.20.0 → 0.21.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
  SHA1:
3
- metadata.gz: d6a0efe535f958e9d7c4e23504add310d21bb9a4
4
- data.tar.gz: 3978b682cccc7694680ec9268d4a3d3f09e44c77
3
+ metadata.gz: e774ad4922bb0f7943c4cc423b2ae1873f6b46e6
4
+ data.tar.gz: 57534ba90ffbd420208668a691e6d9da0dfb7909
5
5
  SHA512:
6
- metadata.gz: 0af80ece0e4b1797bf39f35150fedbe5f50dbe81ae8a6dba1bad6a7a7ab1fbee31b391826450afdbaa25c555748e33f914757bb175a95cd6cbb5e322f5cfdfb8
7
- data.tar.gz: 61f793fd6c07f5c4d3a763d29ae1810c606bf464340deffc8d749abd7e9c326c99d3edaf7f76a416ac50b3127bada35cbeba36f56d36e7cc6ef910146b2da7e2
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
 
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'keyword_init', '~> 1.4'
26
26
  spec.add_dependency 'naught'
27
27
  spec.add_dependency 'hashie', '~> 3.4'
28
+ spec.add_dependency 'artirix_cache_service'
28
29
 
29
30
  spec.add_development_dependency 'simpleconfig'
30
31
 
@@ -1,179 +1,104 @@
1
1
  module ArtirixDataModels::CacheService
2
-
3
- def self.digest_element(element)
4
- Digest::SHA1.hexdigest element.to_s
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.expire_cache(*args, &block)
22
- Expirer.expire_cache *args, &block
23
- end
24
-
25
- def self.method_missing(m, *args, &block)
26
- method = m.to_s
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
- elsif Expirer.valid_method method
35
- Expirer.send m, *args, &block
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.respond_to_missing?(m, include_all = false)
43
- method = m.to_s
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
- private
60
-
61
- module KeyCleaner
62
- def self.valid_method(method_name)
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
- def self.clean_key_name(key)
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
- module OptionsStore
89
- def self.valid_method(method_name)
90
- method_name.end_with? '_options'
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
- def self.respond_to_missing?(m, include_all = false)
102
- has?(m) || super
103
- end
45
+ def self.options(options_name)
46
+ service.registered_options options_name
47
+ end
104
48
 
105
- private
106
- def self.has?(name)
107
- option_store.respond_to?(name)
108
- end
49
+ def self.options?(options_name)
50
+ service.registered_options? options_name
51
+ end
109
52
 
110
- def self.get(name)
111
- default.merge(get_particular(name))
112
- end
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
- def self.get_particular(name)
115
- Hash(option_store.send(name))
116
- end
57
+ p = final_pattern(pattern, add_wildcard: add_wildcard, add_prefix: add_prefix)
117
58
 
118
- def self.default
119
- @default ||= Hash(option_store.default_options)
120
- end
59
+ ArtirixDataModels.cache.delete_matched p
60
+ end
121
61
 
122
- def self.option_store
123
- @option_store ||= ArtirixDataModels.configuration.try(:cache_options) || disabled_options_store
124
- end
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
- class DisabledOptionsStore
131
- def method_missing(m, *args, &block)
132
- {}
133
- end
70
+ def self.method_missing(m, *args, &block)
71
+ method = m.to_s
134
72
 
135
- def respond_to_missing?(m, include_all = false)
136
- true
137
- end
138
- end
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
- module Expirer
142
- def self.valid_method(method_name)
143
- method_name.start_with? 'expire_'
144
- end
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
- def self.expire_cache(pattern = nil, add_wildcard: true, add_prefix: true)
147
- CacheStoreHelper.delete_matched pattern,
148
- add_wildcard: add_wildcard,
149
- add_prefix: add_prefix
83
+ else
84
+ super
150
85
  end
151
86
  end
152
87
 
153
- # we use `delete_matched` method -> it will work fine with Redis but it seems that it won't with Memcached
154
- module CacheStoreHelper
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
- def self.delete_matched(pattern = nil, add_wildcard: true, add_prefix: true)
167
- return false unless ArtirixDataModels.cache.present?
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
- p = final_pattern(pattern, add_wildcard: add_wildcard, add_prefix: add_prefix)
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
- ArtirixDataModels.cache.delete_matched p
172
- end
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.dao_get_key(dao_name, model_pk)
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
- return_if_none: :default
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.dao_get_full_key(model)
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
- return_if_none: :default
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.dao_get_full_no_time_key(model)
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
- return_if_none: :default
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.dao_get_key(dao_name, model_pks)
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
- return_if_none: :default
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.present?
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.present?
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.present?
111
+ return value unless cache
113
112
 
114
113
  cache.write cache_key, value, cache_options
115
114
  value
@@ -1,3 +1,3 @@
1
1
  module ArtirixDataModels
2
- VERSION = '0.20.0'
2
+ VERSION = '0.21.0'
3
3
  end
@@ -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.20.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-03 00:00:00.000000000 Z
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