rails-settings-cached 2.2.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails-settings-cached might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85279c41b179aa65d668a48d4d18e73b5fe886be9cd8235dc2acdb54c3beb5da
4
- data.tar.gz: 516991953aa7698cf86511512d863b7903d1ec5ad648a69c386501413a75ac86
3
+ metadata.gz: 99a035f272fc7a299f74e25017cd4d1d453bc5b45c79a4ba0fd68555249087e5
4
+ data.tar.gz: 91b56df8857355fbd0bcc9178eda065714ab5da4bf9436dde4a8a340bde2809b
5
5
  SHA512:
6
- metadata.gz: 742596dc7e47c3d31ea64ecf54d96cae5885938076c2704aebe5f3e94701627631d19a8480f24ef97dc1861a8e1a1cab33c6f3aefd56ff755f88ef47c1380401
7
- data.tar.gz: aa7b9a3ba2443a7ac6cb12150c196247bfd543e086b4eea1199f83eca1035ddefc1bcb32ae5d01cf9c3448dcd2f5c651dd9a73c8dab22600d28f202ef7d1f4a6
6
+ metadata.gz: cc1e140b6ec1e2f0ed687de9a699d8bb1a87a41048784928b79b419623c19263c7aecf7d199c752e2ca5d3bfdc9de063e825032d3787ced6b9297ebaa2852275
7
+ data.tar.gz: 88dafb8efac6cb93566aa6dbded820723afd539a7ab24b96421d51cf5fda7afe268eae3fca10ec4645a571507ce10bcfae2f6ff749f94b2a08e722798e12b021
@@ -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(self.cache_key)
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
- def keys
49
- @keys
50
- end
55
+ attr_reader :keys
56
+ attr_reader :readonly_keys
57
+ attr_reader :editable_keys
51
58
 
52
59
  private
53
60
 
54
- def _define_field(key, default: nil, type: :string, readonly: false, separator: nil)
55
- if readonly
56
- define_singleton_method(key) do
57
- self.send(:_convert_string_to_typeof_value, type, default, separator: separator)
58
- end
59
- else
60
- define_singleton_method(key) do
61
- val = self.send(:_value_of, key)
62
- result = nil
63
- if !val.nil?
64
- result = val
65
- else
66
- result = default
67
- result = default.call if default.is_a?(Proc)
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
- define_singleton_method("#{key}=") do |value|
76
- var_name = key.to_s
77
+ result = send(:_convert_string_to_typeof_value, type, result, separator: separator)
77
78
 
78
- record = find_by(var: var_name) || new(var: var_name)
79
- value = self.send(:_convert_string_to_typeof_value, type, value, separator: separator)
79
+ result
80
+ end
80
81
 
81
- record.value = value
82
- record.save!
82
+ define_singleton_method("#{key}=") do |value|
83
+ var_name = key.to_s
83
84
 
84
- value
85
- end
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
- if type == :boolean
89
- define_singleton_method("#{key}?") do
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
- def _value_of(var_name)
119
- raise "#{self.table_name} does not exist." unless table_exists?
120
-
121
- _all_settings[var_name.to_s]
95
+ if type == :boolean
96
+ define_singleton_method("#{key}?") do
97
+ send(key)
98
+ end
122
99
  end
100
+ end
123
101
 
124
- def rails_initialized?
125
- Rails.application && Rails.application.initialized?
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
- def _all_settings
129
- raise "You cannot use settings before Rails initialize." unless rails_initialized?
130
- RequestStore.store[:rails_settings_all_settings] ||= begin
131
- Rails.cache.fetch(self.cache_key, expires_in: 1.week) do
132
- vars = unscoped.select("var, value")
133
- result = {}
134
- vars.each { |record| result[record.var] = record.value }
135
- result.with_indifferent_access
136
- end
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
@@ -3,7 +3,7 @@
3
3
  module RailsSettings
4
4
  class << self
5
5
  def version
6
- "2.2.1"
6
+ "2.3.0"
7
7
  end
8
8
  end
9
9
  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.2.1
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-14 00:00:00.000000000 Z
11
+ date: 2020-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails