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 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