rails-settings-cached 2.6.0 → 2.7.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 +36 -15
- data/lib/rails-settings/base.rb +16 -7
- 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: d45081eacc51de459cd0bc48469430474cd561386e924b40996bd5f66c1299e5
|
4
|
+
data.tar.gz: 485e2df525a6d3b66dfed0c0b5935aa8134b13ae0b0528d1fae536e5b19e4ae2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6651da35fec5737f76192ec01f0980ea45a85c69efb768c22edbce29b490f29dfa2498798b5af6d45a126955a3fe72bf2fa1ae76bd249237b83f408f7bba72c4
|
7
|
+
data.tar.gz: b96670e501b9c5aff237b02fd2da2560b654dd2835322b2e64e28679e3edf646ee940f2f2ffe69bfa7d851732ac4844bb47b01e292f4ef4b5f04e587977f8c21
|
data/README.md
CHANGED
@@ -30,26 +30,32 @@ 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", validates: { presence: true, length: { in: 2..20 } }
|
34
|
-
field :host, default: "http://example.com", readonly: true
|
35
|
-
field :default_locale, default: "zh-CN", validates: { presence: true, inclusion: { in: %w[zh-CN en jp] } }
|
36
|
-
field :readonly_item, type: :integer, default: 100, readonly: true
|
37
|
-
field :user_limits, type: :integer, default: 20
|
38
|
-
field :exchange_rate, type: :float, default: 0.123
|
39
|
-
field :admin_emails, type: :array, default: %w[admin@rubyonrails.org]
|
40
|
-
field :captcha_enable, type: :boolean, default: true
|
41
33
|
|
42
|
-
|
43
|
-
|
34
|
+
scope :application do
|
35
|
+
field :app_name, default: "Rails Settings", validates: { presence: true, length: { in: 2..20 } }
|
36
|
+
field :host, default: "http://example.com", readonly: true
|
37
|
+
field :default_locale, default: "zh-CN", validates: { presence: true, inclusion: { in: %w[zh-CN en jp] } }, option_values: %w[en zh-CN]
|
38
|
+
field :admin_emails, type: :array, default: %w[admin@rubyonrails.org]
|
39
|
+
|
40
|
+
# lambda default value
|
41
|
+
field :welcome_message, type: :string, default: -> { "welcome to #{self.app_name}" }, validates: { length: { maximum: 255 } }
|
42
|
+
# Override array separator, default: /[\n,]/ split with \n or comma.
|
43
|
+
field :tips, type: :array, separator: /[\n]+/
|
44
|
+
end
|
45
|
+
|
46
|
+
scope :limits do
|
47
|
+
field :user_limits, type: :integer, default: 20
|
48
|
+
field :exchange_rate, type: :float, default: 0.123
|
49
|
+
field :captcha_enable, type: :boolean, default: true, group: :limits
|
50
|
+
end
|
44
51
|
|
45
52
|
field :notification_options, type: :hash, default: {
|
46
53
|
send_all: true,
|
47
54
|
logging: true,
|
48
55
|
sender_email: "foo@bar.com"
|
49
|
-
}
|
56
|
+
}, group: :advanced
|
50
57
|
|
51
|
-
|
52
|
-
field :welcome_message, type: :string, default: -> { "welcome to #{self.app_name}" }, validates: { length: { maximum: 255 } }
|
58
|
+
field :readonly_item, type: :integer, default: 100, readonly: true
|
53
59
|
end
|
54
60
|
```
|
55
61
|
|
@@ -145,9 +151,24 @@ Setting.readonly_keys
|
|
145
151
|
|
146
152
|
# Get options of field
|
147
153
|
Setting.get_field("host")
|
148
|
-
=> { key: "host", type: :string, default: "http://example.com", readonly: true }
|
154
|
+
=> { scope: :application, key: "host", type: :string, default: "http://example.com", readonly: true }
|
149
155
|
Setting.get_field("app_name")
|
150
|
-
=> { key: "app_name", type: :string, default: "Rails Settings", readonly: false }
|
156
|
+
=> { scope: :application, key: "app_name", type: :string, default: "Rails Settings", readonly: false }
|
157
|
+
Setting.get_field(:user_limits)
|
158
|
+
=> { scope: :limits, key: "user_limits", type: :integer, default: 20, readonly: false }
|
159
|
+
```
|
160
|
+
|
161
|
+
#### Get All defined fields
|
162
|
+
|
163
|
+
> version 2.7.0+
|
164
|
+
|
165
|
+
You can use `defined_fields` method to get all defined fields in Setting.
|
166
|
+
|
167
|
+
```rb
|
168
|
+
# Get editable fields and group by scope
|
169
|
+
editable_fields = Setting.defined_fields
|
170
|
+
.select { |field| !field[:readonly] }
|
171
|
+
.group_by { |field| field[:scope] }
|
151
172
|
```
|
152
173
|
|
153
174
|
## Validations
|
data/lib/rails-settings/base.rb
CHANGED
@@ -34,8 +34,13 @@ module RailsSettings
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def field(key, **opts)
|
37
|
-
_define_field(key,
|
38
|
-
|
37
|
+
_define_field(key, **opts)
|
38
|
+
end
|
39
|
+
|
40
|
+
def scope(name)
|
41
|
+
@scope = name.to_sym
|
42
|
+
yield
|
43
|
+
@scope = nil
|
39
44
|
end
|
40
45
|
|
41
46
|
def get_field(key)
|
@@ -47,9 +52,9 @@ module RailsSettings
|
|
47
52
|
end
|
48
53
|
|
49
54
|
def cache_key
|
50
|
-
|
51
|
-
|
52
|
-
|
55
|
+
key_parts = ["rails-settings-cached"]
|
56
|
+
key_parts << @cache_prefix.call if @cache_prefix
|
57
|
+
key_parts.join("/")
|
53
58
|
end
|
54
59
|
|
55
60
|
def keys
|
@@ -64,19 +69,23 @@ module RailsSettings
|
|
64
69
|
@defined_fields.select { |field| field[:readonly] }.map { |field| field[:key] }
|
65
70
|
end
|
66
71
|
|
72
|
+
attr_reader :defined_fields
|
73
|
+
|
67
74
|
private
|
68
75
|
|
69
|
-
def _define_field(key, default: nil, type: :string, readonly: false, separator: nil, validates: nil)
|
76
|
+
def _define_field(key, default: nil, type: :string, readonly: false, separator: nil, validates: nil, **opts)
|
70
77
|
key = key.to_s
|
71
78
|
|
72
79
|
raise ProcetedKeyError.new(key) if PROTECTED_KEYS.include?(key)
|
73
80
|
|
74
81
|
@defined_fields ||= []
|
75
82
|
@defined_fields << {
|
83
|
+
scope: @scope,
|
76
84
|
key: key,
|
77
85
|
default: default,
|
78
86
|
type: type || :string,
|
79
|
-
readonly: readonly.nil? ? false : readonly
|
87
|
+
readonly: readonly.nil? ? false : readonly,
|
88
|
+
options: opts
|
80
89
|
}
|
81
90
|
|
82
91
|
if readonly
|
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.7.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: 2021-
|
11
|
+
date: 2021-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|