rails-settings-ui 1.3.5 → 1.4.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/Gemfile +4 -3
- data/README.md +15 -60
- data/app/controllers/rails_settings_ui/settings_controller.rb +17 -13
- data/app/helpers/rails_settings_ui/settings_helper.rb +5 -10
- data/config/locales/en.yml +3 -4
- data/lib/rails-settings-ui/engine.rb +0 -1
- data/lib/rails-settings-ui/settings_form_coercible.rb +2 -1
- data/lib/rails-settings-ui/settings_form_validator.rb +2 -1
- data/lib/rails-settings-ui/type_converter.rb +79 -0
- data/lib/rails-settings-ui/value_types/array.rb +19 -0
- data/lib/rails-settings-ui/value_types/base.rb +30 -0
- data/lib/rails-settings-ui/value_types/boolean.rb +16 -0
- data/lib/rails-settings-ui/value_types/duration.rb +17 -0
- data/lib/rails-settings-ui/value_types/fixnum.rb +17 -0
- data/lib/rails-settings-ui/value_types/float.rb +17 -0
- data/lib/rails-settings-ui/value_types/hash.rb +19 -0
- data/lib/rails-settings-ui/value_types/string.rb +11 -0
- data/lib/rails-settings-ui/value_types/symbol.rb +11 -0
- data/lib/rails-settings-ui/version.rb +1 -1
- data/lib/rails-settings-ui.rb +13 -5
- data/spec/dummy/app/assets/config/manifest.js +3 -0
- data/spec/dummy/app/models/settings.rb +17 -11
- data/spec/dummy/config/application.rb +8 -5
- data/spec/dummy/config/environments/development.rb +1 -1
- data/spec/dummy/config/environments/test.rb +5 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/log/development.log +204 -0
- data/spec/dummy/log/test.log +17721 -0
- data/spec/dummy/tmp/cache/983/850/rails-settings-cached%2Fv1 +0 -0
- data/spec/dummy/tmp/cache/B43/920/rails_settings_cached%3Aangle +1 -0
- data/spec/dummy/tmp/cache/B5B/D00/rails_settings_cached%3Alimit +1 -0
- data/spec/dummy/tmp/cache/C33/A30/rails_settings_cached%3Acompany +2 -0
- data/spec/dummy/tmp/cache/E33/F60/rails_settings_cached%3Aproject_name +2 -0
- data/spec/dummy/tmp/capybara/capybara-202210171734284469945531.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171737204973407096.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171748434956557154.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171748436975538759.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171750314291147778.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-20221017175031820707857.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171753008459837645.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171852063304179945.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171856426164369905.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171858321617647144.html +146 -0
- data/spec/dummy/tmp/capybara/capybara-202210171859225748767967.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171900593853637022.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171905425563856340.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171906453524726761.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171907021196417641.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171907177584260273.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171908598155484313.html +146 -0
- data/spec/dummy/tmp/capybara/capybara-202210171910151128908606.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171910335167198647.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-20221017191603669584955.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171923383386177630.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-20221017192440932299839.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171925398582267473.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171926266453882118.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171927092397731872.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171927096856622887.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-20221017192857430966358.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-20221017192857715946316.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171929344449627309.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171929349483966535.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171931514543176977.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171931516552014196.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171933532109133909.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171933538239745721.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171934252299363012.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171934257507814102.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935002341486006.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935003194509488.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935191080772264.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-20221017193519504184564.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935494419345825.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935495077855617.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935512244046619.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171935515471773291.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-20221017193621299357586.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171936214576498840.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171943053342669430.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171943054897250624.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171943172523615452.html +148 -0
- data/spec/dummy/tmp/capybara/capybara-202210171943176449343696.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171944092904892605.html +149 -0
- data/spec/dummy/tmp/capybara/capybara-202210171944096476035010.html +148 -0
- data/spec/features/settings_spec.rb +9 -8
- data/spec/lib/rails-settings-ui/type_converter_spec.rb +43 -0
- data/spec/lib/rails-settings-ui/value_types/array_spec.rb +21 -0
- data/spec/lib/rails-settings-ui/value_types/base_spec.rb +23 -0
- data/spec/lib/rails-settings-ui/value_types/boolean_spec.rb +10 -0
- data/spec/lib/rails-settings-ui/value_types/duration_spec.rb +19 -0
- data/spec/lib/rails-settings-ui/value_types/fixnum_spec.rb +17 -0
- data/spec/lib/rails-settings-ui/value_types/float_spec.rb +17 -0
- data/spec/lib/rails-settings-ui/value_types/hash_spec.rb +26 -0
- data/spec/lib/rails-settings-ui/value_types/string_spec.rb +10 -0
- data/spec/lib/rails-settings-ui/value_types/symbol_spec.rb +10 -0
- data/spec/spec_helper.rb +0 -1
- metadata +199 -55
- data/spec/lib/rails-settings-ui/settings_form_coercible_spec.rb +0 -136
- data/spec/lib/rails-settings-ui/settings_form_validator_spec.rb +0 -94
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cf201387248adc25655ab881e32b146940be2c850b604cc0057b4a7bf146183
|
4
|
+
data.tar.gz: 60e18da98e363ff116efa4d5584c10dfa58808d9fe41f5f8159ace32036e38d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17dd3a8f8b71639e620ee06672595f34d99011fdde606f600887b45ac40107519c1e6c0988435d24bc5b78a2954e9ebe44e3c03d3b9ce71f361c2fb92a96f6ef
|
7
|
+
data.tar.gz: ffe3ca3182d6d6d0ea8339b0666df35c009c6b8da7b973080b77fb545411df82ab4a7b5005199e68854c6d74c52dde5a5790f5b59371db60c4024218bd17d4f8
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
Rails settings UI
|
2
2
|
================================
|
3
3
|
|
4
|
-
[](https://codeclimate.com/github/accessd/rails-settings-ui)
|
7
|
-
[](https://codeclimate.com/github/accessd/rails-settings-ui/coverage)
|
4
|
+
[](https://rubygems.org/gems/rails-settings-ui)
|
5
|
+
[](https://github.com/accessd/rails-settings-cached/actions?query=workflow%3Abuild)
|
8
6
|
|
9
|
-
A Rails Engine to manage your application settings. Includes validation. Compatible with Rails
|
10
|
-
It
|
7
|
+
A Rails Engine to manage your application settings. Includes validation. Compatible with Rails 8.
|
8
|
+
It depends on [rails-settings-cached](https://github.com/huacnlee/rails-settings-cached) gem.
|
11
9
|
|
12
10
|
Preview:
|
13
11
|
|
14
12
|

|
15
13
|
|
16
|
-
Live example: http://rails-settings-ui.herokuapp.com/
|
17
|
-
|
18
14
|
How to
|
19
15
|
-----
|
20
16
|
|
@@ -22,16 +18,6 @@ Add to Gemfile
|
|
22
18
|
|
23
19
|
gem 'rails-settings-ui'
|
24
20
|
|
25
|
-
then add
|
26
|
-
|
27
|
-
gem 'rails-settings-cached'
|
28
|
-
|
29
|
-
or
|
30
|
-
|
31
|
-
gem 'rails-settings'
|
32
|
-
|
33
|
-
or your fork of rails-settings.
|
34
|
-
|
35
21
|
If you want to use bootstrap interface you need also include bootstrap stylesheets to your app.
|
36
22
|
You may use [bootstrap-sass](https://github.com/twbs/bootstrap-sass) gem for that.
|
37
23
|
|
@@ -115,55 +101,24 @@ if you don't specify labels in locale config, you'll get:
|
|
115
101
|
settings:
|
116
102
|
attributes:
|
117
103
|
launch_mode:
|
118
|
-
help_block: '
|
104
|
+
help_block: 'launch mode'
|
119
105
|
```
|
120
106
|
|
121
107
|
Validations
|
122
108
|
-------------
|
123
109
|
|
124
|
-
|
110
|
+
Validations work based on default value for setting or by explicitly specify type for setting, eg:
|
125
111
|
|
126
|
-
|
112
|
+
class Settings < RailsSettings::Base
|
113
|
+
cache_prefix { "v1" }
|
127
114
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
defaults[:launch_mode] = [:auto, :manual]
|
115
|
+
field :company_name, type: :string, default: "Company name"
|
116
|
+
field :head_name, default: "Head name"
|
117
|
+
field :manager_premium, default: 19
|
118
|
+
field :show_contract_fields, default: true
|
119
|
+
field :launch_mode, default: [:auto, :manual]
|
134
120
|
end
|
135
121
|
|
136
|
-
For rails-settings-cached with version >= 0.6.0 default settings moved to YAML config file (config/app.yml), so
|
137
|
-
defaults should looks like:
|
138
|
-
|
139
|
-
```yaml
|
140
|
-
defaults: &defaults
|
141
|
-
rocket_name: "Foo"
|
142
|
-
limit: 123
|
143
|
-
launch_mode:
|
144
|
-
- auto
|
145
|
-
- manual
|
146
|
-
spaceports:
|
147
|
-
- plesetsk
|
148
|
-
- baikonur
|
149
|
-
style:
|
150
|
-
border_color: 'e0e0e0'
|
151
|
-
block_color: 'ffffff'
|
152
|
-
title:
|
153
|
-
font: "Tahoma"
|
154
|
-
size: "12"
|
155
|
-
color: '107821'
|
156
|
-
|
157
|
-
development:
|
158
|
-
<<: *defaults
|
159
|
-
|
160
|
-
test:
|
161
|
-
<<: *defaults
|
162
|
-
|
163
|
-
production:
|
164
|
-
<<: *defaults
|
165
|
-
```
|
166
|
-
|
167
122
|
Views
|
168
123
|
-------------
|
169
124
|
|
@@ -192,10 +147,10 @@ Alternatively, to have custom rules just for rails-setting-ui you can:
|
|
192
147
|
|
193
148
|
Rails.application.config.to_prepare do
|
194
149
|
RailsSettingsUi::ApplicationController.module_eval do
|
195
|
-
|
196
|
-
before_action :check_settings_permissions # starting from Rails 4
|
150
|
+
before_action :check_settings_permissions
|
197
151
|
|
198
152
|
private
|
153
|
+
|
199
154
|
def check_settings_permissions
|
200
155
|
render status: 403 unless current_user && can_manage_settings?(current_user)
|
201
156
|
end
|
@@ -1,16 +1,24 @@
|
|
1
1
|
class RailsSettingsUi::SettingsController < RailsSettingsUi::ApplicationController
|
2
2
|
include RailsSettingsUi::SettingsHelper
|
3
3
|
before_action :collection
|
4
|
-
before_action :
|
4
|
+
before_action :cast_settings_params, only: :update_all
|
5
5
|
|
6
6
|
def index
|
7
7
|
end
|
8
8
|
|
9
9
|
def update_all
|
10
|
-
if @errors.any?
|
10
|
+
if @casted_settings[:errors].any?
|
11
|
+
@errors = @casted_settings[:errors]
|
11
12
|
render :index
|
12
13
|
else
|
13
|
-
|
14
|
+
@casted_settings.map do |name, value|
|
15
|
+
next if name == 'errors'
|
16
|
+
|
17
|
+
sc = RailsSettingsUi.setting_config(name)
|
18
|
+
next if sc[:readonly] == true
|
19
|
+
|
20
|
+
RailsSettingsUi.settings_klass.public_send("#{name}=", value)
|
21
|
+
end
|
14
22
|
flash[:success] = t('settings.index.settings_saved')
|
15
23
|
redirect_to [:settings]
|
16
24
|
end
|
@@ -19,23 +27,19 @@ class RailsSettingsUi::SettingsController < RailsSettingsUi::ApplicationControll
|
|
19
27
|
private
|
20
28
|
|
21
29
|
def collection
|
22
|
-
all_settings_without_ignored = all_settings.reject
|
30
|
+
all_settings_without_ignored = all_settings.reject do |name, _description|
|
31
|
+
RailsSettingsUi.ignored_settings.include?(name.to_sym)
|
32
|
+
end
|
23
33
|
@settings = Hash[all_settings_without_ignored]
|
24
34
|
@errors = {}
|
25
35
|
end
|
26
36
|
|
27
|
-
def
|
28
|
-
|
29
|
-
# ActionController::Parameters => ActiveSupport::HashWithIndifferentAccess
|
30
|
-
@errors = RailsSettingsUi::SettingsFormValidator.new(default_settings, settings_from_params).errors
|
31
|
-
end
|
32
|
-
|
33
|
-
def coerced_values
|
34
|
-
RailsSettingsUi::SettingsFormCoercible.new(default_settings, settings_from_params).coerce!
|
37
|
+
def cast_settings_params
|
38
|
+
@casted_settings = RailsSettingsUi::TypeConverter.cast(settings_from_params)
|
35
39
|
end
|
36
40
|
|
37
41
|
def settings_from_params
|
38
|
-
settings_params = params['settings'].deep_dup
|
42
|
+
settings_params = params['settings'].deep_dup || {}
|
39
43
|
if settings_params.respond_to?(:to_unsafe_h)
|
40
44
|
settings_params.to_unsafe_h
|
41
45
|
else
|
@@ -70,20 +70,15 @@ module RailsSettingsUi::SettingsHelper
|
|
70
70
|
content_tag(:span, I18n.t("settings.errors.default_missing"), class: "label label-warning")
|
71
71
|
end
|
72
72
|
|
73
|
-
def get_collection_method
|
74
|
-
case Rails::VERSION::STRING
|
75
|
-
when /4\.0\.\d+/ || /3\..*/
|
76
|
-
:all
|
77
|
-
else
|
78
|
-
:get_all
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
73
|
def default_value_for_setting(setting_name)
|
83
74
|
RailsSettingsUi.defaults_for_settings.with_indifferent_access[setting_name.to_sym]
|
84
75
|
end
|
85
76
|
|
86
77
|
def all_settings
|
87
|
-
RailsSettingsUi.settings_klass.public_send(
|
78
|
+
stored_settings = RailsSettingsUi.settings_klass.public_send(:all).each_with_object({}) do |s, hsh|
|
79
|
+
hsh[s.var] = s.value
|
80
|
+
end.with_indifferent_access
|
81
|
+
|
82
|
+
stored_settings.merge(RailsSettingsUi.default_settings.merge(stored_settings))
|
88
83
|
end
|
89
84
|
end
|
data/config/locales/en.yml
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
en:
|
2
2
|
errors:
|
3
|
-
|
4
|
-
|
5
|
-
float?: Invalid numeric
|
3
|
+
invalid_hash: Invalid hash
|
4
|
+
invalid_numeric: Invalid numeric
|
6
5
|
settings:
|
7
6
|
index:
|
8
7
|
title: Settings
|
@@ -10,6 +9,6 @@ en:
|
|
10
9
|
value: Value
|
11
10
|
save_all: Save all
|
12
11
|
settings_include_errors: Settings include errors
|
13
|
-
settings_saved: Settings saved
|
12
|
+
settings_saved: Settings saved successfully!
|
14
13
|
errors:
|
15
14
|
default_missing: Default value missing, but exists in db
|
@@ -42,10 +42,11 @@ module RailsSettingsUi
|
|
42
42
|
attr_reader :settings, :default_settings
|
43
43
|
attr_accessor :coerced_settings
|
44
44
|
|
45
|
+
integer_klass = defined?(Fixnum) ? Fixnum : Integer
|
45
46
|
COERCIONS_MAP = {
|
46
47
|
String => Types::Coercible::String,
|
47
48
|
Symbol => Types::CustomCoercions::Symbol,
|
48
|
-
|
49
|
+
integer_klass => Types::Params::Integer,
|
49
50
|
ActiveSupport::HashWithIndifferentAccess => Types::CustomCoercions::Hash,
|
50
51
|
ActiveSupport::Duration => Types::Params::Integer,
|
51
52
|
Float => Types::Params::Float,
|
@@ -19,8 +19,9 @@ module RailsSettingsUi
|
|
19
19
|
end
|
20
20
|
|
21
21
|
class SettingsFormValidator
|
22
|
+
integer_klass = defined?(Fixnum) ? Fixnum : Integer
|
22
23
|
VALIDATABLE_TYPES = {
|
23
|
-
|
24
|
+
integer_klass => :int?,
|
24
25
|
Float => :float?,
|
25
26
|
ActiveSupport::Duration => :int?,
|
26
27
|
ActiveSupport::HashWithIndifferentAccess => :form_hash?
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative "value_types/string"
|
2
|
+
require_relative "value_types/symbol"
|
3
|
+
require_relative "value_types/fixnum"
|
4
|
+
require_relative "value_types/hash"
|
5
|
+
require_relative "value_types/duration"
|
6
|
+
require_relative "value_types/float"
|
7
|
+
require_relative "value_types/array"
|
8
|
+
require_relative "value_types/boolean"
|
9
|
+
|
10
|
+
module RailsSettingsUi
|
11
|
+
class UnknownDefaultValueType < StandardError;end
|
12
|
+
|
13
|
+
class TypeConverter
|
14
|
+
integer_klass = defined?(Fixnum) ? Fixnum : Integer
|
15
|
+
VALUE_TYPES_MAP = {
|
16
|
+
String => RailsSettingsUi::ValueTypes::String,
|
17
|
+
Symbol => RailsSettingsUi::ValueTypes::Symbol,
|
18
|
+
integer_klass => RailsSettingsUi::ValueTypes::Fixnum,
|
19
|
+
# ActiveSupport::HashWithIndifferentAccess => RailsSettingsUi::ValueTypes::Hash,
|
20
|
+
ActiveSupport::Duration => RailsSettingsUi::ValueTypes::Float,
|
21
|
+
Float => RailsSettingsUi::ValueTypes::Float,
|
22
|
+
Array => RailsSettingsUi::ValueTypes::Array,
|
23
|
+
FalseClass => RailsSettingsUi::ValueTypes::Boolean,
|
24
|
+
TrueClass => RailsSettingsUi::ValueTypes::Boolean,
|
25
|
+
boolean: RailsSettingsUi::ValueTypes::Boolean,
|
26
|
+
string: RailsSettingsUi::ValueTypes::String,
|
27
|
+
integer: RailsSettingsUi::ValueTypes::Fixnum,
|
28
|
+
float: RailsSettingsUi::ValueTypes::Float,
|
29
|
+
array: RailsSettingsUi::ValueTypes::Array,
|
30
|
+
hash: RailsSettingsUi::ValueTypes::Hash
|
31
|
+
}
|
32
|
+
|
33
|
+
def self.cast(settings)
|
34
|
+
errors = {}
|
35
|
+
settings.each do |name, value|
|
36
|
+
sc = RailsSettingsUi.setting_config(name.to_s)
|
37
|
+
type = setting_value_type(name, value, sc)
|
38
|
+
settings[name] = type.cast
|
39
|
+
if type.errors.any?
|
40
|
+
errors[name.to_sym] = type.errors
|
41
|
+
end
|
42
|
+
end
|
43
|
+
settings = set_non_presented_settings(settings)
|
44
|
+
|
45
|
+
settings[:errors] = errors
|
46
|
+
settings
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.setting_value_type(name, value, setting_config)
|
50
|
+
default_setting_value_type = if setting_config[:type].nil? || setting_config[:type] == :string
|
51
|
+
setting_config[:default].class
|
52
|
+
else
|
53
|
+
setting_config[:type]
|
54
|
+
end
|
55
|
+
|
56
|
+
unless VALUE_TYPES_MAP.keys.include?(default_setting_value_type)
|
57
|
+
raise RailsSettingsUi::UnknownDefaultValueType,
|
58
|
+
"Unknown default value type #{default_setting_value_type} for #{name}"
|
59
|
+
end
|
60
|
+
|
61
|
+
# puts "--- #{name}: #{default_setting_value_type} ---"
|
62
|
+
setting_value_type_class = VALUE_TYPES_MAP[default_setting_value_type]
|
63
|
+
setting_value_type_class.new(value)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.set_non_presented_settings(settings)
|
67
|
+
RailsSettingsUi.default_settings.each do |name, value|
|
68
|
+
if !settings[name.to_sym].present?
|
69
|
+
if [TrueClass, FalseClass].include?(value.class)
|
70
|
+
settings[name.to_sym] = false
|
71
|
+
elsif [Array].include?(value.class)
|
72
|
+
settings[name.to_sym] = []
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
settings
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "base"
|
2
|
+
|
3
|
+
module RailsSettingsUi
|
4
|
+
module ValueTypes
|
5
|
+
class Array < RailsSettingsUi::ValueTypes::Base
|
6
|
+
def cast
|
7
|
+
# Array presented in checkboxes
|
8
|
+
if ["Hash", "ActiveSupport::HashWithIndifferentAccess"].include?(value.class.name)
|
9
|
+
value.keys.map!(&:to_sym)
|
10
|
+
elsif value.class.name == 'ActionController::Parameters'
|
11
|
+
value.reject{|_,v| v!='on' }.keys.map!(&:to_sym)
|
12
|
+
# or in select tag
|
13
|
+
else
|
14
|
+
value.to_sym
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RailsSettingsUi
|
2
|
+
module ValueTypes
|
3
|
+
class Base
|
4
|
+
attr_accessor :value, :errors
|
5
|
+
|
6
|
+
def initialize(value)
|
7
|
+
self.value = value
|
8
|
+
self.errors = []
|
9
|
+
validate
|
10
|
+
end
|
11
|
+
|
12
|
+
def cast
|
13
|
+
raise NotImplementedError
|
14
|
+
end
|
15
|
+
|
16
|
+
def valid?
|
17
|
+
!errors.any?
|
18
|
+
end
|
19
|
+
|
20
|
+
def value_numeric?
|
21
|
+
!value.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/).nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def validate
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative "base"
|
2
|
+
|
3
|
+
module RailsSettingsUi
|
4
|
+
module ValueTypes
|
5
|
+
class Duration < RailsSettingsUi::ValueTypes::Base
|
6
|
+
def cast
|
7
|
+
value.to_f.seconds
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate
|
11
|
+
unless value_numeric?
|
12
|
+
self.errors << I18n.t('errors.invalid_numeric', default: 'Invalid')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative "base"
|
2
|
+
|
3
|
+
module RailsSettingsUi
|
4
|
+
module ValueTypes
|
5
|
+
class Fixnum < RailsSettingsUi::ValueTypes::Base
|
6
|
+
def cast
|
7
|
+
value.to_i
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate
|
11
|
+
unless value_numeric?
|
12
|
+
self.errors << I18n.t('errors.invalid_numeric', default: 'Invalid')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative "base"
|
2
|
+
|
3
|
+
module RailsSettingsUi
|
4
|
+
module ValueTypes
|
5
|
+
class Float < RailsSettingsUi::ValueTypes::Base
|
6
|
+
def cast
|
7
|
+
value.to_f
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate
|
11
|
+
unless value_numeric?
|
12
|
+
self.errors << I18n.t('errors.invalid_numeric', default: 'Invalid')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "base"
|
2
|
+
|
3
|
+
module RailsSettingsUi
|
4
|
+
module ValueTypes
|
5
|
+
class Hash < RailsSettingsUi::ValueTypes::Base
|
6
|
+
def cast
|
7
|
+
value
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate
|
11
|
+
begin
|
12
|
+
self.value = JSON.parse(value.gsub(/\=\>/, ':'))
|
13
|
+
rescue JSON::ParserError => e
|
14
|
+
self.errors << I18n.t('errors.invalid_hash', default: 'Invalid')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/rails-settings-ui.rb
CHANGED
@@ -3,8 +3,7 @@ require 'rails-settings-ui/engine'
|
|
3
3
|
require 'rails-settings-ui/route_delegator'
|
4
4
|
require 'rails-settings-ui/version'
|
5
5
|
|
6
|
-
require "rails-settings-ui/
|
7
|
-
require "rails-settings-ui/settings_form_coercible"
|
6
|
+
require "rails-settings-ui/type_converter"
|
8
7
|
|
9
8
|
module RailsSettingsUi
|
10
9
|
mattr_accessor :parent_controller
|
@@ -45,12 +44,21 @@ module RailsSettingsUi
|
|
45
44
|
settings_class.constantize
|
46
45
|
end
|
47
46
|
|
47
|
+
def setting_config(name)
|
48
|
+
defined_fields = RailsSettingsUi.settings_klass.public_send(:all).defined_fields
|
49
|
+
defined_fields.find { |s| s[:key] == name }
|
50
|
+
end
|
51
|
+
|
48
52
|
def default_settings
|
49
|
-
|
50
|
-
|
53
|
+
rsc_version = Gem.loaded_specs['rails-settings-cached'].version.to_s
|
54
|
+
|
55
|
+
if rsc_version >= '2.7.0'
|
56
|
+
defined_fields = RailsSettingsUi.settings_klass.public_send(:all).defined_fields
|
57
|
+
settings = defined_fields.each_with_object({}) { |s, hsh| hsh[s[:key]] = s[:default] }.with_indifferent_access
|
51
58
|
settings.reject { |name, _description| ignored_settings.include?(name.to_sym) }
|
52
59
|
else
|
53
|
-
|
60
|
+
settings = RailsSettings::Default.instance.with_indifferent_access
|
61
|
+
settings.reject { |name, _description| ignored_settings.include?(name.to_sym) }
|
54
62
|
end
|
55
63
|
end
|
56
64
|
end
|
@@ -1,8 +1,12 @@
|
|
1
|
-
class Settings < RailsSettings::
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
class Settings < RailsSettings::Base
|
2
|
+
cache_prefix { "v1" }
|
3
|
+
|
4
|
+
field :project_name, type: :string, default: "Dummy"
|
5
|
+
scope :limits do
|
6
|
+
field :limit, type: :integer, default: 150
|
7
|
+
end
|
8
|
+
field :angle, type: :float, default: 0.5
|
9
|
+
field :style, type: :hash, default: {
|
6
10
|
border_color: 'e0e0e0',
|
7
11
|
block_color: 'ffffff',
|
8
12
|
title: {
|
@@ -11,10 +15,12 @@ class Settings < RailsSettings::CachedSettings
|
|
11
15
|
color: '107821'
|
12
16
|
}
|
13
17
|
}
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
field :check_something, type: :boolean, default: true
|
19
|
+
field :description, type: :string,
|
20
|
+
default: "But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful."
|
21
|
+
field :mode, type: :array, default: [:auto, :manual]
|
22
|
+
field :timer, default: 2.hours
|
23
|
+
field :project_status, default: :finished
|
24
|
+
field :locale, default: [:en, :ru]
|
25
|
+
field :readonly_item, type: :integer, default: 100, readonly: true
|
20
26
|
end
|
@@ -1,10 +1,14 @@
|
|
1
1
|
require File.expand_path('../boot', __FILE__)
|
2
2
|
|
3
3
|
# Pick the frameworks you want:
|
4
|
-
require "active_record/railtie"
|
5
|
-
require "action_controller/railtie"
|
6
|
-
require "action_mailer/railtie"
|
7
|
-
require "sprockets/railtie"
|
4
|
+
# require "active_record/railtie"
|
5
|
+
# require "action_controller/railtie"
|
6
|
+
# require "action_mailer/railtie"
|
7
|
+
# require "sprockets/railtie"
|
8
|
+
|
9
|
+
# Workaround for Rails 6 requiring Logger before ActiveSupport modules
|
10
|
+
require 'logger'
|
11
|
+
require 'rails/all'
|
8
12
|
# require "rails/test_unit/railtie"
|
9
13
|
|
10
14
|
Bundler.require(*Rails.groups)
|
@@ -25,4 +29,3 @@ module Dummy
|
|
25
29
|
config.i18n.default_locale = :en
|
26
30
|
end
|
27
31
|
end
|
28
|
-
|
@@ -25,5 +25,5 @@ Dummy::Application.configure do
|
|
25
25
|
# Debug mode disables concatenation and preprocessing of assets.
|
26
26
|
# This option may cause significant delays in view rendering with a large
|
27
27
|
# number of complex assets.
|
28
|
-
config.assets.debug = true
|
28
|
+
# config.assets.debug = true
|
29
29
|
end
|
@@ -33,4 +33,9 @@ Dummy::Application.configure do
|
|
33
33
|
|
34
34
|
# Print deprecation notices to the stderr.
|
35
35
|
config.active_support.deprecation = :stderr
|
36
|
+
|
37
|
+
# Allow unsafe YAML loading for tests with Rails >= 6
|
38
|
+
if defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:use_yaml_unsafe_load=)
|
39
|
+
ActiveRecord::Base.use_yaml_unsafe_load = true
|
40
|
+
end
|
36
41
|
end
|
Binary file
|