rails_admin_settings 0.5.0 → 0.5.2
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 +7 -0
- data/.ruby-version +1 -1
- data/app/views/rails_admin/main/_setting_value.html.haml +21 -21
- data/config/locales/en.rails_admin_settings.yml +1 -1
- data/lib/rails_admin_settings/engine.rb +13 -13
- data/lib/rails_admin_settings/hex_color_validator.rb +11 -11
- data/lib/rails_admin_settings/processing.rb +120 -120
- data/lib/rails_admin_settings/rails_admin_config.rb +53 -53
- data/lib/rails_admin_settings/require_helpers.rb +66 -66
- data/lib/rails_admin_settings/settings.rb +176 -176
- data/lib/rails_admin_settings/storage/carrierwave.rb +8 -8
- data/lib/rails_admin_settings/types.rb +4 -4
- data/lib/rails_admin_settings/uploads.rb +30 -29
- data/lib/rails_admin_settings/validation.rb +72 -72
- data/lib/rails_admin_settings/version.rb +1 -1
- data/spec/advanced_usage_spec.rb +10 -10
- data/spec/database_trickery_spec.rb +50 -50
- data/spec/factories/setting.rb +8 -8
- data/spec/model_spec.rb +44 -44
- data/spec/types_spec.rb +62 -62
- metadata +11 -47
@@ -1,176 +1,176 @@
|
|
1
|
-
class Settings
|
2
|
-
cattr_accessor :file_uploads_supported, :file_uploads_engine, :settings
|
3
|
-
@@file_uploads_supported = false
|
4
|
-
@@file_uploads_engine = false
|
5
|
-
|
6
|
-
class << self
|
7
|
-
@@loaded = false
|
8
|
-
@@settings = {}
|
9
|
-
|
10
|
-
def load!
|
11
|
-
if @@loaded
|
12
|
-
false
|
13
|
-
else
|
14
|
-
@@settings = {}
|
15
|
-
RailsAdminSettings::Setting.all.each do |setting|
|
16
|
-
@@settings[setting.key] = setting
|
17
|
-
end
|
18
|
-
@@loaded = true
|
19
|
-
true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def unload!
|
24
|
-
if @@loaded
|
25
|
-
@@settings = {}
|
26
|
-
@@loaded = false
|
27
|
-
true
|
28
|
-
else
|
29
|
-
false
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# returns processed setting value
|
34
|
-
def method_missing(key, *args)
|
35
|
-
key = key.to_s
|
36
|
-
|
37
|
-
if key[-1] == '='
|
38
|
-
key = key[0..-2]
|
39
|
-
options = args[1] || {}
|
40
|
-
value = args.first
|
41
|
-
set(key, value, options).val
|
42
|
-
else
|
43
|
-
get(key, args.first || {}).val
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def set(key, value = nil, options = {})
|
48
|
-
load!
|
49
|
-
key = key.to_s
|
50
|
-
options.symbolize_keys!
|
51
|
-
|
52
|
-
|
53
|
-
if !options[:type].nil? && options[:type] == 'yaml' && !value.nil? && !valid_yaml?(value)
|
54
|
-
value = value.to_yaml
|
55
|
-
end
|
56
|
-
|
57
|
-
if @@settings[key].nil?
|
58
|
-
write_to_database(key, options.merge(key: key, raw: value))
|
59
|
-
else
|
60
|
-
@@settings[key].update_attributes!(options.merge(raw: value))
|
61
|
-
@@settings[key]
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def valid_yaml?(value)
|
66
|
-
begin
|
67
|
-
YAML.safe_load(value)
|
68
|
-
rescue LoadError => e
|
69
|
-
e.message << " [rails_admin_settings] Please add gem 'safe_yaml' to your Gemfile to use yaml settings"
|
70
|
-
raise e
|
71
|
-
rescue Psych::SyntaxError => e
|
72
|
-
return false
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def enabled?(key, options = {})
|
77
|
-
get(key, options).enabled?
|
78
|
-
end
|
79
|
-
|
80
|
-
# returns setting object
|
81
|
-
def get(key, options = {})
|
82
|
-
load!
|
83
|
-
key = key.to_s
|
84
|
-
if @@settings[key].nil?
|
85
|
-
create_setting(key, options)
|
86
|
-
else
|
87
|
-
@@settings[key]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def []=(key, value)
|
92
|
-
set(key, value)
|
93
|
-
end
|
94
|
-
|
95
|
-
def [](key)
|
96
|
-
get(key)
|
97
|
-
end
|
98
|
-
|
99
|
-
def save_default(key, value, options = {})
|
100
|
-
load!
|
101
|
-
key = key.to_s
|
102
|
-
options.merge!(default: value)
|
103
|
-
if @@settings[key].nil?
|
104
|
-
create_setting(key, options).val
|
105
|
-
else
|
106
|
-
if @@settings[key].blank?
|
107
|
-
set(key, value).val
|
108
|
-
else
|
109
|
-
@@settings[key].val
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def create_setting(key, options = {})
|
115
|
-
load!
|
116
|
-
key = key.to_s
|
117
|
-
options.symbolize_keys!
|
118
|
-
options[:raw] = options.delete(:default)
|
119
|
-
if @@settings[key].nil?
|
120
|
-
write_to_database(key, options.merge(key: key))
|
121
|
-
else
|
122
|
-
@@settings[key]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
# to satisfy rspec
|
127
|
-
def to_ary
|
128
|
-
['Settings']
|
129
|
-
end
|
130
|
-
|
131
|
-
def destroy(key)
|
132
|
-
raise 'please call destroy! to delete setting'
|
133
|
-
end
|
134
|
-
|
135
|
-
def destroy_all
|
136
|
-
raise 'please call destroy_all! to delete all settings'
|
137
|
-
end
|
138
|
-
|
139
|
-
def destroy!(key)
|
140
|
-
load!
|
141
|
-
key = key.to_s
|
142
|
-
unless @@settings[key].nil?
|
143
|
-
@@settings[key].destroy
|
144
|
-
@@settings.delete(key)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def destroy_all!
|
149
|
-
RailsAdminSettings::Setting.destroy_all
|
150
|
-
unload!
|
151
|
-
end
|
152
|
-
|
153
|
-
|
154
|
-
def write_to_database(key, options)
|
155
|
-
key = key.to_s
|
156
|
-
@@settings[key] = RailsAdminSettings::Setting.create(options)
|
157
|
-
unless @@settings[key].persisted?
|
158
|
-
if @@settings[key].errors[:key].any?
|
159
|
-
@@settings[key] = RailsAdminSettings::Setting.where(key: key).first
|
160
|
-
if options[:raw].blank? && !@@settings[key].blank?
|
161
|
-
# do not update setting if it's not blank in DB and we want to make it blank
|
162
|
-
else
|
163
|
-
unless @@settings[key].update_attributes(options)
|
164
|
-
raise RailsAdminSettings::PersistenceException
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
@@settings[key]
|
170
|
-
end
|
171
|
-
|
172
|
-
def label key
|
173
|
-
get(key).label
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
1
|
+
class Settings
|
2
|
+
cattr_accessor :file_uploads_supported, :file_uploads_engine, :settings
|
3
|
+
@@file_uploads_supported = false
|
4
|
+
@@file_uploads_engine = false
|
5
|
+
|
6
|
+
class << self
|
7
|
+
@@loaded = false
|
8
|
+
@@settings = {}
|
9
|
+
|
10
|
+
def load!
|
11
|
+
if @@loaded
|
12
|
+
false
|
13
|
+
else
|
14
|
+
@@settings = {}
|
15
|
+
RailsAdminSettings::Setting.all.each do |setting|
|
16
|
+
@@settings[setting.key] = setting
|
17
|
+
end
|
18
|
+
@@loaded = true
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def unload!
|
24
|
+
if @@loaded
|
25
|
+
@@settings = {}
|
26
|
+
@@loaded = false
|
27
|
+
true
|
28
|
+
else
|
29
|
+
false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# returns processed setting value
|
34
|
+
def method_missing(key, *args)
|
35
|
+
key = key.to_s
|
36
|
+
|
37
|
+
if key[-1] == '='
|
38
|
+
key = key[0..-2]
|
39
|
+
options = args[1] || {}
|
40
|
+
value = args.first
|
41
|
+
set(key, value, options).val
|
42
|
+
else
|
43
|
+
get(key, args.first || {}).val
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def set(key, value = nil, options = {})
|
48
|
+
load!
|
49
|
+
key = key.to_s
|
50
|
+
options.symbolize_keys!
|
51
|
+
|
52
|
+
|
53
|
+
if !options[:type].nil? && options[:type] == 'yaml' && !value.nil? && !valid_yaml?(value)
|
54
|
+
value = value.to_yaml
|
55
|
+
end
|
56
|
+
|
57
|
+
if @@settings[key].nil?
|
58
|
+
write_to_database(key, options.merge(key: key, raw: value))
|
59
|
+
else
|
60
|
+
@@settings[key].update_attributes!(options.merge(raw: value))
|
61
|
+
@@settings[key]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def valid_yaml?(value)
|
66
|
+
begin
|
67
|
+
YAML.safe_load(value)
|
68
|
+
rescue LoadError => e
|
69
|
+
e.message << " [rails_admin_settings] Please add gem 'safe_yaml' to your Gemfile to use yaml settings"
|
70
|
+
raise e
|
71
|
+
rescue Psych::SyntaxError => e
|
72
|
+
return false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def enabled?(key, options = {})
|
77
|
+
get(key, options).enabled?
|
78
|
+
end
|
79
|
+
|
80
|
+
# returns setting object
|
81
|
+
def get(key, options = {})
|
82
|
+
load!
|
83
|
+
key = key.to_s
|
84
|
+
if @@settings[key].nil?
|
85
|
+
create_setting(key, options)
|
86
|
+
else
|
87
|
+
@@settings[key]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def []=(key, value)
|
92
|
+
set(key, value)
|
93
|
+
end
|
94
|
+
|
95
|
+
def [](key)
|
96
|
+
get(key)
|
97
|
+
end
|
98
|
+
|
99
|
+
def save_default(key, value, options = {})
|
100
|
+
load!
|
101
|
+
key = key.to_s
|
102
|
+
options.merge!(default: value)
|
103
|
+
if @@settings[key].nil?
|
104
|
+
create_setting(key, options).val
|
105
|
+
else
|
106
|
+
if @@settings[key].blank?
|
107
|
+
set(key, value).val
|
108
|
+
else
|
109
|
+
@@settings[key].val
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def create_setting(key, options = {})
|
115
|
+
load!
|
116
|
+
key = key.to_s
|
117
|
+
options.symbolize_keys!
|
118
|
+
options[:raw] = options.delete(:default)
|
119
|
+
if @@settings[key].nil?
|
120
|
+
write_to_database(key, options.merge(key: key))
|
121
|
+
else
|
122
|
+
@@settings[key]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# to satisfy rspec
|
127
|
+
def to_ary
|
128
|
+
['Settings']
|
129
|
+
end
|
130
|
+
|
131
|
+
def destroy(key)
|
132
|
+
raise 'please call destroy! to delete setting'
|
133
|
+
end
|
134
|
+
|
135
|
+
def destroy_all
|
136
|
+
raise 'please call destroy_all! to delete all settings'
|
137
|
+
end
|
138
|
+
|
139
|
+
def destroy!(key)
|
140
|
+
load!
|
141
|
+
key = key.to_s
|
142
|
+
unless @@settings[key].nil?
|
143
|
+
@@settings[key].destroy
|
144
|
+
@@settings.delete(key)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def destroy_all!
|
149
|
+
RailsAdminSettings::Setting.destroy_all
|
150
|
+
unload!
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
def write_to_database(key, options)
|
155
|
+
key = key.to_s
|
156
|
+
@@settings[key] = RailsAdminSettings::Setting.create(options)
|
157
|
+
unless @@settings[key].persisted?
|
158
|
+
if @@settings[key].errors[:key].any?
|
159
|
+
@@settings[key] = RailsAdminSettings::Setting.where(key: key).first
|
160
|
+
if options[:raw].blank? && !@@settings[key].blank?
|
161
|
+
# do not update setting if it's not blank in DB and we want to make it blank
|
162
|
+
else
|
163
|
+
unless @@settings[key].update_attributes(options)
|
164
|
+
raise RailsAdminSettings::PersistenceException
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
@@settings[key]
|
170
|
+
end
|
171
|
+
|
172
|
+
def label key
|
173
|
+
get(key).label
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
module RailsAdminSettings
|
2
|
-
module Uploads
|
3
|
-
class CarrierWave < CarrierWave::Uploader::Base
|
4
|
-
def extension_white_list
|
5
|
-
%w(jpg jpeg gif png tiff psd ai txt rtf doc docx xls xlsx ppt pptx odt odx zip rar 7z pdf)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
end
|
1
|
+
module RailsAdminSettings
|
2
|
+
module Uploads
|
3
|
+
class CarrierWave < CarrierWave::Uploader::Base
|
4
|
+
def extension_white_list
|
5
|
+
%w(jpg jpeg gif png tiff psd ai txt rtf doc docx xls xlsx ppt pptx odt odx zip rar 7z pdf)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
9
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module RailsAdminSettings
|
2
|
-
def self.types
|
3
|
-
['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'url', 'domain', 'color']
|
4
|
-
end
|
1
|
+
module RailsAdminSettings
|
2
|
+
def self.types
|
3
|
+
['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'url', 'domain', 'color']
|
4
|
+
end
|
5
5
|
end
|
@@ -1,29 +1,30 @@
|
|
1
|
-
module RailsAdminSettings
|
2
|
-
module Uploads
|
3
|
-
autoload :CarrierWave, "rails_admin_settings/storage/carrierwave"
|
4
|
-
|
5
|
-
def self.included(base)
|
6
|
-
# carrierwave
|
7
|
-
if base.respond_to?(:mount_uploader)
|
8
|
-
# puts "[rails_admin_settings] CarrierWave detected"
|
9
|
-
base.field(:file, type: String)
|
10
|
-
base.mount_uploader(:file, RailsAdminSettings::Uploads::CarrierWave)
|
11
|
-
Settings.file_uploads_supported = true
|
12
|
-
Settings.file_uploads_engine = :carrierwave
|
13
|
-
# paperclip
|
14
|
-
elsif Mongoid.const_defined?('Paperclip')
|
15
|
-
base.send(:include, Mongoid::Paperclip)
|
16
|
-
# puts "[rails_admin_settings] PaperClip detected"
|
17
|
-
base.field(:file, type: String)
|
18
|
-
base.has_mongoid_attached_file(:file)
|
19
|
-
base.send(:attr_accessor, :delete_file)
|
20
|
-
base.before_validation { self.file.clear if self.delete_file == '1' }
|
21
|
-
|
22
|
-
Settings.file_uploads_supported = true
|
23
|
-
Settings.file_uploads_engine = :paperclip
|
24
|
-
else
|
25
|
-
# puts "[rails_admin_settings] Uploads disabled"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
1
|
+
module RailsAdminSettings
|
2
|
+
module Uploads
|
3
|
+
autoload :CarrierWave, "rails_admin_settings/storage/carrierwave"
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
# carrierwave
|
7
|
+
if base.respond_to?(:mount_uploader)
|
8
|
+
# puts "[rails_admin_settings] CarrierWave detected"
|
9
|
+
# base.field(:file, type: String)
|
10
|
+
base.mount_uploader(:file, RailsAdminSettings::Uploads::CarrierWave)
|
11
|
+
Settings.file_uploads_supported = true
|
12
|
+
Settings.file_uploads_engine = :carrierwave
|
13
|
+
# paperclip
|
14
|
+
elsif Mongoid.const_defined?('Paperclip')
|
15
|
+
base.send(:include, Mongoid::Paperclip)
|
16
|
+
# puts "[rails_admin_settings] PaperClip detected"
|
17
|
+
base.field(:file, type: String)
|
18
|
+
base.has_mongoid_attached_file(:file)
|
19
|
+
base.send(:attr_accessor, :delete_file)
|
20
|
+
base.before_validation { self.file.clear if self.delete_file == '1' }
|
21
|
+
|
22
|
+
Settings.file_uploads_supported = true
|
23
|
+
Settings.file_uploads_engine = :paperclip
|
24
|
+
else
|
25
|
+
# puts "[rails_admin_settings] Uploads disabled"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -1,72 +1,72 @@
|
|
1
|
-
module RailsAdminSettings
|
2
|
-
module Validation
|
3
|
-
def self.included(base)
|
4
|
-
base.before_validation do
|
5
|
-
self.raw = default_value if raw.blank?
|
6
|
-
end
|
7
|
-
base.before_validation :sanitize_value, if: :sanitized_type?
|
8
|
-
base.validates_uniqueness_of :key
|
9
|
-
base.validates_inclusion_of :type, in: RailsAdminSettings.types
|
10
|
-
base.validates_numericality_of :raw, if: :integer_type?
|
11
|
-
|
12
|
-
base.validate if: :phone_type? do
|
13
|
-
require_russian_phone do
|
14
|
-
errors.add(:raw, I18n.t('admin.settings.phone_invalid')) unless raw.blank? || RussianPhone::Number.new(raw).valid?
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
base.validate if: :email_type? do
|
19
|
-
require_validates_email_format_of do
|
20
|
-
errors.add(:raw, I18n.t('admin.settings.email_invalid')) unless raw.blank? || ValidatesEmailFormatOf.validate_email_format(raw).nil?
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
base.validate if: :address_type? do
|
25
|
-
require_geocoder do
|
26
|
-
# just raise error if we are trying to use address type without geocoder
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
base.validate if: :file_type? do
|
31
|
-
unless Settings.file_uploads_supported
|
32
|
-
raise '[rails_admin_settings] File type requires either CarrierWave or Paperclip. Check that rails_admin_settings is below them in Gemfile'
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
base.before_validation if: :url_type? do
|
37
|
-
require_addressable do
|
38
|
-
self.raw = Addressable::URI.heuristic_parse(self.raw) unless self.raw.blank?
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
base.before_validation if: :domain_type? do
|
43
|
-
require_addressable do
|
44
|
-
self.raw = Addressable::URI.heuristic_parse(self.raw).host unless self.raw.blank?
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
if Object.const_defined?('Geocoder')
|
49
|
-
base.field(:coordinates, type: Array)
|
50
|
-
base.send(:include, Geocoder::Model::Mongoid)
|
51
|
-
base.geocoded_by(:raw)
|
52
|
-
base.after_validation(:geocode, if: :address_type?)
|
53
|
-
end
|
54
|
-
|
55
|
-
base.validate if: :color_type? do
|
56
|
-
base.validates_with(RailsAdminSettings::HexColorValidator, attributes: :raw)
|
57
|
-
end
|
58
|
-
|
59
|
-
base.validate if: :yaml_type? do
|
60
|
-
require_safe_yaml do
|
61
|
-
unless raw.blank?
|
62
|
-
begin
|
63
|
-
YAML.safe_load(raw)
|
64
|
-
rescue Psych::SyntaxError => e
|
65
|
-
errors.add(:raw, I18n.t('admin.settings.yaml_invalid'))
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
1
|
+
module RailsAdminSettings
|
2
|
+
module Validation
|
3
|
+
def self.included(base)
|
4
|
+
base.before_validation do
|
5
|
+
self.raw = default_value if raw.blank?
|
6
|
+
end
|
7
|
+
base.before_validation :sanitize_value, if: :sanitized_type?
|
8
|
+
base.validates_uniqueness_of :key
|
9
|
+
base.validates_inclusion_of :type, in: RailsAdminSettings.types
|
10
|
+
base.validates_numericality_of :raw, if: :integer_type?
|
11
|
+
|
12
|
+
base.validate if: :phone_type? do
|
13
|
+
require_russian_phone do
|
14
|
+
errors.add(:raw, I18n.t('admin.settings.phone_invalid')) unless raw.blank? || RussianPhone::Number.new(raw).valid?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
base.validate if: :email_type? do
|
19
|
+
require_validates_email_format_of do
|
20
|
+
errors.add(:raw, I18n.t('admin.settings.email_invalid')) unless raw.blank? || ValidatesEmailFormatOf.validate_email_format(raw).nil?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
base.validate if: :address_type? do
|
25
|
+
require_geocoder do
|
26
|
+
# just raise error if we are trying to use address type without geocoder
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
base.validate if: :file_type? do
|
31
|
+
unless Settings.file_uploads_supported
|
32
|
+
raise '[rails_admin_settings] File type requires either CarrierWave or Paperclip. Check that rails_admin_settings is below them in Gemfile'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
base.before_validation if: :url_type? do
|
37
|
+
require_addressable do
|
38
|
+
self.raw = Addressable::URI.heuristic_parse(self.raw) unless self.raw.blank?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
base.before_validation if: :domain_type? do
|
43
|
+
require_addressable do
|
44
|
+
self.raw = Addressable::URI.heuristic_parse(self.raw).host unless self.raw.blank?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
if Object.const_defined?('Geocoder')
|
49
|
+
base.field(:coordinates, type: Array)
|
50
|
+
base.send(:include, Geocoder::Model::Mongoid)
|
51
|
+
base.geocoded_by(:raw)
|
52
|
+
base.after_validation(:geocode, if: :address_type?)
|
53
|
+
end
|
54
|
+
|
55
|
+
base.validate if: :color_type? do
|
56
|
+
base.validates_with(RailsAdminSettings::HexColorValidator, attributes: :raw)
|
57
|
+
end
|
58
|
+
|
59
|
+
base.validate if: :yaml_type? do
|
60
|
+
require_safe_yaml do
|
61
|
+
unless raw.blank?
|
62
|
+
begin
|
63
|
+
YAML.safe_load(raw)
|
64
|
+
rescue Psych::SyntaxError => e
|
65
|
+
errors.add(:raw, I18n.t('admin.settings.yaml_invalid'))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/spec/advanced_usage_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe 'Settings advanced usage' do
|
6
|
-
it 'with defaults' do
|
7
|
-
s = Settings.email(default: 'test@example.com')
|
8
|
-
s.should eq 'test@example.com'
|
9
|
-
Settings.get(:email).to_s.should eq 'test@example.com'
|
10
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'Settings advanced usage' do
|
6
|
+
it 'with defaults' do
|
7
|
+
s = Settings.email(default: 'test@example.com')
|
8
|
+
s.should eq 'test@example.com'
|
9
|
+
Settings.get(:email).to_s.should eq 'test@example.com'
|
10
|
+
end
|
11
11
|
end
|