rails-settings-cached 2.3.0 → 2.3.1
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 +32 -5
- data/lib/rails-settings/base.rb +23 -12
- data/lib/rails-settings/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a7bc508cf14fd62288de455806b11c39f5894fc0830ea89523e9a4f9ca3d09b
|
4
|
+
data.tar.gz: 9d4affefb02823cf0a73344c7356f2e416d6cb6fb78dc0e25ad94a21cb4b1646
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c023a86676cd5f41c5479e8c671df1946076de4167f8fe40c437e69d69e27d1d46a5d5e5a97ad35f950f6b477a0c14ab6de0c4e4fbd3210df46d0c091ac6c312
|
7
|
+
data.tar.gz: 16ed2df3231c5379847c25c97f3950a8692ce51a36d5b1ffc7e1973a11786de820f8264e628f3f7df5e6689018a91e3849a4749c5757eb7f1b076a5b041f538b
|
data/README.md
CHANGED
@@ -30,8 +30,8 @@ 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
|
34
|
-
field :host, default: "http://example.com"
|
33
|
+
field :app_name, default: "Rails Settings"
|
34
|
+
field :host, default: "http://example.com", readonly: true
|
35
35
|
field :default_locale, default: "zh-CN"
|
36
36
|
field :readonly_item, type: :integer, default: 100, readonly: true
|
37
37
|
field :user_limits, type: :integer, default: 20
|
@@ -68,9 +68,11 @@ The syntax is easy. First, let's create some settings to keep track of:
|
|
68
68
|
```ruby
|
69
69
|
irb > Setting.host
|
70
70
|
"http://example.com"
|
71
|
-
irb > Setting.
|
72
|
-
|
73
|
-
|
71
|
+
irb > Setting.app_name
|
72
|
+
"Rails Settings"
|
73
|
+
irb > Setting.app_name = "Rails Settings Cached"
|
74
|
+
irb > Setting.app_name
|
75
|
+
"Rails Settings Cached"
|
74
76
|
|
75
77
|
irb > Setting.user_limits
|
76
78
|
20
|
@@ -124,6 +126,31 @@ irb > Setting.notification_options
|
|
124
126
|
}
|
125
127
|
```
|
126
128
|
|
129
|
+
|
130
|
+
### Get defined fields
|
131
|
+
|
132
|
+
> version 2.3+
|
133
|
+
|
134
|
+
```rb
|
135
|
+
# Get all keys
|
136
|
+
Setting.keys
|
137
|
+
=> ["app_name", "host", "default_locale", "readonly_item"]
|
138
|
+
|
139
|
+
# Get editable keys
|
140
|
+
Settng.editable_keys
|
141
|
+
=> ["app_name", "default_locale"]
|
142
|
+
|
143
|
+
# Get readonly keys
|
144
|
+
Setting.readonly_keys
|
145
|
+
=> ["host", "readonly_item"]
|
146
|
+
|
147
|
+
# Get options of field
|
148
|
+
Setting.get_field("host")
|
149
|
+
=> { key: "host", type: :string, default: "http://example.com", readonly: true }
|
150
|
+
Setting.get_field("app_name")
|
151
|
+
=> { key: "app_name", type: :string, default: "Rails Settings", readonly: false }
|
152
|
+
```
|
153
|
+
|
127
154
|
## Readonly field
|
128
155
|
|
129
156
|
Sometimes you may need to use Setting before Rails is initialized, for example `config/devise.rb`
|
data/lib/rails-settings/base.rb
CHANGED
@@ -30,18 +30,13 @@ module RailsSettings
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def field(key, **opts)
|
33
|
-
@keys ||= []
|
34
|
-
@readonly_keys ||= []
|
35
|
-
@editable_keys ||= []
|
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
|
42
33
|
_define_field(key, default: opts[:default], type: opts[:type], readonly: opts[:readonly], separator: opts[:separator])
|
43
34
|
end
|
44
35
|
|
36
|
+
def get_field(key)
|
37
|
+
@defined_fields.find { |field| field[:key] == key.to_s } || {}
|
38
|
+
end
|
39
|
+
|
45
40
|
def cache_prefix(&block)
|
46
41
|
@cache_prefix = block
|
47
42
|
end
|
@@ -52,13 +47,29 @@ module RailsSettings
|
|
52
47
|
scope.join("/")
|
53
48
|
end
|
54
49
|
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
def keys
|
51
|
+
@defined_fields.map { |field| field[:key] }
|
52
|
+
end
|
53
|
+
|
54
|
+
def editable_keys
|
55
|
+
@defined_fields.reject { |field| field[:readonly] }.map { |field| field[:key] }
|
56
|
+
end
|
57
|
+
|
58
|
+
def readonly_keys
|
59
|
+
@defined_fields.select { |field| field[:readonly] }.map { |field| field[:key] }
|
60
|
+
end
|
58
61
|
|
59
62
|
private
|
60
63
|
|
61
64
|
def _define_field(key, default: nil, type: :string, readonly: false, separator: nil)
|
65
|
+
@defined_fields ||= []
|
66
|
+
@defined_fields << {
|
67
|
+
key: key.to_s,
|
68
|
+
default: default,
|
69
|
+
type: type || :string,
|
70
|
+
readonly: readonly.nil? ? false : readonly
|
71
|
+
}
|
72
|
+
|
62
73
|
if readonly
|
63
74
|
define_singleton_method(key) do
|
64
75
|
send(:_convert_string_to_typeof_value, type, default, separator: separator)
|