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