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