rails_admin_settings 0.3.9 → 0.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.
- data/README.md +1 -0
- data/app/views/rails_admin/main/_setting_value.html.haml +2 -0
- data/config/locales/en.rails_admin_settings.yml +1 -0
- data/config/locales/ru.rails_admin_settings.yml +1 -0
- data/lib/rails_admin_settings/hex_color_validator.rb +11 -0
- data/lib/rails_admin_settings/processing.rb +7 -37
- data/lib/rails_admin_settings/types.rb +1 -1
- data/lib/rails_admin_settings/validation.rb +4 -0
- data/lib/rails_admin_settings/version.rb +1 -1
- data/lib/rails_admin_settings.rb +6 -5
- data/spec/advanced_usage_spec.rb +0 -61
- data/spec/types_spec.rb +63 -0
- metadata +7 -4
data/README.md
CHANGED
@@ -65,6 +65,7 @@ Supported types:
|
|
65
65
|
|
66
66
|
string (input)
|
67
67
|
text (textarea)
|
68
|
+
color (uses built-in RailsAdmin color picker)
|
68
69
|
html (supports Rich, glebtv-ckeditor, ckeditor, but does not require any of them)
|
69
70
|
sanitized (requires sanitize -- sanitizes HTML before saving to DB [Warning: uses RELAXED config!])
|
70
71
|
integer (stored as string)
|
@@ -1,5 +1,7 @@
|
|
1
1
|
- if ['string', 'integer', 'phone', 'email', 'address', 'url', 'domain'].include?(@object.type)
|
2
2
|
= form.text_field :raw, :value => field.value
|
3
|
+
- if @object.type == 'color'
|
4
|
+
= form.text_field :raw, :value => field.value, 'data-color' => true
|
3
5
|
- elsif @object.type == 'text' || @object.type == 'yaml'
|
4
6
|
= form.text_area :raw, :value => field.value, :rows => 10, :cols => 80
|
5
7
|
- elsif @object.type == 'html'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module RailsAdminSettings
|
2
|
+
class HexColorValidator < ActiveModel::EachValidator
|
3
|
+
def validate_each(record, attribute, value)
|
4
|
+
record.errors[attribute] << (options[:message] || I18n.t('admin.settings.invalid_color')) unless value.blank? || self.class.matches?(value)
|
5
|
+
end
|
6
|
+
def self.matches?(value)
|
7
|
+
return false unless value
|
8
|
+
/^(?:[0-9a-f]{3})(?:[0-9a-f]{3})?$/i.match(value).nil? ? false : true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -1,49 +1,19 @@
|
|
1
1
|
module RailsAdminSettings
|
2
2
|
module Processing
|
3
|
+
RailsAdminSettings.types.each do |dtype|
|
4
|
+
define_method "#{dtype}_type?" do
|
5
|
+
dtype == type
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
3
9
|
def text_type?
|
4
|
-
|
10
|
+
(RailsAdminSettings.types - ['phone', 'integer', 'yaml']).include? type
|
5
11
|
end
|
6
12
|
|
7
13
|
def html_type?
|
8
14
|
['html', 'sanitized'].include? type
|
9
15
|
end
|
10
16
|
|
11
|
-
def integer_type?
|
12
|
-
'integer' == type
|
13
|
-
end
|
14
|
-
|
15
|
-
def yaml_type?
|
16
|
-
'yaml' == type
|
17
|
-
end
|
18
|
-
|
19
|
-
def email_type?
|
20
|
-
'email' == type
|
21
|
-
end
|
22
|
-
|
23
|
-
def phone_type?
|
24
|
-
'phone' == type
|
25
|
-
end
|
26
|
-
|
27
|
-
def address_type?
|
28
|
-
'address' == type
|
29
|
-
end
|
30
|
-
|
31
|
-
def sanitized_type?
|
32
|
-
'sanitized' == type
|
33
|
-
end
|
34
|
-
|
35
|
-
def file_type?
|
36
|
-
'file' == type
|
37
|
-
end
|
38
|
-
|
39
|
-
def url_type?
|
40
|
-
'url' == type
|
41
|
-
end
|
42
|
-
|
43
|
-
def domain_type?
|
44
|
-
'domain' == type
|
45
|
-
end
|
46
|
-
|
47
17
|
def value
|
48
18
|
if file_type?
|
49
19
|
file.url
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module RailsAdminSettings
|
2
2
|
def self.types
|
3
|
-
['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'url', 'domain']
|
3
|
+
['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'url', 'domain', 'color']
|
4
4
|
end
|
5
5
|
end
|
@@ -52,6 +52,10 @@ module RailsAdminSettings
|
|
52
52
|
base.after_validation(:geocode, if: :address_type?)
|
53
53
|
end
|
54
54
|
|
55
|
+
base.validate if: :color_type? do
|
56
|
+
base.validates_with(RailsAdminSettings::HexColorValidator, attributes: :raw)
|
57
|
+
end
|
58
|
+
|
55
59
|
base.validate if: :yaml_type? do
|
56
60
|
require_safe_yaml do
|
57
61
|
unless raw.blank?
|
data/lib/rails_admin_settings.rb
CHANGED
@@ -4,11 +4,12 @@ module RailsAdminSettings
|
|
4
4
|
class PersistenceException < Exception
|
5
5
|
end
|
6
6
|
|
7
|
-
autoload :Processing,
|
8
|
-
autoload :Validation,
|
9
|
-
autoload :RequireHelpers,
|
10
|
-
autoload :RailsAdminConfig,
|
11
|
-
autoload :Uploads,
|
7
|
+
autoload :Processing, "rails_admin_settings/processing"
|
8
|
+
autoload :Validation, "rails_admin_settings/validation"
|
9
|
+
autoload :RequireHelpers, "rails_admin_settings/require_helpers"
|
10
|
+
autoload :RailsAdminConfig, "rails_admin_settings/rails_admin_config"
|
11
|
+
autoload :Uploads, "rails_admin_settings/uploads"
|
12
|
+
autoload :HexColorValidator, "rails_admin_settings/hex_color_validator"
|
12
13
|
end
|
13
14
|
|
14
15
|
require "rails_admin_settings/types"
|
data/spec/advanced_usage_spec.rb
CHANGED
@@ -8,65 +8,4 @@ describe 'Settings advanced usage' do
|
|
8
8
|
s.should eq 'test@example.com'
|
9
9
|
Settings.get(:email).to_s.should eq 'test@example.com'
|
10
10
|
end
|
11
|
-
|
12
|
-
it 'support html mode' do
|
13
|
-
Settings.get(:email, type: 'html', default: 'test@example.com').to_s.should eq 'test@example.com'
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'support integer mode' do
|
17
|
-
Settings.get(:testint, type: 'integer').value.should eq 0
|
18
|
-
Settings.get(:testint, default: 5, type: 'integer').value.should eq 0
|
19
|
-
Settings.get(:testint2, default: 5, type: 'integer').value.should eq 5
|
20
|
-
Settings.testint2.should eq 5
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'support yaml mode' do
|
24
|
-
Settings.get(:test_yml, type: 'yaml').value.should be_nil
|
25
|
-
Settings.get(:test_yml_2, default: '[t1, t2, t3]', type: 'yaml').value.should eq ['t1', 't2', 't3']
|
26
|
-
Settings.test_yml_2.should eq ['t1', 't2', 't3']
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should have sensible defaults' do
|
30
|
-
s = Settings.get(:test_sett)
|
31
|
-
s.should_not be_nil
|
32
|
-
s.type.should eq 'string'
|
33
|
-
s.raw.should eq ''
|
34
|
-
s.value.should eq ''
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should support yaml type' do
|
38
|
-
Settings.set(:data, '[one, two, three]', type: 'yaml')
|
39
|
-
Settings.get(:data).raw.should eq '[one, two, three]'
|
40
|
-
Settings.data.should eq ['one', 'two', 'three']
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should support phone type' do
|
44
|
-
Settings.set(:tphone, '906 111 11 11', type: 'phone')
|
45
|
-
Settings.get(:tphone).val.class.name.should eq 'RussianPhone::Number'
|
46
|
-
Settings.tphone.class.name.should eq 'RussianPhone::Number'
|
47
|
-
Settings.tphone.should eq '906 111 11 11'
|
48
|
-
|
49
|
-
Settings.get(:tphone).val.city.should eq '906'
|
50
|
-
Settings.get(:tphone).val.formatted_subscriber.should eq '111-11-11'
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'should set defaults for phone type' do
|
54
|
-
Settings.dphone(type: 'phone')
|
55
|
-
|
56
|
-
Settings.dphone.formatted_area.should eq ''
|
57
|
-
Settings.dphone.formatted_subscriber.should eq ''
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'should validate emails with email type' do
|
61
|
-
Settings.eml(type: 'email')
|
62
|
-
expect { Settings.eml = '1' }.to raise_error
|
63
|
-
Settings.eml = 'test@example.com'
|
64
|
-
Settings.eml.should eq 'test@example.com'
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should process urls with url type' do
|
68
|
-
Settings.url(type: 'url')
|
69
|
-
Settings.url = 'test.ru'
|
70
|
-
Settings.url.should eq 'http://test.ru'
|
71
|
-
end
|
72
11
|
end
|
data/spec/types_spec.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'Settings advanced usage' do
|
6
|
+
it 'support html type' do
|
7
|
+
Settings.get(:email, type: 'html', default: 'test@example.com').to_s.should eq 'test@example.com'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'support integer type' do
|
11
|
+
Settings.get(:testint, type: 'integer').value.should eq 0
|
12
|
+
Settings.get(:testint, default: 5, type: 'integer').value.should eq 0
|
13
|
+
Settings.get(:testint2, default: 5, type: 'integer').value.should eq 5
|
14
|
+
Settings.testint2.should eq 5
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'supports yaml type' do
|
18
|
+
Settings.set(:data, '[one, two, three]', type: 'yaml')
|
19
|
+
Settings.get(:data).raw.should eq '[one, two, three]'
|
20
|
+
Settings.data.should eq ['one', 'two', 'three']
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'supports phone type' do
|
24
|
+
Settings.set(:tphone, '906 111 11 11', type: 'phone')
|
25
|
+
Settings.get(:tphone).val.class.name.should eq 'RussianPhone::Number'
|
26
|
+
Settings.tphone.class.name.should eq 'RussianPhone::Number'
|
27
|
+
Settings.tphone.should eq '906 111 11 11'
|
28
|
+
Settings.get(:tphone).phone_type?.should be_true
|
29
|
+
Settings.get(:tphone).val.city.should eq '906'
|
30
|
+
Settings.get(:tphone).val.formatted_subscriber.should eq '111-11-11'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'sets defaults for phone type' do
|
34
|
+
Settings.dphone(type: 'phone')
|
35
|
+
Settings.get(:dphone).phone_type?.should be_true
|
36
|
+
Settings.dphone.formatted_area.should eq ''
|
37
|
+
Settings.dphone.formatted_subscriber.should eq ''
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'validates emails with email type' do
|
41
|
+
Settings.eml(type: 'email')
|
42
|
+
Settings.get(:eml).email_type?.should be_true
|
43
|
+
expect { Settings.eml = '1' }.to raise_error
|
44
|
+
Settings.eml = 'test@example.com'
|
45
|
+
Settings.eml.should eq 'test@example.com'
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'processes urls with url type' do
|
49
|
+
Settings.url(type: 'url')
|
50
|
+
Settings.get(:url).url_type?.should be_true
|
51
|
+
Settings.get(:url).color_type?.should be_false
|
52
|
+
Settings.url = 'test.ru'
|
53
|
+
Settings.url.should eq 'http://test.ru'
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'supports color type' do
|
57
|
+
Settings.col(type: 'color')
|
58
|
+
Settings.get(:col).color_type?.should be_true
|
59
|
+
expect { Settings.col = 'test'}.to raise_error
|
60
|
+
Settings.col = 'ffffff'
|
61
|
+
Settings.col.should eq 'ffffff'
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_admin_settings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -256,6 +256,7 @@ files:
|
|
256
256
|
- config/locales/ru.rails_admin_settings.yml
|
257
257
|
- lib/rails_admin_settings.rb
|
258
258
|
- lib/rails_admin_settings/engine.rb
|
259
|
+
- lib/rails_admin_settings/hex_color_validator.rb
|
259
260
|
- lib/rails_admin_settings/processing.rb
|
260
261
|
- lib/rails_admin_settings/rails_admin_config.rb
|
261
262
|
- lib/rails_admin_settings/require_helpers.rb
|
@@ -275,6 +276,7 @@ files:
|
|
275
276
|
- spec/support/database_cleaner.rb
|
276
277
|
- spec/support/mongoid.rb
|
277
278
|
- spec/support/mongoid.yml
|
279
|
+
- spec/types_spec.rb
|
278
280
|
homepage: https://github.com/rs-pro/rails_admin_settings
|
279
281
|
licenses:
|
280
282
|
- MIT
|
@@ -290,7 +292,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
290
292
|
version: '0'
|
291
293
|
segments:
|
292
294
|
- 0
|
293
|
-
hash: -
|
295
|
+
hash: -3328257958509862173
|
294
296
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
295
297
|
none: false
|
296
298
|
requirements:
|
@@ -299,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
299
301
|
version: '0'
|
300
302
|
segments:
|
301
303
|
- 0
|
302
|
-
hash: -
|
304
|
+
hash: -3328257958509862173
|
303
305
|
requirements: []
|
304
306
|
rubyforge_project:
|
305
307
|
rubygems_version: 1.8.25
|
@@ -316,3 +318,4 @@ test_files:
|
|
316
318
|
- spec/support/database_cleaner.rb
|
317
319
|
- spec/support/mongoid.rb
|
318
320
|
- spec/support/mongoid.yml
|
321
|
+
- spec/types_spec.rb
|