rails-settings-cached 2.4.1 → 2.5.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/README.md +62 -3
- data/lib/rails-settings/base.rb +12 -3
- 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: f37f8d9bad4b40dd60dbf30806e1e530e1d292448ba803db06bdcca5f562c62e
|
4
|
+
data.tar.gz: 2900b13077db46b60b2c22cfa3a21b7af5704b86d874d485672508c8ef866475
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c696568044b97ce9a9112de42682a7e484e13a8220e0d7b1b52d5977f56358f82109e4bb1dd8b227f89089d060a49454b2bd1c86ac4cc7fbfc2c275bf0a48c55
|
7
|
+
data.tar.gz: c2eb40491e08ce8eefe6d96e6d987fd9a02efbad708e9a1ae0442d98b82e626300ee90eda5664be385aa81178c4be4a19b190d623a2ff8cdb0d8e0f8b53d0649
|
data/README.md
CHANGED
@@ -30,9 +30,9 @@ You will get `app/models/setting.rb`
|
|
30
30
|
```rb
|
31
31
|
class Setting < RailsSettings::Base
|
32
32
|
# cache_prefix { "v1" }
|
33
|
-
field :app_name, default: "Rails Settings"
|
33
|
+
field :app_name, default: "Rails Settings", validates: { presence: true, length: { in: 2..20 } }
|
34
34
|
field :host, default: "http://example.com", readonly: true
|
35
|
-
field :default_locale, default: "zh-CN"
|
35
|
+
field :default_locale, default: "zh-CN", validates: { presence: true, inclusion: { in: %w[zh-CN en jp] } }
|
36
36
|
field :readonly_item, type: :integer, default: 100, readonly: true
|
37
37
|
field :user_limits, type: :integer, default: 20
|
38
38
|
field :exchange_rate, type: :float, default: 0.123
|
@@ -49,7 +49,7 @@ class Setting < RailsSettings::Base
|
|
49
49
|
}
|
50
50
|
|
51
51
|
# lambda default value
|
52
|
-
field :welcome_message, type: :string, default: -> { "welcome to #{self.app_name}" }
|
52
|
+
field :welcome_message, type: :string, default: -> { "welcome to #{self.app_name}" }, validates: { length: { maximum: 255 } }
|
53
53
|
end
|
54
54
|
```
|
55
55
|
|
@@ -150,6 +150,39 @@ Setting.get_field("app_name")
|
|
150
150
|
=> { key: "app_name", type: :string, default: "Rails Settings", readonly: false }
|
151
151
|
```
|
152
152
|
|
153
|
+
## Validations
|
154
|
+
|
155
|
+
You can use `validates` options to special the [Rails Validation](https://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates) for fields.
|
156
|
+
|
157
|
+
```rb
|
158
|
+
class Setting < RailsSettings::Base
|
159
|
+
# cache_prefix { "v1" }
|
160
|
+
field :app_name, default: "Rails Settings", validates: { presence: true, length: { in: 2..20 } }
|
161
|
+
field :default_locale, default: "zh-CN", validates: { presence: true, inclusion: { in: %w[zh-CN en jp], message: "is not included in [zh-CN, en, jp]" } }
|
162
|
+
end
|
163
|
+
```
|
164
|
+
|
165
|
+
Now validate will work on record save.
|
166
|
+
|
167
|
+
```rb
|
168
|
+
setting = Setting.find_or_initialize_by(var: :app_name)
|
169
|
+
setting.value = ""
|
170
|
+
setting.valid?
|
171
|
+
# => false
|
172
|
+
setting.errors.full_messages
|
173
|
+
# => ["App name can't be blank", "App name too short (minimum is 2 characters)"]
|
174
|
+
|
175
|
+
setting = Setting.find_or_initialize_by(var: :default_locale)
|
176
|
+
setting.value = "zh-TW"
|
177
|
+
setting.save
|
178
|
+
# => false
|
179
|
+
setting.errors.full_messages
|
180
|
+
# => ["Default locale is not included in [zh-CN, en, jp]"]
|
181
|
+
setting.value = "en"
|
182
|
+
setting.valid?
|
183
|
+
# => true
|
184
|
+
```
|
185
|
+
|
153
186
|
## Use Setting in Rails initializing:
|
154
187
|
|
155
188
|
In `version 2.3+` you can use Setting before Rails is initialized.
|
@@ -265,9 +298,25 @@ app/controllers/admin/settings_controller.rb
|
|
265
298
|
module Admin
|
266
299
|
class SettingsController < ApplicationController
|
267
300
|
def create
|
301
|
+
@errors = ActiveModel::Errors.new
|
302
|
+
setting_params.keys.each do |key|
|
303
|
+
next if setting_params[key].nil?
|
304
|
+
|
305
|
+
setting = Setting.new(var: key)
|
306
|
+
setting.value = setting_params[key].strip
|
307
|
+
unless setting.valid?
|
308
|
+
@errors.merge!(setting.errors)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
if @errors.any?
|
313
|
+
render :new
|
314
|
+
end
|
315
|
+
|
268
316
|
setting_params.keys.each do |key|
|
269
317
|
Setting.send("#{key}=", setting_params[key].strip) unless setting_params[key].nil?
|
270
318
|
end
|
319
|
+
|
271
320
|
redirect_to admin_settings_path, notice: "Setting was successfully updated."
|
272
321
|
end
|
273
322
|
|
@@ -284,6 +333,16 @@ app/views/admin/settings/show.html.erb
|
|
284
333
|
|
285
334
|
```erb
|
286
335
|
<%= form_for(Setting.new, url: admin_settings_path) do |f| %>
|
336
|
+
<% if @errors.any? %>
|
337
|
+
<div class="alert alert-block alert-danger">
|
338
|
+
<ul>
|
339
|
+
<% @errors.full_messages.each do |msg| %>
|
340
|
+
<li><%= msg %></li>
|
341
|
+
<% end %>
|
342
|
+
</ul>
|
343
|
+
</div>
|
344
|
+
<% end %>
|
345
|
+
|
287
346
|
<div class="form-group">
|
288
347
|
<label class="control-label">Host</label>
|
289
348
|
<%= f.text_field :host, value: Setting.host, class: "form-control", placeholder: "http://localhost" %>
|
data/lib/rails-settings/base.rb
CHANGED
@@ -28,7 +28,7 @@ module RailsSettings
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def field(key, **opts)
|
31
|
-
_define_field(key, default: opts[:default], type: opts[:type], readonly: opts[:readonly], separator: opts[:separator])
|
31
|
+
_define_field(key, default: opts[:default], type: opts[:type], readonly: opts[:readonly], separator: opts[:separator], validates: opts[:validates])
|
32
32
|
end
|
33
33
|
|
34
34
|
def get_field(key)
|
@@ -59,7 +59,7 @@ module RailsSettings
|
|
59
59
|
|
60
60
|
private
|
61
61
|
|
62
|
-
def _define_field(key, default: nil, type: :string, readonly: false, separator: nil)
|
62
|
+
def _define_field(key, default: nil, type: :string, readonly: false, separator: nil, validates: nil)
|
63
63
|
@defined_fields ||= []
|
64
64
|
@defined_fields << {
|
65
65
|
key: key.to_s,
|
@@ -95,10 +95,19 @@ module RailsSettings
|
|
95
95
|
value = send(:_convert_string_to_typeof_value, type, value, separator: separator)
|
96
96
|
|
97
97
|
record.value = value
|
98
|
-
record.save
|
98
|
+
record.save(validate: false)
|
99
99
|
|
100
100
|
value
|
101
101
|
end
|
102
|
+
|
103
|
+
if validates
|
104
|
+
validates[:if] = Proc.new { |item| item.var.to_s == key.to_s }
|
105
|
+
send(:validates, key, **validates)
|
106
|
+
|
107
|
+
define_method(:read_attribute_for_validation) do |_key|
|
108
|
+
self.value
|
109
|
+
end
|
110
|
+
end
|
102
111
|
end
|
103
112
|
|
104
113
|
if type == :boolean
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Lee
|
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
|
-
rubygems_version: 3.
|
152
|
+
rubygems_version: 3.0.8
|
153
153
|
signing_key:
|
154
154
|
specification_version: 4
|
155
155
|
summary: The best solution for store global settings in Rails applications.
|