rails-settings-cached 2.2.1 → 2.3.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.
Potentially problematic release.
This version of rails-settings-cached might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/rails-settings/base.rb +89 -73
- data/lib/rails-settings/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99a035f272fc7a299f74e25017cd4d1d453bc5b45c79a4ba0fd68555249087e5
|
4
|
+
data.tar.gz: 91b56df8857355fbd0bcc9178eda065714ab5da4bf9436dde4a8a340bde2809b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc1e140b6ec1e2f0ed687de9a699d8bb1a87a41048784928b79b419623c19263c7aecf7d199c752e2ca5d3bfdc9de063e825032d3787ced6b9297ebaa2852275
|
7
|
+
data.tar.gz: 88dafb8efac6cb93566aa6dbded820723afd539a7ab24b96421d51cf5fda7afe268eae3fca10ec4645a571507ce10bcfae2f6ff749f94b2a08e722798e12b021
|
data/lib/rails-settings/base.rb
CHANGED
@@ -6,7 +6,7 @@ module RailsSettings
|
|
6
6
|
class Base < ActiveRecord::Base
|
7
7
|
class SettingNotFound < RuntimeError; end
|
8
8
|
|
9
|
-
SEPARATOR_REGEXP = /[\n,;]
|
9
|
+
SEPARATOR_REGEXP = /[\n,;]+/.freeze
|
10
10
|
self.table_name = table_name_prefix + "settings"
|
11
11
|
|
12
12
|
# get the value field, YAML decoded
|
@@ -26,12 +26,19 @@ module RailsSettings
|
|
26
26
|
class << self
|
27
27
|
def clear_cache
|
28
28
|
RequestStore.store[:rails_settings_all_settings] = nil
|
29
|
-
Rails.cache.delete(
|
29
|
+
Rails.cache.delete(cache_key)
|
30
30
|
end
|
31
31
|
|
32
32
|
def field(key, **opts)
|
33
33
|
@keys ||= []
|
34
|
+
@readonly_keys ||= []
|
35
|
+
@editable_keys ||= []
|
34
36
|
@keys << key.to_s
|
37
|
+
if opts[:readonly]
|
38
|
+
@readonly_keys << key.to_s
|
39
|
+
else
|
40
|
+
@editable_keys << key.to_s
|
41
|
+
end
|
35
42
|
_define_field(key, default: opts[:default], type: opts[:type], readonly: opts[:readonly], separator: opts[:separator])
|
36
43
|
end
|
37
44
|
|
@@ -45,97 +52,106 @@ module RailsSettings
|
|
45
52
|
scope.join("/")
|
46
53
|
end
|
47
54
|
|
48
|
-
|
49
|
-
|
50
|
-
|
55
|
+
attr_reader :keys
|
56
|
+
attr_reader :readonly_keys
|
57
|
+
attr_reader :editable_keys
|
51
58
|
|
52
59
|
private
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
result = self.send(:_convert_string_to_typeof_value, type, result, separator: separator)
|
71
|
-
|
72
|
-
result
|
61
|
+
def _define_field(key, default: nil, type: :string, readonly: false, separator: nil)
|
62
|
+
if readonly
|
63
|
+
define_singleton_method(key) do
|
64
|
+
send(:_convert_string_to_typeof_value, type, default, separator: separator)
|
65
|
+
end
|
66
|
+
else
|
67
|
+
define_singleton_method(key) do
|
68
|
+
val = send(:_value_of, key)
|
69
|
+
result = nil
|
70
|
+
if !val.nil?
|
71
|
+
result = val
|
72
|
+
else
|
73
|
+
result = default
|
74
|
+
result = default.call if default.is_a?(Proc)
|
73
75
|
end
|
74
76
|
|
75
|
-
|
76
|
-
var_name = key.to_s
|
77
|
+
result = send(:_convert_string_to_typeof_value, type, result, separator: separator)
|
77
78
|
|
78
|
-
|
79
|
-
|
79
|
+
result
|
80
|
+
end
|
80
81
|
|
81
|
-
|
82
|
-
|
82
|
+
define_singleton_method("#{key}=") do |value|
|
83
|
+
var_name = key.to_s
|
83
84
|
|
84
|
-
|
85
|
-
|
86
|
-
end
|
85
|
+
record = find_by(var: var_name) || new(var: var_name)
|
86
|
+
value = send(:_convert_string_to_typeof_value, type, value, separator: separator)
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
self.send(key)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
88
|
+
record.value = value
|
89
|
+
record.save!
|
94
90
|
|
95
|
-
def _convert_string_to_typeof_value(type, value, separator: nil)
|
96
|
-
return value unless [String, Integer, Float, BigDecimal].include?(value.class)
|
97
|
-
|
98
|
-
case type
|
99
|
-
when :boolean
|
100
|
-
value == "true" || value == "1" || value == 1 || value == true
|
101
|
-
when :array
|
102
|
-
value.split(separator || SEPARATOR_REGEXP).reject { |str| str.empty? }.map(&:strip)
|
103
|
-
when :hash
|
104
|
-
value = YAML.load(value).to_h rescue eval(value).to_h rescue {}
|
105
|
-
value.deep_stringify_keys!
|
106
|
-
value
|
107
|
-
when :integer
|
108
|
-
value.to_i
|
109
|
-
when :float
|
110
|
-
value.to_f
|
111
|
-
when :big_decimal
|
112
|
-
value.to_d
|
113
|
-
else
|
114
91
|
value
|
115
92
|
end
|
116
93
|
end
|
117
94
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
95
|
+
if type == :boolean
|
96
|
+
define_singleton_method("#{key}?") do
|
97
|
+
send(key)
|
98
|
+
end
|
122
99
|
end
|
100
|
+
end
|
123
101
|
|
124
|
-
|
125
|
-
|
102
|
+
def _convert_string_to_typeof_value(type, value, separator: nil)
|
103
|
+
return value unless [String, Integer, Float, BigDecimal].include?(value.class)
|
104
|
+
|
105
|
+
case type
|
106
|
+
when :boolean
|
107
|
+
value == "true" || value == "1" || value == 1 || value == true
|
108
|
+
when :array
|
109
|
+
value.split(separator || SEPARATOR_REGEXP).reject { |str| str.empty? }.map(&:strip)
|
110
|
+
when :hash
|
111
|
+
value = begin
|
112
|
+
begin
|
113
|
+
YAML.load(value).to_h
|
114
|
+
rescue StandardError
|
115
|
+
eval(value).to_h
|
116
|
+
end
|
117
|
+
rescue StandardError
|
118
|
+
{}
|
119
|
+
end
|
120
|
+
value.deep_stringify_keys!
|
121
|
+
value
|
122
|
+
when :integer
|
123
|
+
value.to_i
|
124
|
+
when :float
|
125
|
+
value.to_f
|
126
|
+
when :big_decimal
|
127
|
+
value.to_d
|
128
|
+
else
|
129
|
+
value
|
126
130
|
end
|
131
|
+
end
|
127
132
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
133
|
+
def _value_of(var_name)
|
134
|
+
raise "#{table_name} does not exist." unless table_exists?
|
135
|
+
|
136
|
+
_all_settings[var_name.to_s]
|
137
|
+
end
|
138
|
+
|
139
|
+
def rails_initialized?
|
140
|
+
Rails.application&.initialized?
|
141
|
+
end
|
142
|
+
|
143
|
+
def _all_settings
|
144
|
+
raise "You cannot use settings before Rails initialize." unless rails_initialized?
|
145
|
+
|
146
|
+
RequestStore.store[:rails_settings_all_settings] ||= begin
|
147
|
+
Rails.cache.fetch(cache_key, expires_in: 1.week) do
|
148
|
+
vars = unscoped.select("var, value")
|
149
|
+
result = {}
|
150
|
+
vars.each { |record| result[record.var] = record.value }
|
151
|
+
result.with_indifferent_access
|
137
152
|
end
|
138
153
|
end
|
154
|
+
end
|
139
155
|
end
|
140
156
|
end
|
141
157
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-settings-cached
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|