rails_admin_settings 1.3.2 → 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 +5 -5
- data/.travis.yml +4 -1
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +106 -103
- data/README.md +21 -3
- data/app/views/rails_admin/main/_setting_value.html.haml +3 -3
- data/config/locales/en.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/gemfiles/{mongoid-6.1.gemfile → mongoid-6.3.gemfile} +1 -1
- data/lib/rails_admin_settings.rb +5 -0
- data/lib/rails_admin_settings/kinds.rb +7 -1
- data/lib/rails_admin_settings/processing.rb +59 -10
- data/lib/rails_admin_settings/require_helpers.rb +20 -0
- data/lib/rails_admin_settings/settings.rb +6 -2
- data/lib/rails_admin_settings/storage/{carrierwave.rb → carrier_wave_uploader.rb} +2 -2
- data/lib/rails_admin_settings/tasks.rb +1 -1
- data/lib/rails_admin_settings/uploads.rb +13 -12
- data/lib/rails_admin_settings/validation.rb +11 -1
- data/lib/rails_admin_settings/version.rb +1 -1
- data/log/development.log +0 -0
- data/rails_admin_settings.gemspec +2 -2
- data/spec/defaults_spec.rb +6 -6
- data/spec/factories/setting.rb +1 -1
- data/spec/label_spec.rb +0 -2
- data/spec/migration_spec.rb +4 -4
- data/spec/model_spec.rb +68 -8
- data/spec/paperclip_spec.rb +0 -1
- data/spec/settings_spec.rb +1 -1
- data/spec/spec_helper.rb +31 -2
- data/spec/types_spec.rb +12 -6
- metadata +9 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 2c3a2cc5a5dd0c4e77f1e05ef1447698edde1ba25344fc2e5baea2dc7c686427
|
|
4
|
+
data.tar.gz: 753783ad33100ef2d26891da3ecb909768f2b4c9e86242d1fedd44b388ee02ec
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b8b2f3ac4d7218bd0840aba1965f499f5b56d4a0bb0f30a1e36cdb3ac411ab19e620cfc7c769989d66eab63fd7efd06c1a7356e21e1a3bd96e5f441ebd492ad0
|
|
7
|
+
data.tar.gz: 306df770d677bee42028699ded628aed3339aad936837383aefa2257cfe79badbdcbcfde7c618f745dd692b2d4a1d78c2254c2622f5dcca2f3596194f98a2f78
|
data/.travis.yml
CHANGED
|
@@ -6,12 +6,15 @@ notifications:
|
|
|
6
6
|
|
|
7
7
|
rvm:
|
|
8
8
|
- 2.3.3
|
|
9
|
+
- 2.5.0
|
|
9
10
|
|
|
10
11
|
env:
|
|
11
12
|
- "UPLOADS=paperclip"
|
|
12
13
|
- "UPLOADS=carrierwave"
|
|
14
|
+
- "RAILS=1 UPLOADS=paperclip"
|
|
15
|
+
- "RAILS=1 UPLOADS=carrierwave"
|
|
13
16
|
|
|
14
17
|
gemfile:
|
|
15
18
|
- gemfiles/mongoid-6.0.gemfile
|
|
16
|
-
- gemfiles/mongoid-6.
|
|
19
|
+
- gemfiles/mongoid-6.3.gemfile
|
|
17
20
|
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## 1.4.0
|
|
2
|
+
|
|
3
|
+
Add new kinds
|
|
4
|
+
|
|
5
|
+
strip_tags (uses strip_tags rails helper)
|
|
6
|
+
simple_format (uses simple_format rails helper)
|
|
7
|
+
simple_format_raw (does NOT sanitize (allows ANY javascript) - uses simple_format rails helper with sanitize: false)
|
|
8
|
+
json
|
|
9
|
+
|
|
10
|
+
Use Psych.safe_load for yaml if available
|
|
11
|
+
|
|
1
12
|
## 1.3.1
|
|
2
13
|
|
|
3
14
|
add pt-BR locale (thanks @prem-prakash)
|
data/Gemfile.lock
CHANGED
|
@@ -1,190 +1,193 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rails_admin_settings (1.
|
|
4
|
+
rails_admin_settings (1.4.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
actioncable (5.1.
|
|
10
|
-
actionpack (= 5.1.
|
|
9
|
+
actioncable (5.1.5)
|
|
10
|
+
actionpack (= 5.1.5)
|
|
11
11
|
nio4r (~> 2.0)
|
|
12
12
|
websocket-driver (~> 0.6.1)
|
|
13
|
-
actionmailer (5.1.
|
|
14
|
-
actionpack (= 5.1.
|
|
15
|
-
actionview (= 5.1.
|
|
16
|
-
activejob (= 5.1.
|
|
13
|
+
actionmailer (5.1.5)
|
|
14
|
+
actionpack (= 5.1.5)
|
|
15
|
+
actionview (= 5.1.5)
|
|
16
|
+
activejob (= 5.1.5)
|
|
17
17
|
mail (~> 2.5, >= 2.5.4)
|
|
18
18
|
rails-dom-testing (~> 2.0)
|
|
19
|
-
actionpack (5.1.
|
|
20
|
-
actionview (= 5.1.
|
|
21
|
-
activesupport (= 5.1.
|
|
19
|
+
actionpack (5.1.5)
|
|
20
|
+
actionview (= 5.1.5)
|
|
21
|
+
activesupport (= 5.1.5)
|
|
22
22
|
rack (~> 2.0)
|
|
23
|
-
rack-test (
|
|
23
|
+
rack-test (>= 0.6.3)
|
|
24
24
|
rails-dom-testing (~> 2.0)
|
|
25
25
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
26
|
-
actionview (5.1.
|
|
27
|
-
activesupport (= 5.1.
|
|
26
|
+
actionview (5.1.5)
|
|
27
|
+
activesupport (= 5.1.5)
|
|
28
28
|
builder (~> 3.1)
|
|
29
29
|
erubi (~> 1.4)
|
|
30
30
|
rails-dom-testing (~> 2.0)
|
|
31
31
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
|
32
|
-
activejob (5.1.
|
|
33
|
-
activesupport (= 5.1.
|
|
32
|
+
activejob (5.1.5)
|
|
33
|
+
activesupport (= 5.1.5)
|
|
34
34
|
globalid (>= 0.3.6)
|
|
35
|
-
activemodel (5.1.
|
|
36
|
-
activesupport (= 5.1.
|
|
37
|
-
activerecord (5.1.
|
|
38
|
-
activemodel (= 5.1.
|
|
39
|
-
activesupport (= 5.1.
|
|
35
|
+
activemodel (5.1.5)
|
|
36
|
+
activesupport (= 5.1.5)
|
|
37
|
+
activerecord (5.1.5)
|
|
38
|
+
activemodel (= 5.1.5)
|
|
39
|
+
activesupport (= 5.1.5)
|
|
40
40
|
arel (~> 8.0)
|
|
41
|
-
activesupport (5.1.
|
|
41
|
+
activesupport (5.1.5)
|
|
42
42
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
43
43
|
i18n (~> 0.7)
|
|
44
44
|
minitest (~> 5.1)
|
|
45
45
|
tzinfo (~> 1.1)
|
|
46
|
-
addressable (2.5.
|
|
47
|
-
public_suffix (
|
|
46
|
+
addressable (2.5.2)
|
|
47
|
+
public_suffix (>= 2.0.2, < 4.0)
|
|
48
48
|
arel (8.0.0)
|
|
49
|
-
bson (4.
|
|
49
|
+
bson (4.3.0)
|
|
50
50
|
builder (3.2.3)
|
|
51
|
-
carrierwave (
|
|
52
|
-
activemodel (>=
|
|
53
|
-
activesupport (>=
|
|
54
|
-
json (>= 1.7)
|
|
51
|
+
carrierwave (1.2.2)
|
|
52
|
+
activemodel (>= 4.0.0)
|
|
53
|
+
activesupport (>= 4.0.0)
|
|
55
54
|
mime-types (>= 1.16)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
carrierwave (>= 0.8.0, < 0.12.0)
|
|
55
|
+
carrierwave-mongoid (1.0.0)
|
|
56
|
+
carrierwave (>= 0.8, < 1.3)
|
|
59
57
|
mongoid (>= 3.0, < 7.0)
|
|
60
58
|
mongoid-grid_fs (>= 1.3, < 3.0)
|
|
61
59
|
climate_control (0.2.0)
|
|
62
60
|
cocaine (0.5.8)
|
|
63
61
|
climate_control (>= 0.0.3, < 1.0)
|
|
64
|
-
coderay (1.1.
|
|
62
|
+
coderay (1.1.2)
|
|
65
63
|
concurrent-ruby (1.0.5)
|
|
66
|
-
crass (1.0.
|
|
67
|
-
database_cleaner (1.6.
|
|
64
|
+
crass (1.0.3)
|
|
65
|
+
database_cleaner (1.6.2)
|
|
68
66
|
diff-lcs (1.3)
|
|
69
67
|
docile (1.1.5)
|
|
70
|
-
erubi (1.
|
|
71
|
-
|
|
68
|
+
erubi (1.7.1)
|
|
69
|
+
factory_bot (4.8.2)
|
|
72
70
|
activesupport (>= 3.0.0)
|
|
73
|
-
geocoder (1.4.
|
|
74
|
-
globalid (0.4.
|
|
71
|
+
geocoder (1.4.6)
|
|
72
|
+
globalid (0.4.1)
|
|
75
73
|
activesupport (>= 4.2.0)
|
|
76
|
-
i18n (0.
|
|
74
|
+
i18n (0.9.5)
|
|
75
|
+
concurrent-ruby (~> 1.0)
|
|
77
76
|
json (2.1.0)
|
|
78
|
-
loofah (2.0
|
|
77
|
+
loofah (2.2.0)
|
|
78
|
+
crass (~> 1.0.2)
|
|
79
79
|
nokogiri (>= 1.5.9)
|
|
80
|
-
mail (2.
|
|
81
|
-
|
|
82
|
-
method_source (0.
|
|
80
|
+
mail (2.7.0)
|
|
81
|
+
mini_mime (>= 0.1.1)
|
|
82
|
+
method_source (0.9.0)
|
|
83
83
|
mime-types (3.1)
|
|
84
84
|
mime-types-data (~> 3.2015)
|
|
85
85
|
mime-types-data (3.2016.0521)
|
|
86
86
|
mimemagic (0.3.2)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
mini_mime (1.0.0)
|
|
88
|
+
mini_portile2 (2.3.0)
|
|
89
|
+
minitest (5.11.3)
|
|
90
|
+
mongo (2.5.1)
|
|
91
|
+
bson (>= 4.3.0, < 5.0.0)
|
|
92
|
+
mongoid (6.3.0)
|
|
92
93
|
activemodel (~> 5.1)
|
|
93
|
-
mongo (>= 2.
|
|
94
|
+
mongo (>= 2.5.0, < 3.0.0)
|
|
95
|
+
mongoid-compatibility (0.5.1)
|
|
96
|
+
activesupport
|
|
97
|
+
mongoid (>= 2.0)
|
|
94
98
|
mongoid-grid_fs (2.3.0)
|
|
95
99
|
mime-types (>= 1.0, < 4.0)
|
|
96
100
|
mongoid (>= 3.0, < 7.0)
|
|
97
101
|
mongoid-paperclip (0.0.11)
|
|
98
102
|
mongoid
|
|
99
103
|
paperclip (>= 2.3.6, != 4.3.0)
|
|
100
|
-
mongoid-rspec (
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
mongoid-rspec (4.0.0)
|
|
105
|
+
activesupport (>= 3.0.0)
|
|
106
|
+
mongoid (>= 2.0)
|
|
107
|
+
mongoid-compatibility
|
|
108
|
+
rspec (~> 3.3)
|
|
109
|
+
nio4r (2.2.0)
|
|
110
|
+
nokogiri (1.8.2)
|
|
111
|
+
mini_portile2 (~> 2.3.0)
|
|
112
|
+
nokogumbo (1.5.0)
|
|
108
113
|
nokogiri
|
|
109
|
-
paperclip (5.1
|
|
114
|
+
paperclip (5.2.1)
|
|
110
115
|
activemodel (>= 4.2.0)
|
|
111
116
|
activesupport (>= 4.2.0)
|
|
112
117
|
cocaine (~> 0.5.5)
|
|
113
118
|
mime-types
|
|
114
119
|
mimemagic (~> 0.3.0)
|
|
115
|
-
pry (0.
|
|
120
|
+
pry (0.11.3)
|
|
116
121
|
coderay (~> 1.1.0)
|
|
117
|
-
method_source (~> 0.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
rack (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
railties (= 5.1.1)
|
|
122
|
+
method_source (~> 0.9.0)
|
|
123
|
+
public_suffix (3.0.2)
|
|
124
|
+
rack (2.0.4)
|
|
125
|
+
rack-test (0.8.3)
|
|
126
|
+
rack (>= 1.0, < 3)
|
|
127
|
+
rails (5.1.5)
|
|
128
|
+
actioncable (= 5.1.5)
|
|
129
|
+
actionmailer (= 5.1.5)
|
|
130
|
+
actionpack (= 5.1.5)
|
|
131
|
+
actionview (= 5.1.5)
|
|
132
|
+
activejob (= 5.1.5)
|
|
133
|
+
activemodel (= 5.1.5)
|
|
134
|
+
activerecord (= 5.1.5)
|
|
135
|
+
activesupport (= 5.1.5)
|
|
136
|
+
bundler (>= 1.3.0)
|
|
137
|
+
railties (= 5.1.5)
|
|
134
138
|
sprockets-rails (>= 2.0.0)
|
|
135
139
|
rails-dom-testing (2.0.3)
|
|
136
140
|
activesupport (>= 4.2.0)
|
|
137
141
|
nokogiri (>= 1.6)
|
|
138
142
|
rails-html-sanitizer (1.0.3)
|
|
139
143
|
loofah (~> 2.0)
|
|
140
|
-
railties (5.1.
|
|
141
|
-
actionpack (= 5.1.
|
|
142
|
-
activesupport (= 5.1.
|
|
144
|
+
railties (5.1.5)
|
|
145
|
+
actionpack (= 5.1.5)
|
|
146
|
+
activesupport (= 5.1.5)
|
|
143
147
|
method_source
|
|
144
148
|
rake (>= 0.8.7)
|
|
145
149
|
thor (>= 0.18.1, < 2.0)
|
|
146
|
-
rake (12.
|
|
147
|
-
rspec (3.
|
|
148
|
-
rspec-core (~> 3.
|
|
149
|
-
rspec-expectations (~> 3.
|
|
150
|
-
rspec-mocks (~> 3.
|
|
151
|
-
rspec-core (3.
|
|
152
|
-
rspec-support (~> 3.
|
|
153
|
-
rspec-expectations (3.
|
|
150
|
+
rake (12.3.0)
|
|
151
|
+
rspec (3.7.0)
|
|
152
|
+
rspec-core (~> 3.7.0)
|
|
153
|
+
rspec-expectations (~> 3.7.0)
|
|
154
|
+
rspec-mocks (~> 3.7.0)
|
|
155
|
+
rspec-core (3.7.1)
|
|
156
|
+
rspec-support (~> 3.7.0)
|
|
157
|
+
rspec-expectations (3.7.0)
|
|
154
158
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
155
|
-
rspec-support (~> 3.
|
|
156
|
-
rspec-mocks (3.
|
|
159
|
+
rspec-support (~> 3.7.0)
|
|
160
|
+
rspec-mocks (3.7.0)
|
|
157
161
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
158
|
-
rspec-support (~> 3.
|
|
159
|
-
rspec-support (3.
|
|
162
|
+
rspec-support (~> 3.7.0)
|
|
163
|
+
rspec-support (3.7.1)
|
|
160
164
|
russian_phone (0.6.0)
|
|
161
165
|
safe_yaml (1.0.4)
|
|
162
|
-
sanitize (4.
|
|
166
|
+
sanitize (4.6.0)
|
|
163
167
|
crass (~> 1.0.2)
|
|
164
168
|
nokogiri (>= 1.4.4)
|
|
165
|
-
nokogumbo (~> 1.4
|
|
166
|
-
simplecov (0.
|
|
169
|
+
nokogumbo (~> 1.4)
|
|
170
|
+
simplecov (0.15.1)
|
|
167
171
|
docile (~> 1.1.0)
|
|
168
172
|
json (>= 1.8, < 3)
|
|
169
173
|
simplecov-html (~> 0.10.0)
|
|
170
|
-
simplecov-html (0.10.
|
|
171
|
-
slop (3.6.0)
|
|
174
|
+
simplecov-html (0.10.2)
|
|
172
175
|
sprockets (3.7.1)
|
|
173
176
|
concurrent-ruby (~> 1.0)
|
|
174
177
|
rack (> 1, < 3)
|
|
175
|
-
sprockets-rails (3.2.
|
|
178
|
+
sprockets-rails (3.2.1)
|
|
176
179
|
actionpack (>= 4.0)
|
|
177
180
|
activesupport (>= 4.0)
|
|
178
181
|
sprockets (>= 3.0.0)
|
|
179
|
-
thor (0.
|
|
182
|
+
thor (0.20.0)
|
|
180
183
|
thread_safe (0.3.6)
|
|
181
|
-
tzinfo (1.2.
|
|
184
|
+
tzinfo (1.2.5)
|
|
182
185
|
thread_safe (~> 0.1)
|
|
183
186
|
validates_email_format_of (1.6.3)
|
|
184
187
|
i18n
|
|
185
188
|
websocket-driver (0.6.5)
|
|
186
189
|
websocket-extensions (>= 0.1.0)
|
|
187
|
-
websocket-extensions (0.1.
|
|
190
|
+
websocket-extensions (0.1.3)
|
|
188
191
|
|
|
189
192
|
PLATFORMS
|
|
190
193
|
ruby
|
|
@@ -194,9 +197,9 @@ DEPENDENCIES
|
|
|
194
197
|
bundler
|
|
195
198
|
carrierwave-mongoid
|
|
196
199
|
database_cleaner
|
|
197
|
-
|
|
200
|
+
factory_bot
|
|
198
201
|
geocoder
|
|
199
|
-
mongoid (~> 6.
|
|
202
|
+
mongoid (~> 6.3)
|
|
200
203
|
mongoid-paperclip
|
|
201
204
|
mongoid-rspec
|
|
202
205
|
pry
|
|
@@ -211,4 +214,4 @@ DEPENDENCIES
|
|
|
211
214
|
validates_email_format_of
|
|
212
215
|
|
|
213
216
|
BUNDLED WITH
|
|
214
|
-
1.
|
|
217
|
+
1.16.1
|
data/README.md
CHANGED
|
@@ -57,7 +57,7 @@ Or install it yourself as:
|
|
|
57
57
|
|
|
58
58
|
## Advanced Usage
|
|
59
59
|
|
|
60
|
-
Settings.content_block_1(kind: 'html', default: 'test')
|
|
60
|
+
Settings.content_block_1(kind: 'html', default: 'test', label: "Test Value")
|
|
61
61
|
Settings.data(kind: 'yaml')
|
|
62
62
|
Settings.data = [1, 2, 3]
|
|
63
63
|
|
|
@@ -95,23 +95,41 @@ Supported types:
|
|
|
95
95
|
text (textarea)
|
|
96
96
|
boolean (checkbox)
|
|
97
97
|
color (uses built-in RailsAdmin color picker)
|
|
98
|
-
html (supports Rich, glebtv-ckeditor, ckeditor, but does not require any of them)
|
|
99
|
-
|
|
98
|
+
html (does NOT sanitize (allows ANY javascript) - for trusted admin, supports Rich, glebtv-ckeditor, ckeditor, but does not require any of them)
|
|
99
|
+
code (does NOT sanitize (allows ANY javascript) - shows as codemirror, requires glebtv-ckeditor for codemirror)
|
|
100
|
+
sanitized (requires sanitize gem -- sanitizes HTML before saving to DB [Warning: uses RELAXED config!])
|
|
100
101
|
integer (stored as string)
|
|
101
102
|
yaml (requires safe_yaml)
|
|
102
103
|
phone (requires russian_phone)
|
|
104
|
+
phones (requires russian_phone - multiple phones)
|
|
103
105
|
email (requires validates_email_format_of)
|
|
104
106
|
address (requires geocoder)
|
|
105
107
|
file (requires paperclip or carrierwave)
|
|
106
108
|
url (requires addressable)
|
|
107
109
|
domain (requires addressable)
|
|
110
|
+
sanitize (uses rails sanitize helper with default settings, shows as html)
|
|
111
|
+
sanitize_code (uses rails sanitize helper with default settings, shows as codemirror textarea, can provide custom scrubber, defaults to Rails::Html::WhiteListSanitizer)
|
|
112
|
+
strip_tags (uses strip_tags rails helper)
|
|
113
|
+
simple_format (uses simple_format rails helper)
|
|
114
|
+
simple_format_raw (does NOT sanitize (allows ANY javascript) - uses simple_format rails helper with sanitize: false)
|
|
115
|
+
json
|
|
108
116
|
|
|
117
|
+
#### Sanitize settings
|
|
118
|
+
|
|
119
|
+
Sanitizer can be changed like this:
|
|
120
|
+
```
|
|
121
|
+
RalsAdminSettings.scrubber = Rails::Html::WhiteListSanitizer.new
|
|
122
|
+
```
|
|
123
|
+
defaults to Rails::Html::WhiteListSanitizer
|
|
109
124
|
|
|
110
125
|
Strings and html support following replacement patterns:
|
|
111
126
|
|
|
112
127
|
{{year}} -> current year
|
|
113
128
|
{{year|2013}} -> 2013 in 2013, 2013-2014 in 2014, etc
|
|
114
129
|
|
|
130
|
+
Sanitized types sanitize before storing to DB and not on display for performance.
|
|
131
|
+
Simple format types are stored in db as-is.
|
|
132
|
+
|
|
115
133
|
## Usage with Rails Admin
|
|
116
134
|
|
|
117
135
|
Rails admin management for settings is supported out of the box
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
= form.check_box :raw, {:value => field.value}, 'true', 'false'
|
|
5
5
|
- if @object.type == 'color'
|
|
6
6
|
= form.text_field :raw, :value => field.value, 'data-color' => true, style: "background-color: ##{field.value}"
|
|
7
|
-
- elsif %w(text yaml phones).include?( @object.type )
|
|
7
|
+
- elsif %w(text simple_format simple_format_raw strip_tags yaml json phones).include?( @object.type )
|
|
8
8
|
= form.text_area :raw, :value => field.value, :rows => 10, :cols => 80
|
|
9
|
-
- elsif @object.type == 'code'
|
|
9
|
+
- elsif @object.type == 'code' || @object.type == 'sanitize_code'
|
|
10
10
|
:ruby
|
|
11
11
|
#binding.pry
|
|
12
12
|
js_data = {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
= form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: 'codemirror', options: js_data.to_json }).reverse_merge({ value: field.form_value })
|
|
27
|
-
- elsif @object.type == 'html' || @object.type == 'sanitized'
|
|
27
|
+
- elsif @object.type == 'html' || @object.type == 'sanitized' || @object.type == 'sanitize'
|
|
28
28
|
- if form.respond_to?(:cktext_area)
|
|
29
29
|
= javascript_include_tag "ckeditor/init"
|
|
30
30
|
= form.cktext_area :raw, :value => field.value, :rows => 10, :cols => 80
|
data/config/locales/en.yml
CHANGED
data/config/locales/pt-BR.yml
CHANGED
data/config/locales/ru.yml
CHANGED
data/lib/rails_admin_settings.rb
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
require "rails_admin_settings/version"
|
|
2
2
|
|
|
3
3
|
module RailsAdminSettings
|
|
4
|
+
if defined?(Rails) && defined?(Rails::Html) && defined?(Rails::Html::WhiteListSanitizer)
|
|
5
|
+
@@scrubber = Rails::Html::WhiteListSanitizer.new
|
|
6
|
+
end
|
|
7
|
+
cattr_accessor :scrubber
|
|
8
|
+
|
|
4
9
|
class << self
|
|
5
10
|
def orm
|
|
6
11
|
if defined?(::Mongoid)
|
|
@@ -10,7 +10,7 @@ module RailsAdminSettings
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def text_kind?
|
|
13
|
-
(RailsAdminSettings.kinds - ['phone', 'phones', 'integer', 'yaml', 'boolean']).include? kind
|
|
13
|
+
(RailsAdminSettings.kinds - ['phone', 'phones', 'integer', 'yaml', 'json', 'boolean']).include? kind
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def upload_kind?
|
|
@@ -18,8 +18,13 @@ module RailsAdminSettings
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def html_kind?
|
|
21
|
-
['html', 'code', 'sanitized'].include? kind
|
|
21
|
+
['html', 'code', 'sanitize', 'sanitize_code', 'strip_tags', 'simple_format', 'simple_format_raw', 'sanitized'].include? kind
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
def preprocessed_kind?
|
|
25
|
+
['sanitize', 'sanitize_code', 'strip_tags', 'simple_format', 'simple_format_raw', 'sanitized'].include? kind
|
|
26
|
+
end
|
|
27
|
+
|
|
23
28
|
alias_method :text_type?, :text_kind?
|
|
24
29
|
alias_method :upload_type?, :upload_kind?
|
|
25
30
|
alias_method :html_type?, :html_kind?
|
|
@@ -49,7 +54,7 @@ module RailsAdminSettings
|
|
|
49
54
|
end
|
|
50
55
|
|
|
51
56
|
def to_s
|
|
52
|
-
if yaml_kind? || phone_kind? || integer_kind?
|
|
57
|
+
if yaml_kind? || json_kind? || phone_kind? || integer_kind?
|
|
53
58
|
raw
|
|
54
59
|
else
|
|
55
60
|
value
|
|
@@ -58,9 +63,27 @@ module RailsAdminSettings
|
|
|
58
63
|
|
|
59
64
|
private
|
|
60
65
|
|
|
61
|
-
def
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
def preprocess_value
|
|
67
|
+
case kind
|
|
68
|
+
# just to raise error if not in rails
|
|
69
|
+
when 'simple_format'
|
|
70
|
+
require_rails do
|
|
71
|
+
end
|
|
72
|
+
when 'simple_format_raw'
|
|
73
|
+
require_rails do
|
|
74
|
+
end
|
|
75
|
+
when 'strip_tags'
|
|
76
|
+
require_rails do
|
|
77
|
+
self.raw = ActionController::Base.helpers.strip_tags(raw)
|
|
78
|
+
end
|
|
79
|
+
when 'sanitize', 'sanitize_code'
|
|
80
|
+
require_rails do
|
|
81
|
+
self.raw = RailsAdminSettings.scrubber.sanitize(raw)
|
|
82
|
+
end
|
|
83
|
+
when 'sanitized'
|
|
84
|
+
require_sanitize do
|
|
85
|
+
self.raw = Sanitize.clean(value, Sanitize::Config::RELAXED)
|
|
86
|
+
end
|
|
64
87
|
end
|
|
65
88
|
end
|
|
66
89
|
|
|
@@ -72,10 +95,11 @@ module RailsAdminSettings
|
|
|
72
95
|
elsif integer_kind?
|
|
73
96
|
0
|
|
74
97
|
elsif yaml_kind?
|
|
98
|
+
nil
|
|
99
|
+
elsif json_kind?
|
|
100
|
+
nil
|
|
75
101
|
elsif boolean_kind?
|
|
76
102
|
false
|
|
77
|
-
elsif yaml_type?
|
|
78
|
-
nil
|
|
79
103
|
elsif phone_kind?
|
|
80
104
|
require_russian_phone do
|
|
81
105
|
RussianPhone::Number.new('')
|
|
@@ -97,6 +121,20 @@ module RailsAdminSettings
|
|
|
97
121
|
end
|
|
98
122
|
end
|
|
99
123
|
|
|
124
|
+
def process_html_types(text)
|
|
125
|
+
case kind
|
|
126
|
+
when 'simple_format'
|
|
127
|
+
require_rails do
|
|
128
|
+
text = ActionController::Base.helpers.simple_format(text)
|
|
129
|
+
end
|
|
130
|
+
when 'simple_format_raw'
|
|
131
|
+
require_rails do
|
|
132
|
+
text = ActionController::Base.helpers.simple_format(text, {}, sanitize: false)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
text
|
|
136
|
+
end
|
|
137
|
+
|
|
100
138
|
def process_text
|
|
101
139
|
text = raw.dup
|
|
102
140
|
text.gsub!('{{year}}', Time.now.strftime('%Y'))
|
|
@@ -107,6 +145,7 @@ module RailsAdminSettings
|
|
|
107
145
|
"#{$1}-#{Time.now.strftime('%Y')}"
|
|
108
146
|
end
|
|
109
147
|
end
|
|
148
|
+
text = process_html_types(text)
|
|
110
149
|
text = text.html_safe if html_kind?
|
|
111
150
|
text
|
|
112
151
|
end
|
|
@@ -124,11 +163,19 @@ module RailsAdminSettings
|
|
|
124
163
|
end
|
|
125
164
|
|
|
126
165
|
def load_yaml
|
|
127
|
-
|
|
128
|
-
|
|
166
|
+
if defined?(Psych) && Psych.respond_to?(:safe_load)
|
|
167
|
+
Psych.safe_load(raw)
|
|
168
|
+
else
|
|
169
|
+
require_safe_yaml do
|
|
170
|
+
YAML.safe_load(raw)
|
|
171
|
+
end
|
|
129
172
|
end
|
|
130
173
|
end
|
|
131
174
|
|
|
175
|
+
def load_json
|
|
176
|
+
JSON.load(raw)
|
|
177
|
+
end
|
|
178
|
+
|
|
132
179
|
def processed_value
|
|
133
180
|
if text_kind?
|
|
134
181
|
process_text
|
|
@@ -136,6 +183,8 @@ module RailsAdminSettings
|
|
|
136
183
|
raw.to_i
|
|
137
184
|
elsif yaml_kind?
|
|
138
185
|
load_yaml
|
|
186
|
+
elsif json_kind?
|
|
187
|
+
load_json
|
|
139
188
|
elsif boolean_kind?
|
|
140
189
|
raw == 'true'
|
|
141
190
|
elsif phone_kind?
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
module RailsAdminSettings
|
|
2
|
+
class NoRailsError < StandardError
|
|
3
|
+
def initialize(message)
|
|
4
|
+
@message = message
|
|
5
|
+
end
|
|
6
|
+
def to_s
|
|
7
|
+
@message
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
2
11
|
module RequireHelpers
|
|
3
12
|
private
|
|
4
13
|
|
|
@@ -32,6 +41,17 @@ module RailsAdminSettings
|
|
|
32
41
|
end
|
|
33
42
|
end
|
|
34
43
|
|
|
44
|
+
def require_rails
|
|
45
|
+
if defined?(Rails) &&
|
|
46
|
+
defined?(ActionController) &&
|
|
47
|
+
defined?(ActionController::Base) &&
|
|
48
|
+
!RailsAdminSettings.scrubber.nil?
|
|
49
|
+
yield
|
|
50
|
+
else
|
|
51
|
+
raise NoRailsError.new("[rails_admin_settings] sanitize, simple_format and strip_tags types require Rails, please add this gem after Rails in your Gemfile")
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
35
55
|
def require_validates_email_format_of
|
|
36
56
|
begin
|
|
37
57
|
require 'validates_email_format_of'
|
|
@@ -56,7 +56,7 @@ class Settings < BasicObject
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def root_file_path
|
|
59
|
-
if
|
|
59
|
+
if defined?(Rails)
|
|
60
60
|
Rails.root
|
|
61
61
|
else
|
|
62
62
|
Pathname.new(File.dirname(__FILE__)).join('../..')
|
|
@@ -66,7 +66,11 @@ class Settings < BasicObject
|
|
|
66
66
|
def apply_defaults!(file, verbose = false)
|
|
67
67
|
if File.file?(file)
|
|
68
68
|
puts "[settings] Loading from #{file}" if verbose
|
|
69
|
-
|
|
69
|
+
if defined?(Psych) && Psych.respond_to?(:safe_load)
|
|
70
|
+
yaml = Psych.safe_load(File.read(file))
|
|
71
|
+
else
|
|
72
|
+
yaml = YAML.load(File.read(file), safe: true)
|
|
73
|
+
end
|
|
70
74
|
yaml.each_pair do |namespace, vals|
|
|
71
75
|
vals.symbolize_keys!
|
|
72
76
|
n = ns(namespace)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
module RailsAdminSettings
|
|
2
2
|
module Uploads
|
|
3
|
-
class
|
|
3
|
+
class CarrierWaveUploader < CarrierWave::Uploader::Base
|
|
4
4
|
def extension_white_list
|
|
5
5
|
%w(jpg jpeg gif png tiff psd ai txt rtf doc docx xls xlsx ppt pptx odt odx zip rar 7z pdf)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
end
|
|
9
|
-
end
|
|
9
|
+
end
|
|
@@ -21,7 +21,7 @@ namespace :settings do
|
|
|
21
21
|
RailsAdminSettings::Dumper.dump(path)
|
|
22
22
|
puts "dumped settings to #{path}"
|
|
23
23
|
end
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
desc "Load settings from config/settings.yml without overwriting current values"
|
|
26
26
|
task :load => ['settings:require'] do
|
|
27
27
|
Settings.apply_defaults!(Rails.root.join("config/settings.#{Rails.env.to_s}.yml"), true)
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
module RailsAdminSettings
|
|
2
2
|
module Uploads
|
|
3
|
-
autoload :
|
|
3
|
+
autoload :CarrierWaveUploader, "rails_admin_settings/storage/carrier_wave_uploader"
|
|
4
|
+
|
|
5
|
+
def self.paperclip_options
|
|
6
|
+
if defined?(Rails)
|
|
7
|
+
{}
|
|
8
|
+
else
|
|
9
|
+
{path: "#{File.dirname(__FILE__)}/../../uploads/:filename", url: '/uploads/:filename'}
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
4
13
|
def self.included(base)
|
|
5
14
|
# carrierwave
|
|
6
15
|
if base.respond_to?(:mount_uploader)
|
|
7
16
|
# puts "[rails_admin_settings] CarrierWave detected"
|
|
8
17
|
# base.field(:file, type: String)
|
|
9
|
-
base.mount_uploader(:file, RailsAdminSettings::Uploads::
|
|
18
|
+
base.mount_uploader(:file, RailsAdminSettings::Uploads::CarrierWaveUploader)
|
|
10
19
|
Settings.file_uploads_supported = true
|
|
11
20
|
Settings.file_uploads_engine = :carrierwave
|
|
12
21
|
# mongoid-paperclip
|
|
@@ -14,11 +23,7 @@ module RailsAdminSettings
|
|
|
14
23
|
base.send(:include, ::Mongoid::Paperclip)
|
|
15
24
|
# puts "[rails_admin_settings] PaperClip detected"
|
|
16
25
|
base.field(:file, type: String)
|
|
17
|
-
|
|
18
|
-
base.has_mongoid_attached_file(:file)
|
|
19
|
-
else
|
|
20
|
-
base.has_mongoid_attached_file(:file, path: "#{File.dirname(__FILE__)}/../../uploads/:filename", url: '/uploads/:filename')
|
|
21
|
-
end
|
|
26
|
+
base.has_mongoid_attached_file(:file, self.paperclip_options)
|
|
22
27
|
if base.respond_to?(:do_not_validate_attachment_file_type)
|
|
23
28
|
base.do_not_validate_attachment_file_type :file
|
|
24
29
|
end
|
|
@@ -26,11 +31,7 @@ module RailsAdminSettings
|
|
|
26
31
|
Settings.file_uploads_supported = true
|
|
27
32
|
Settings.file_uploads_engine = :paperclip
|
|
28
33
|
elsif RailsAdminSettings.active_record? && defined?(Paperclip)
|
|
29
|
-
|
|
30
|
-
base.has_attached_file(:file)
|
|
31
|
-
else
|
|
32
|
-
base.has_attached_file(:file, path: "#{File.dirname(__FILE__)}/../../uploads/:filename", url: '/uploads/:filename')
|
|
33
|
-
end
|
|
34
|
+
base.has_mongoid_attached_file(:file, self.paperclip_options)
|
|
34
35
|
if base.respond_to?(:do_not_validate_attachment_file_type)
|
|
35
36
|
base.do_not_validate_attachment_file_type :file
|
|
36
37
|
end
|
|
@@ -4,7 +4,7 @@ module RailsAdminSettings
|
|
|
4
4
|
base.before_validation do
|
|
5
5
|
self.raw = default_serializable_value if raw.blank?
|
|
6
6
|
end
|
|
7
|
-
base.before_validation :
|
|
7
|
+
base.before_validation :preprocess_value, if: :preprocessed_kind?
|
|
8
8
|
base.validates_uniqueness_of :key, scope: :ns
|
|
9
9
|
base.validates_inclusion_of :kind, in: RailsAdminSettings.kinds
|
|
10
10
|
base.validates_numericality_of :raw, if: :integer_kind?
|
|
@@ -79,6 +79,16 @@ module RailsAdminSettings
|
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
|
+
|
|
83
|
+
base.validate if: :json_kind? do
|
|
84
|
+
unless raw.blank?
|
|
85
|
+
begin
|
|
86
|
+
JSON.load(raw)
|
|
87
|
+
rescue JSON::ParserError => e
|
|
88
|
+
errors.add(:raw, I18n.t('admin.settings.json_invalid'))
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
82
92
|
end
|
|
83
93
|
end
|
|
84
94
|
end
|
data/log/development.log
ADDED
|
File without changes
|
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
spec.add_development_dependency "mongoid", '~> 6.
|
|
22
|
+
spec.add_development_dependency "mongoid", '~> 6.3'
|
|
23
23
|
spec.add_development_dependency "rails"
|
|
24
24
|
spec.add_development_dependency "bundler"
|
|
25
25
|
spec.add_development_dependency "rake"
|
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.add_development_dependency "mongoid-rspec"
|
|
28
28
|
spec.add_development_dependency "simplecov"
|
|
29
29
|
spec.add_development_dependency "database_cleaner"
|
|
30
|
-
spec.add_development_dependency "
|
|
30
|
+
spec.add_development_dependency "factory_bot"
|
|
31
31
|
spec.add_development_dependency "safe_yaml"
|
|
32
32
|
spec.add_development_dependency "russian_phone"
|
|
33
33
|
spec.add_development_dependency "sanitize"
|
data/spec/defaults_spec.rb
CHANGED
|
@@ -52,12 +52,12 @@ describe 'Settings loading defaults' do
|
|
|
52
52
|
expect(Settings.ns(:main).footer).to eq 'test <b></b>'
|
|
53
53
|
expect(Settings.footer).to eq 'zzz'
|
|
54
54
|
|
|
55
|
-
Settings.ns(:main).phone.
|
|
56
|
-
Settings.ns(:main).true_setting.
|
|
57
|
-
Settings.ns(:main).false_setting.
|
|
58
|
-
Settings.ns(:other).footer.
|
|
59
|
-
Settings.ns(:main).footer.
|
|
60
|
-
Settings.footer.
|
|
55
|
+
expect(Settings.ns(:main).phone).to eq '906 1111111'
|
|
56
|
+
expect(Settings.ns(:main).true_setting).to be true
|
|
57
|
+
expect(Settings.ns(:main).false_setting).to be false
|
|
58
|
+
expect(Settings.ns(:other).footer).to eq 'zzz'
|
|
59
|
+
expect(Settings.ns(:main).footer).to eq 'test <b></b>'
|
|
60
|
+
expect(Settings.footer).to eq 'zzz'
|
|
61
61
|
|
|
62
62
|
expect(Settings.ns(:etc, fallback: :main).phone).to eq '906 1111111'
|
|
63
63
|
expect(Settings.ns(:etc, fallback: :main).footer).to eq 'test <b></b>'
|
data/spec/factories/setting.rb
CHANGED
data/spec/label_spec.rb
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
require 'spec_helper'
|
|
4
4
|
|
|
5
5
|
describe 'Settings label' do
|
|
6
|
-
|
|
7
6
|
it "should have label" do
|
|
8
7
|
label = "E-Mail"
|
|
9
8
|
Settings.email(label: label, default: "my@mail.ru")
|
|
@@ -14,5 +13,4 @@ describe 'Settings label' do
|
|
|
14
13
|
Settings.email(default: "my@mail.ru")
|
|
15
14
|
expect(Settings.get(:email).name).to eq('email')
|
|
16
15
|
end
|
|
17
|
-
|
|
18
16
|
end
|
data/spec/migration_spec.rb
CHANGED
|
@@ -11,10 +11,10 @@ describe 'Migrating from old versions' do
|
|
|
11
11
|
coll.insert({enabled: true, key: 'test', raw: '9060000000', type: 'phone'})
|
|
12
12
|
end
|
|
13
13
|
RailsAdminSettings.migrate!
|
|
14
|
-
RailsAdminSettings::Setting.first.key.
|
|
15
|
-
RailsAdminSettings::Setting.first.raw.
|
|
16
|
-
RailsAdminSettings::Setting.first.ns.
|
|
17
|
-
RailsAdminSettings::Setting.first.kind.
|
|
14
|
+
expect(RailsAdminSettings::Setting.first.key).to eq 'test'
|
|
15
|
+
expect(RailsAdminSettings::Setting.first.raw).to eq '9060000000'
|
|
16
|
+
expect(RailsAdminSettings::Setting.first.ns).to eq 'main'
|
|
17
|
+
expect(RailsAdminSettings::Setting.first.kind).to eq 'phone'
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
data/spec/model_spec.rb
CHANGED
|
@@ -6,40 +6,100 @@ describe RailsAdminSettings::Setting do
|
|
|
6
6
|
it { is_expected.to have_fields(:enabled, :key, :kind, :raw) }
|
|
7
7
|
|
|
8
8
|
it "correctly return content when enabled" do
|
|
9
|
-
setting =
|
|
9
|
+
setting = FactoryBot.create(:setting)
|
|
10
10
|
expect(setting.to_s).to eq "Контент 1"
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it "return empty string when disabled" do
|
|
14
|
-
setting =
|
|
14
|
+
setting = FactoryBot.create(:setting, enabled: false)
|
|
15
15
|
expect(setting.to_s).to eq ""
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
it "correctly process {{year}}" do
|
|
19
|
-
setting =
|
|
19
|
+
setting = FactoryBot.create(:setting, raw: '© {{year}} company')
|
|
20
20
|
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company"
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
it "correctly process {{year|2010}}" do
|
|
24
|
-
setting =
|
|
24
|
+
setting = FactoryBot.create(:setting, raw: '© {{year|2010}} company')
|
|
25
25
|
expect(setting.val).to eq "© 2010-#{Time.now.strftime('%Y')} company"
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "correctly process {{year|current_year}}" do
|
|
29
|
-
setting =
|
|
29
|
+
setting = FactoryBot.create(:setting, raw: '© {{year|' + Time.now.strftime('%Y') + '}} company')
|
|
30
30
|
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company"
|
|
31
31
|
expect(setting.val.class.name).not_to eq "ActiveSupport::SafeBuffer"
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
it 'return html_safe string when in html mode' do
|
|
35
|
-
setting =
|
|
35
|
+
setting = FactoryBot.create(:setting, raw: '© {{year}} company', kind: 'html')
|
|
36
36
|
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company"
|
|
37
37
|
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it 'sanitize html when in sanitized mode' do
|
|
41
|
-
setting =
|
|
41
|
+
setting = FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'sanitized')
|
|
42
42
|
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company <a>test</a>"
|
|
43
43
|
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
44
44
|
end
|
|
45
|
-
|
|
45
|
+
|
|
46
|
+
it 'sanitize html when in sanitize mode' do
|
|
47
|
+
if defined?(Rails)
|
|
48
|
+
setting = FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'sanitize')
|
|
49
|
+
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company <a>test</a>"
|
|
50
|
+
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
51
|
+
else
|
|
52
|
+
expect {
|
|
53
|
+
FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'sanitize')
|
|
54
|
+
}.to raise_error(RailsAdminSettings::NoRailsError)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'sanitize html when in sanitize_code mode' do
|
|
59
|
+
if defined?(Rails)
|
|
60
|
+
setting = FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'sanitize_code')
|
|
61
|
+
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company <a>test</a>"
|
|
62
|
+
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
63
|
+
else
|
|
64
|
+
expect {
|
|
65
|
+
FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'sanitize_code')
|
|
66
|
+
}.to raise_error(RailsAdminSettings::NoRailsError)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'remove html when in strip_tags mode' do
|
|
71
|
+
if defined?(Rails)
|
|
72
|
+
setting = FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'strip_tags')
|
|
73
|
+
expect(setting.val).to eq "© #{Time.now.strftime('%Y')} company test"
|
|
74
|
+
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
75
|
+
else
|
|
76
|
+
expect {
|
|
77
|
+
FactoryBot.create(:setting, raw: '© {{year}} company <a href="javascript:alert()">test</a>', kind: 'strip_tags')
|
|
78
|
+
}.to raise_error(RailsAdminSettings::NoRailsError)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'formats text and cleans html in simple_format mode' do
|
|
83
|
+
if defined?(Rails)
|
|
84
|
+
setting = FactoryBot.create(:setting, raw: "© {{year}}\n\ncompany <a href='javascript:alert()'>test</a>", kind: 'simple_format')
|
|
85
|
+
expect(setting.val).to eq "<p>© #{Time.now.strftime('%Y')}</p>\n\n<p>company <a>test</a></p>"
|
|
86
|
+
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
87
|
+
else
|
|
88
|
+
expect {
|
|
89
|
+
FactoryBot.create(:setting, raw: "© {{year}}\n\ncompany <a href='javascript:alert()'>test</a>", kind: 'simple_format')
|
|
90
|
+
}.to raise_error(RailsAdminSettings::NoRailsError)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'formats text and DOESNT html in simple_format_raw mode' do
|
|
95
|
+
if defined?(Rails)
|
|
96
|
+
setting = FactoryBot.create(:setting, raw: "© {{year}}\n\ncompany <a href='javascript:alert()'>test</a>", kind: 'simple_format_raw')
|
|
97
|
+
expect(setting.val).to eq "<p>© #{Time.now.strftime('%Y')}</p>\n\n<p>company <a href='javascript:alert()'>test</a></p>"
|
|
98
|
+
expect(setting.val.class.name).to eq "ActiveSupport::SafeBuffer"
|
|
99
|
+
else
|
|
100
|
+
expect {
|
|
101
|
+
FactoryBot.create(:setting, raw: "© {{year}}\n\ncompany <a href='javascript:alert()'>test</a>", kind: 'simple_format_raw')
|
|
102
|
+
}.to raise_error(RailsAdminSettings::NoRailsError)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
data/spec/paperclip_spec.rb
CHANGED
|
@@ -17,7 +17,6 @@ describe "Uploads" do
|
|
|
17
17
|
expect(Settings.get(:file).file_file_name).to eq '1024x768.gif'
|
|
18
18
|
expect(Settings.get(:file).file_file_size).to eq 4357
|
|
19
19
|
expect(Settings.file[0..21]).to eq '/uploads/1024x768.gif?'
|
|
20
|
-
|
|
21
20
|
expect(File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif")).to be_truthy
|
|
22
21
|
end
|
|
23
22
|
|
data/spec/settings_spec.rb
CHANGED
|
@@ -48,7 +48,7 @@ describe 'Settings' do
|
|
|
48
48
|
Settings.phone = '906 222 22 22'
|
|
49
49
|
expect(Settings.phone(kind: 'phone', default: '906 111 11 11')).to eq '+7 (906) 222-22-22'
|
|
50
50
|
end
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
it 'should properly store settings to DB' do
|
|
53
53
|
Settings.unload!
|
|
54
54
|
expect(Settings.loaded).to eq false
|
data/spec/spec_helper.rb
CHANGED
|
@@ -15,10 +15,13 @@ unless ENV['ACTIVERECORD']
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
require 'database_cleaner'
|
|
18
|
-
require '
|
|
18
|
+
require 'factory_bot'
|
|
19
19
|
require 'mongoid-rspec'
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
p ENV["UPLOADS"]
|
|
22
|
+
if ENV['UPLOADS'] == 'paperclip'
|
|
23
|
+
require "mongoid-paperclip"
|
|
24
|
+
end
|
|
22
25
|
if ENV['UPLOADS'] == 'carrierwave'
|
|
23
26
|
require "carrierwave/mongoid"
|
|
24
27
|
CarrierWave.configure do |config|
|
|
@@ -35,8 +38,34 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each do |f|
|
|
|
35
38
|
require f
|
|
36
39
|
end
|
|
37
40
|
|
|
41
|
+
if ENV['RAILS'] == '1'
|
|
42
|
+
require "active_model/railtie"
|
|
43
|
+
require "action_controller/railtie"
|
|
44
|
+
require "action_view/railtie"
|
|
45
|
+
module RAS
|
|
46
|
+
class Application < Rails::Application
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
# Initialize the Rails application.
|
|
50
|
+
Rails.application.initialize!
|
|
51
|
+
end
|
|
52
|
+
|
|
38
53
|
require 'rails_admin_settings'
|
|
39
54
|
|
|
55
|
+
|
|
56
|
+
if ENV['UPLOADS'] == 'paperclip'
|
|
57
|
+
module RailsAdminSettings::Uploads
|
|
58
|
+
def self.paperclip_options
|
|
59
|
+
{path: "#{File.dirname(__FILE__)}/../uploads/:filename", url: '/uploads/:filename'}
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
40
65
|
Dir["#{File.dirname(__FILE__)}/factories/**/*.rb"].each do |f|
|
|
41
66
|
require f
|
|
42
67
|
end
|
|
68
|
+
|
|
69
|
+
#RSpec.configure do |config|
|
|
70
|
+
#config.expect_with(:rspec) { |c| c.syntax = :should }
|
|
71
|
+
#end
|
data/spec/types_spec.rb
CHANGED
|
@@ -4,12 +4,12 @@ require 'spec_helper'
|
|
|
4
4
|
|
|
5
5
|
describe 'Settings kind' do
|
|
6
6
|
it 'boolean' do
|
|
7
|
-
Settings.get(:testbool, kind: 'boolean').value.
|
|
8
|
-
Settings.get(:testbool, default: true, kind: 'boolean').value.
|
|
9
|
-
Settings.get(:testbool2, default: true, kind: 'boolean').value.
|
|
10
|
-
Settings.testbool2.
|
|
7
|
+
expect(Settings.get(:testbool, kind: 'boolean').value).to be(false)
|
|
8
|
+
expect(Settings.get(:testbool, default: true, kind: 'boolean').value).to be(false)
|
|
9
|
+
expect(Settings.get(:testbool2, default: true, kind: 'boolean').value).to be(true)
|
|
10
|
+
expect(Settings.testbool2).to be(true)
|
|
11
11
|
Settings.set(:testbool3, true, kind: 'boolean')
|
|
12
|
-
Settings.testbool3.
|
|
12
|
+
expect(Settings.testbool3).to be(true)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
it 'html' do
|
|
@@ -23,12 +23,18 @@ describe 'Settings kind' do
|
|
|
23
23
|
expect(Settings.testint2).to eq 5
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
it 'yaml' do
|
|
26
|
+
it 'does yaml' do
|
|
27
27
|
Settings.set(:data, '[one, two, three]', kind: 'yaml')
|
|
28
28
|
expect(Settings.get(:data).raw).to eq '[one, two, three]'
|
|
29
29
|
expect(Settings.data).to eq ['one', 'two', 'three']
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
it 'does json' do
|
|
33
|
+
Settings.set(:data, '{"a": 1, "b": 2}', kind: 'json')
|
|
34
|
+
expect(Settings.get(:data).raw).to eq '{"a": 1, "b": 2}'
|
|
35
|
+
expect(Settings.data).to eq({"a" => 1, "b" => 2})
|
|
36
|
+
end
|
|
37
|
+
|
|
32
38
|
it 'phone' do
|
|
33
39
|
Settings.set(:tphone, '906 111 11 11', kind: 'phone')
|
|
34
40
|
expect(Settings.get(:tphone).val.class.name).to eq 'RussianPhone::Number'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_admin_settings
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gleb Tv
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-03-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mongoid
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '6.
|
|
19
|
+
version: '6.3'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '6.
|
|
26
|
+
version: '6.3'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rails
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -123,7 +123,7 @@ dependencies:
|
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: '0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
126
|
+
name: factory_bot
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
129
|
- - ">="
|
|
@@ -286,7 +286,7 @@ files:
|
|
|
286
286
|
- config/locales/pt-BR.yml
|
|
287
287
|
- config/locales/ru.yml
|
|
288
288
|
- gemfiles/mongoid-6.0.gemfile
|
|
289
|
-
- gemfiles/mongoid-6.
|
|
289
|
+
- gemfiles/mongoid-6.3.gemfile
|
|
290
290
|
- lib/generators/rails_admin_settings/migration_generator.rb
|
|
291
291
|
- lib/generators/rails_admin_settings/templates/migration.rb
|
|
292
292
|
- lib/rails_admin_settings.rb
|
|
@@ -301,11 +301,12 @@ files:
|
|
|
301
301
|
- lib/rails_admin_settings/rails_admin_config.rb
|
|
302
302
|
- lib/rails_admin_settings/require_helpers.rb
|
|
303
303
|
- lib/rails_admin_settings/settings.rb
|
|
304
|
-
- lib/rails_admin_settings/storage/
|
|
304
|
+
- lib/rails_admin_settings/storage/carrier_wave_uploader.rb
|
|
305
305
|
- lib/rails_admin_settings/tasks.rb
|
|
306
306
|
- lib/rails_admin_settings/uploads.rb
|
|
307
307
|
- lib/rails_admin_settings/validation.rb
|
|
308
308
|
- lib/rails_admin_settings/version.rb
|
|
309
|
+
- log/development.log
|
|
309
310
|
- rails_admin_settings.gemspec
|
|
310
311
|
- spec/advanced_usage_spec.rb
|
|
311
312
|
- spec/carrierwave_spec.rb
|
|
@@ -347,7 +348,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
347
348
|
version: '0'
|
|
348
349
|
requirements: []
|
|
349
350
|
rubyforge_project:
|
|
350
|
-
rubygems_version: 2.6
|
|
351
|
+
rubygems_version: 2.7.6
|
|
351
352
|
signing_key:
|
|
352
353
|
specification_version: 4
|
|
353
354
|
summary: ''
|