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.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -3
  3. data/README.md +15 -60
  4. data/app/controllers/rails_settings_ui/settings_controller.rb +17 -13
  5. data/app/helpers/rails_settings_ui/settings_helper.rb +5 -10
  6. data/config/locales/en.yml +3 -4
  7. data/lib/rails-settings-ui/engine.rb +0 -1
  8. data/lib/rails-settings-ui/settings_form_coercible.rb +2 -1
  9. data/lib/rails-settings-ui/settings_form_validator.rb +2 -1
  10. data/lib/rails-settings-ui/type_converter.rb +79 -0
  11. data/lib/rails-settings-ui/value_types/array.rb +19 -0
  12. data/lib/rails-settings-ui/value_types/base.rb +30 -0
  13. data/lib/rails-settings-ui/value_types/boolean.rb +16 -0
  14. data/lib/rails-settings-ui/value_types/duration.rb +17 -0
  15. data/lib/rails-settings-ui/value_types/fixnum.rb +17 -0
  16. data/lib/rails-settings-ui/value_types/float.rb +17 -0
  17. data/lib/rails-settings-ui/value_types/hash.rb +19 -0
  18. data/lib/rails-settings-ui/value_types/string.rb +11 -0
  19. data/lib/rails-settings-ui/value_types/symbol.rb +11 -0
  20. data/lib/rails-settings-ui/version.rb +1 -1
  21. data/lib/rails-settings-ui.rb +13 -5
  22. data/spec/dummy/app/assets/config/manifest.js +3 -0
  23. data/spec/dummy/app/models/settings.rb +17 -11
  24. data/spec/dummy/config/application.rb +8 -5
  25. data/spec/dummy/config/environments/development.rb +1 -1
  26. data/spec/dummy/config/environments/test.rb +5 -0
  27. data/spec/dummy/db/development.sqlite3 +0 -0
  28. data/spec/dummy/log/development.log +204 -0
  29. data/spec/dummy/log/test.log +17721 -0
  30. data/spec/dummy/tmp/cache/983/850/rails-settings-cached%2Fv1 +0 -0
  31. data/spec/dummy/tmp/cache/B43/920/rails_settings_cached%3Aangle +1 -0
  32. data/spec/dummy/tmp/cache/B5B/D00/rails_settings_cached%3Alimit +1 -0
  33. data/spec/dummy/tmp/cache/C33/A30/rails_settings_cached%3Acompany +2 -0
  34. data/spec/dummy/tmp/cache/E33/F60/rails_settings_cached%3Aproject_name +2 -0
  35. data/spec/dummy/tmp/capybara/capybara-202210171734284469945531.html +149 -0
  36. data/spec/dummy/tmp/capybara/capybara-202210171737204973407096.html +149 -0
  37. data/spec/dummy/tmp/capybara/capybara-202210171748434956557154.html +149 -0
  38. data/spec/dummy/tmp/capybara/capybara-202210171748436975538759.html +149 -0
  39. data/spec/dummy/tmp/capybara/capybara-202210171750314291147778.html +149 -0
  40. data/spec/dummy/tmp/capybara/capybara-20221017175031820707857.html +149 -0
  41. data/spec/dummy/tmp/capybara/capybara-202210171753008459837645.html +149 -0
  42. data/spec/dummy/tmp/capybara/capybara-202210171852063304179945.html +149 -0
  43. data/spec/dummy/tmp/capybara/capybara-202210171856426164369905.html +149 -0
  44. data/spec/dummy/tmp/capybara/capybara-202210171858321617647144.html +146 -0
  45. data/spec/dummy/tmp/capybara/capybara-202210171859225748767967.html +149 -0
  46. data/spec/dummy/tmp/capybara/capybara-202210171900593853637022.html +149 -0
  47. data/spec/dummy/tmp/capybara/capybara-202210171905425563856340.html +149 -0
  48. data/spec/dummy/tmp/capybara/capybara-202210171906453524726761.html +149 -0
  49. data/spec/dummy/tmp/capybara/capybara-202210171907021196417641.html +149 -0
  50. data/spec/dummy/tmp/capybara/capybara-202210171907177584260273.html +149 -0
  51. data/spec/dummy/tmp/capybara/capybara-202210171908598155484313.html +146 -0
  52. data/spec/dummy/tmp/capybara/capybara-202210171910151128908606.html +149 -0
  53. data/spec/dummy/tmp/capybara/capybara-202210171910335167198647.html +149 -0
  54. data/spec/dummy/tmp/capybara/capybara-20221017191603669584955.html +149 -0
  55. data/spec/dummy/tmp/capybara/capybara-202210171923383386177630.html +149 -0
  56. data/spec/dummy/tmp/capybara/capybara-20221017192440932299839.html +149 -0
  57. data/spec/dummy/tmp/capybara/capybara-202210171925398582267473.html +149 -0
  58. data/spec/dummy/tmp/capybara/capybara-202210171926266453882118.html +149 -0
  59. data/spec/dummy/tmp/capybara/capybara-202210171927092397731872.html +149 -0
  60. data/spec/dummy/tmp/capybara/capybara-202210171927096856622887.html +149 -0
  61. data/spec/dummy/tmp/capybara/capybara-20221017192857430966358.html +149 -0
  62. data/spec/dummy/tmp/capybara/capybara-20221017192857715946316.html +149 -0
  63. data/spec/dummy/tmp/capybara/capybara-202210171929344449627309.html +148 -0
  64. data/spec/dummy/tmp/capybara/capybara-202210171929349483966535.html +148 -0
  65. data/spec/dummy/tmp/capybara/capybara-202210171931514543176977.html +149 -0
  66. data/spec/dummy/tmp/capybara/capybara-202210171931516552014196.html +149 -0
  67. data/spec/dummy/tmp/capybara/capybara-202210171933532109133909.html +148 -0
  68. data/spec/dummy/tmp/capybara/capybara-202210171933538239745721.html +148 -0
  69. data/spec/dummy/tmp/capybara/capybara-202210171934252299363012.html +148 -0
  70. data/spec/dummy/tmp/capybara/capybara-202210171934257507814102.html +148 -0
  71. data/spec/dummy/tmp/capybara/capybara-202210171935002341486006.html +148 -0
  72. data/spec/dummy/tmp/capybara/capybara-202210171935003194509488.html +148 -0
  73. data/spec/dummy/tmp/capybara/capybara-202210171935191080772264.html +149 -0
  74. data/spec/dummy/tmp/capybara/capybara-20221017193519504184564.html +148 -0
  75. data/spec/dummy/tmp/capybara/capybara-202210171935494419345825.html +148 -0
  76. data/spec/dummy/tmp/capybara/capybara-202210171935495077855617.html +149 -0
  77. data/spec/dummy/tmp/capybara/capybara-202210171935512244046619.html +149 -0
  78. data/spec/dummy/tmp/capybara/capybara-202210171935515471773291.html +148 -0
  79. data/spec/dummy/tmp/capybara/capybara-20221017193621299357586.html +148 -0
  80. data/spec/dummy/tmp/capybara/capybara-202210171936214576498840.html +149 -0
  81. data/spec/dummy/tmp/capybara/capybara-202210171943053342669430.html +149 -0
  82. data/spec/dummy/tmp/capybara/capybara-202210171943054897250624.html +148 -0
  83. data/spec/dummy/tmp/capybara/capybara-202210171943172523615452.html +148 -0
  84. data/spec/dummy/tmp/capybara/capybara-202210171943176449343696.html +149 -0
  85. data/spec/dummy/tmp/capybara/capybara-202210171944092904892605.html +149 -0
  86. data/spec/dummy/tmp/capybara/capybara-202210171944096476035010.html +148 -0
  87. data/spec/features/settings_spec.rb +9 -8
  88. data/spec/lib/rails-settings-ui/type_converter_spec.rb +43 -0
  89. data/spec/lib/rails-settings-ui/value_types/array_spec.rb +21 -0
  90. data/spec/lib/rails-settings-ui/value_types/base_spec.rb +23 -0
  91. data/spec/lib/rails-settings-ui/value_types/boolean_spec.rb +10 -0
  92. data/spec/lib/rails-settings-ui/value_types/duration_spec.rb +19 -0
  93. data/spec/lib/rails-settings-ui/value_types/fixnum_spec.rb +17 -0
  94. data/spec/lib/rails-settings-ui/value_types/float_spec.rb +17 -0
  95. data/spec/lib/rails-settings-ui/value_types/hash_spec.rb +26 -0
  96. data/spec/lib/rails-settings-ui/value_types/string_spec.rb +10 -0
  97. data/spec/lib/rails-settings-ui/value_types/symbol_spec.rb +10 -0
  98. data/spec/spec_helper.rb +0 -1
  99. metadata +199 -55
  100. data/spec/lib/rails-settings-ui/settings_form_coercible_spec.rb +0 -136
  101. data/spec/lib/rails-settings-ui/settings_form_validator_spec.rb +0 -94
@@ -1,136 +0,0 @@
1
- describe RailsSettingsUi::SettingsFormCoercible do
2
-
3
- describe "#coerce!" do
4
- context 'integer' do
5
- it do
6
- expect(coerce('limit' => '123')).to eq(123)
7
- end
8
- end
9
-
10
- context 'float' do
11
- it do
12
- expect(coerce('angle' => '45.5')).to eq(45.5)
13
- expect(coerce('angle' => '45')).to eq(45.0)
14
- end
15
- end
16
-
17
- context 'string' do
18
- it do
19
- expect(coerce('project_name' => 'rsu')).to eq('rsu')
20
- end
21
- end
22
-
23
- context 'symbol' do
24
- it do
25
- expect(coerce('project_status' => 'pending')).to eq(:pending)
26
- end
27
- end
28
-
29
- context 'ActiveSupport::Duration' do
30
- it do
31
- expect(coerce('timer' => '600')).to eq(600)
32
- end
33
- end
34
-
35
- context 'hash' do
36
- it do
37
- expect(coerce('style' => JSON.generate(sample_hash))).to eq(sample_hash)
38
- end
39
- end
40
-
41
- context 'array' do
42
- it 'hash as array of keys as symbols' do
43
- expect(coerce('mode' => {auto: "on", manual: "on"})).to eq([:auto, :manual])
44
- expect(coerce('mode' => {})).to eq([])
45
- end
46
-
47
- it "if setting presented as select should coerce selected value as symbol" do
48
- expect(coerce('mode' => "auto")).to eq(:auto)
49
- end
50
-
51
- it "should accept ActionController::Parameters" do
52
- param = ActionController::Parameters.new('auto' => 'on', 'manual'=> 'off')
53
- expect(coerce('mode' => param)).to eq([:auto])
54
- end
55
- end
56
-
57
- context 'boolean' do
58
- it 'true' do
59
- expect(coerce('check_something' => 'on')).to eq(true)
60
- expect(coerce('check_something' => 'true')).to eq(true)
61
- end
62
-
63
- it 'false' do
64
- expect(coerce('check_something' => 'off')).to eq(false)
65
- expect(coerce('check_something' => 'false')).to eq(false)
66
- end
67
- end
68
-
69
- describe 'not coercible' do
70
- it 'raise exception' do
71
- Settings.defaults[:project_name] = nil
72
- expect do
73
- coerce('project_name' => 'rsu')
74
- end.to raise_error(RailsSettingsUi::NotCoercibleError)
75
- Settings.defaults[:project_name] = "Dummy"
76
- end
77
- end
78
-
79
- describe 'if setting not passed and default value type' do
80
- it 'is boolean then should have to set value to false' do
81
- Settings.defaults[:check_something] = true
82
- expect(build_coercion({}).coerce![:check_something]).to eq(false)
83
- end
84
-
85
- it 'is array then should have to set value to empty array' do
86
- Settings.defaults[:check_something] = [:auto, :manual]
87
- expect(build_coercion({}).coerce![:mode]).to eq([])
88
- Settings.defaults[:check_something] = true
89
- end
90
- end
91
-
92
- end
93
-
94
- begin 'Helper methods'
95
-
96
- def coerce(settings)
97
- @coerced_settings = build_coercion(settings_form.merge(settings)).coerce!
98
- return @coerced_settings unless settings.keys.first
99
- @coerced_settings[settings.keys.first.to_sym]
100
- end
101
-
102
- def build_coercion(settings)
103
- described_class.new(
104
- Settings.defaults,
105
- settings
106
- )
107
- end
108
-
109
- def settings_form
110
- {
111
- 'limit' => '123',
112
- 'angle' => '0.5',
113
- 'project_name' => 'qwe',
114
- 'check_something' => 'on',
115
- 'style' => JSON.generate(sample_hash),
116
- 'timer' => '1800',
117
- 'mode' => {auto: "on", manual: "on"},
118
- 'project_status' => 'in_process'
119
- }
120
- end
121
-
122
- def sample_hash
123
- {
124
- "border_color" => "e0e0e0",
125
- "block_color" => "ffffff",
126
- "title" => {
127
- "font" => "Tahoma",
128
- "size" => "12",
129
- "color" => "107821"
130
- }
131
- }
132
- end
133
-
134
- end
135
-
136
- end
@@ -1,94 +0,0 @@
1
- describe RailsSettingsUi::SettingsFormValidator do
2
-
3
- describe "#errors" do
4
- context 'integer' do
5
- it 'success' do
6
- expect_without_errors('limit' => '123')
7
- end
8
-
9
- it 'fail' do
10
- expect_with_error('limit' => 'asq')
11
- end
12
- end
13
-
14
- context 'float' do
15
- it 'success' do
16
- expect_without_errors('angle' => '30.5')
17
- expect_without_errors('angle' => '30')
18
- end
19
-
20
- it 'fail' do
21
- expect_with_error('angle' => 'asq')
22
- end
23
- end
24
-
25
- context 'ActiveSupport::Duration' do
26
- it 'success' do
27
- expect_without_errors('timer' => 5.hours.to_s)
28
- end
29
-
30
- it 'fail' do
31
- expect_with_error('timer' => 'one hour')
32
- end
33
- end
34
-
35
- context 'hash' do
36
- it 'success' do
37
- expect_without_errors('style' => sample_hash)
38
- end
39
-
40
- it 'fail' do
41
- expect_with_error('style' => 'wtf')
42
- expect_with_error('style' => '{test: 123}')
43
- expect_with_error('style' => "{\"border_color\"=>, \"block_color\"=>\"ffffff\"""}")
44
- end
45
- end
46
- end
47
-
48
- begin 'Helper methods'
49
-
50
- def expect_without_errors(settings)
51
- expect(errors(settings)).to be_empty
52
- end
53
-
54
- def expect_with_error(settings)
55
- expect(errors(settings)).to have_key(settings.keys.first.to_sym)
56
- end
57
-
58
- def errors(settings)
59
- build_validator(settings_form.merge(settings)).errors
60
- end
61
-
62
- def build_validator(settings)
63
- validator = described_class.new(
64
- Settings.defaults,
65
- settings
66
- )
67
- end
68
-
69
- def settings_form
70
- {
71
- 'limit' => '123',
72
- 'angle' => '0.5',
73
- 'project_name' => 'qwe',
74
- 'style' => sample_hash,
75
- 'timer' => '1800'
76
- }
77
- end
78
-
79
- def sample_hash
80
- hash = {
81
- "border_color" => "e0e0e0",
82
- "block_color" => "ffffff",
83
- "title" => {
84
- "font" => "Tahoma",
85
- "size" => "12",
86
- "color" => "107821"
87
- }
88
- }
89
- JSON.generate hash
90
- end
91
-
92
- end
93
-
94
- end