rails-settings-cached 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99a035f272fc7a299f74e25017cd4d1d453bc5b45c79a4ba0fd68555249087e5
4
- data.tar.gz: 91b56df8857355fbd0bcc9178eda065714ab5da4bf9436dde4a8a340bde2809b
3
+ metadata.gz: 4a7bc508cf14fd62288de455806b11c39f5894fc0830ea89523e9a4f9ca3d09b
4
+ data.tar.gz: 9d4affefb02823cf0a73344c7356f2e416d6cb6fb78dc0e25ad94a21cb4b1646
5
5
  SHA512:
6
- metadata.gz: cc1e140b6ec1e2f0ed687de9a699d8bb1a87a41048784928b79b419623c19263c7aecf7d199c752e2ca5d3bfdc9de063e825032d3787ced6b9297ebaa2852275
7
- data.tar.gz: 88dafb8efac6cb93566aa6dbded820723afd539a7ab24b96421d51cf5fda7afe268eae3fca10ec4645a571507ce10bcfae2f6ff749f94b2a08e722798e12b021
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 Cache Demo"
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.host = "https://your-host.com"
72
- irb > Setting.host
73
- "https://your-host.com"
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`
@@ -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
- attr_reader :keys
56
- attr_reader :readonly_keys
57
- attr_reader :editable_keys
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)
@@ -3,7 +3,7 @@
3
3
  module RailsSettings
4
4
  class << self
5
5
  def version
6
- "2.3.0"
6
+ "2.3.1"
7
7
  end
8
8
  end
9
9
  end
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.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee