service_variables 1.1.0 → 1.2.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/lib/service_variables.rb +24 -11
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7799d8f19f920e3736dc926274f6856dcaf2e533
|
4
|
+
data.tar.gz: 15255d19aaab87e8b8d799c6cdbdac42a8454f4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ac95d7463716ed8d09f02959548a60289f7364340b9e40435867ac35fab98717da8426e6fed5a7c1d7b8b05abbd30e5ade24864e3c8bc21e37de7acb4631dac
|
7
|
+
data.tar.gz: 4aa7eeeeabfee449d12b1adf86a0be28e3c6f8b6ef38f1c773a2e30fe879d1817f76f8945982aefd785ceff7f3c5e37961586f8af65ebe1b239d5e444fc95e3d
|
data/lib/service_variables.rb
CHANGED
@@ -9,22 +9,27 @@ module ServiceVariables
|
|
9
9
|
|
10
10
|
DEFAULT_REDIS_KEY = 'service_variables_redis_key'
|
11
11
|
BOOLEAN_VALUES = [true, false, 'true', 'false'].freeze
|
12
|
+
FAILURE_MODES = %i[raise_exception use_default use_last_value].freeze
|
12
13
|
|
13
14
|
attr_writer :service_variables_redis_client, :redis_key
|
14
15
|
|
15
|
-
def configure(redis_client:, redis_key: nil)
|
16
|
+
def configure(redis_client:, redis_key: nil, failure_mode: :raise_exception)
|
16
17
|
@service_variables_redis_client = redis_client
|
17
18
|
@redis_key = redis_key
|
19
|
+
|
20
|
+
raise InvalidValueError unless FAILURE_MODES.include?(failure_mode)
|
21
|
+
@failure_mode = failure_mode
|
22
|
+
@last_value_map = {}
|
18
23
|
end
|
19
24
|
|
20
|
-
def boolean_option(name, default: nil)
|
25
|
+
def boolean_option(name, default: nil, failure_mode: @failure_mode)
|
21
26
|
getter_method_name = "#{name}?".to_sym
|
22
27
|
setter_method_name = "#{name}=".to_sym
|
23
28
|
|
24
29
|
define_singleton_method getter_method_name do
|
25
30
|
# Note that all values are stored in Redis as strings.
|
26
|
-
value = get(name)
|
27
|
-
value.nil? ? default : get(name) == 'true'
|
31
|
+
value = get(name, failure_mode)
|
32
|
+
value.nil? ? default : get(name, failure_mode) == 'true'
|
28
33
|
end
|
29
34
|
|
30
35
|
# Allow for `name` and `name?` accessors of boolean options.
|
@@ -36,9 +41,9 @@ module ServiceVariables
|
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
39
|
-
def integer_option(name, default: nil, min: nil, max: nil)
|
44
|
+
def integer_option(name, default: nil, min: nil, max: nil, failure_mode: @failure_mode)
|
40
45
|
define_singleton_method name do
|
41
|
-
get(name)&.to_i || default
|
46
|
+
get(name, failure_mode)&.to_i || default
|
42
47
|
end
|
43
48
|
|
44
49
|
define_singleton_method "#{name}=" do |value|
|
@@ -49,9 +54,9 @@ module ServiceVariables
|
|
49
54
|
end
|
50
55
|
end
|
51
56
|
|
52
|
-
def float_option(name, default: nil, min: nil, max: nil)
|
57
|
+
def float_option(name, default: nil, min: nil, max: nil, failure_mode: @failure_mode)
|
53
58
|
define_singleton_method name do
|
54
|
-
get(name)&.to_f || default
|
59
|
+
get(name, failure_mode)&.to_f || default
|
55
60
|
end
|
56
61
|
|
57
62
|
define_singleton_method "#{name}=" do |value|
|
@@ -62,9 +67,9 @@ module ServiceVariables
|
|
62
67
|
end
|
63
68
|
end
|
64
69
|
|
65
|
-
def string_option(name, default: nil, enum: nil)
|
70
|
+
def string_option(name, default: nil, enum: nil, failure_mode: @failure_mode)
|
66
71
|
define_singleton_method name do
|
67
|
-
get(name) || default
|
72
|
+
get(name, failure_mode) || default
|
68
73
|
end
|
69
74
|
|
70
75
|
define_singleton_method "#{name}=" do |value|
|
@@ -75,8 +80,14 @@ module ServiceVariables
|
|
75
80
|
|
76
81
|
private
|
77
82
|
|
78
|
-
def get(key)
|
83
|
+
def get(key, failure_mode)
|
79
84
|
redis.hget(redis_hash_key, key)
|
85
|
+
rescue Redis::BaseConnectionError => e
|
86
|
+
raise e if failure_mode == :raise_exception
|
87
|
+
# If Redis returns a nil, then the default value is used, so we do the same with :use_default
|
88
|
+
return nil if failure_mode == :use_default
|
89
|
+
return @last_value_map[key] if failure_mode == :use_last_value
|
90
|
+
raise InvalidValueError unless FAILURE_MODES.include?(failure_mode)
|
80
91
|
end
|
81
92
|
|
82
93
|
def set(key, value)
|
@@ -85,6 +96,8 @@ module ServiceVariables
|
|
85
96
|
else
|
86
97
|
redis.hset(redis_hash_key, key, value)
|
87
98
|
end
|
99
|
+
|
100
|
+
@last_value_map[key] = value
|
88
101
|
end
|
89
102
|
|
90
103
|
def redis
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_variables
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- coinbase
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.49.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.49.0
|
69
69
|
description: Wrapper for redis backed configuration variables accessible to multiple
|
70
70
|
servers.
|
71
71
|
email: opensource@coinbase.com
|
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
94
|
version: '0'
|
95
95
|
requirements: []
|
96
96
|
rubyforge_project:
|
97
|
-
rubygems_version: 2.6.
|
97
|
+
rubygems_version: 2.6.11
|
98
98
|
signing_key:
|
99
99
|
specification_version: 4
|
100
100
|
summary: Service level variables.
|