rails_admin_settings 1.4.0 → 1.4.1
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/.travis.yml +13 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +11 -0
- data/lib/rails_admin_settings.rb +75 -42
- data/lib/rails_admin_settings/settings.rb +1 -26
- data/lib/rails_admin_settings/uploads.rb +1 -1
- data/lib/rails_admin_settings/validation.rb +88 -57
- data/lib/rails_admin_settings/version.rb +1 -1
- metadata +1 -3
- data/.ruby-gemset +0 -2
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29fd0a6b9da6e78369f829515f98217818eee87ca05f4dfc6223265f8f1f177d
|
4
|
+
data.tar.gz: bd6b04c0cdc0ba33004138e24d7ab082e020cffaa61b2efa4f28c1168ee8cd6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a46ecf577c6f31320bf286d48a280717ae2a199e71fbd379edd11b18eda0a364b806e247485d26660e54836254c46f4b22a44f59722d46c5fac8cdc26129f6dc
|
7
|
+
data.tar.gz: 1fc1c269cbfea981a88305204ed5b12ec9d00bd631b9687e1b42c516cddc5c5de63e91e9149bfe5c909b5965689cad12c05e5873a1206f6c7d41f17e7785bb18
|
data/.travis.yml
CHANGED
@@ -9,12 +9,21 @@ rvm:
|
|
9
9
|
- 2.5.0
|
10
10
|
|
11
11
|
env:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
global:
|
13
|
+
- CC_TEST_REPORTER_ID=f23ba257d0a12c588551991b4377e3eb218c1ff80050bc48c6b18c49ca16cb62
|
14
|
+
matrix:
|
15
|
+
- "UPLOADS=paperclip"
|
16
|
+
- "UPLOADS=carrierwave"
|
17
|
+
- "RAILS=1 UPLOADS=paperclip"
|
18
|
+
- "RAILS=1 UPLOADS=carrierwave"
|
16
19
|
|
17
20
|
gemfile:
|
18
21
|
- gemfiles/mongoid-6.0.gemfile
|
19
22
|
- gemfiles/mongoid-6.3.gemfile
|
20
23
|
|
24
|
+
before_script:
|
25
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
26
|
+
- chmod +x ./cc-test-reporter
|
27
|
+
- ./cc-test-reporter before-build
|
28
|
+
after_script:
|
29
|
+
- ./cc-test-reporter after-build --debug --exit-code $TRAVIS_TEST_RESULT
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
[](http://travis-ci.org/rs-pro/rails_admin_settings)
|
4
4
|
[](https://gemnasium.com/rs-pro/rails_admin_settings)
|
5
|
+
[](https://badge.fury.io/rb/rails_admin_settings)
|
6
|
+
[](https://hakiri.io/github/rs-pro/rails_admin_settings/master)
|
7
|
+
[](https://codeclimate.com/github/rs-pro/rails_admin_settings/maintainability)
|
8
|
+
[](https://codeclimate.com/github/rs-pro/rails_admin_settings/test_coverage)
|
5
9
|
|
6
10
|
App settings editable via RailsAdmin with support for ActiveRecord and Mongoid.
|
7
11
|
|
@@ -134,6 +138,13 @@ Simple format types are stored in db as-is.
|
|
134
138
|
|
135
139
|
Rails admin management for settings is supported out of the box
|
136
140
|
|
141
|
+
It is recommended to disable new/create page (it is not supported by design, settings are defined in ruby code).
|
142
|
+
Disable via cancan:
|
143
|
+
|
144
|
+
```
|
145
|
+
cannot :create, RailsAdminSettings::Setting
|
146
|
+
```
|
147
|
+
|
137
148
|
## Contributing
|
138
149
|
|
139
150
|
1. Fork it
|
data/lib/rails_admin_settings.rb
CHANGED
@@ -6,6 +6,20 @@ module RailsAdminSettings
|
|
6
6
|
end
|
7
7
|
cattr_accessor :scrubber
|
8
8
|
|
9
|
+
class PersistenceException < Exception
|
10
|
+
end
|
11
|
+
|
12
|
+
autoload :Mongoid, "rails_admin_settings/mongoid"
|
13
|
+
autoload :Fallback, "rails_admin_settings/fallback"
|
14
|
+
autoload :Namespaced, "rails_admin_settings/namespaced"
|
15
|
+
autoload :Processing, "rails_admin_settings/processing"
|
16
|
+
autoload :Validation, "rails_admin_settings/validation"
|
17
|
+
autoload :RequireHelpers, "rails_admin_settings/require_helpers"
|
18
|
+
autoload :RailsAdminConfig, "rails_admin_settings/rails_admin_config"
|
19
|
+
autoload :Uploads, "rails_admin_settings/uploads"
|
20
|
+
autoload :HexColorValidator, "rails_admin_settings/hex_color_validator"
|
21
|
+
autoload :Dumper, "rails_admin_settings/dumper"
|
22
|
+
|
9
23
|
class << self
|
10
24
|
def orm
|
11
25
|
if defined?(::Mongoid)
|
@@ -22,55 +36,74 @@ module RailsAdminSettings
|
|
22
36
|
def active_record?
|
23
37
|
orm == :active_record
|
24
38
|
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class PersistenceException < Exception
|
28
|
-
end
|
29
|
-
|
30
|
-
autoload :Mongoid, "rails_admin_settings/mongoid"
|
31
|
-
autoload :Fallback, "rails_admin_settings/fallback"
|
32
|
-
autoload :Namespaced, "rails_admin_settings/namespaced"
|
33
|
-
autoload :Processing, "rails_admin_settings/processing"
|
34
|
-
autoload :Validation, "rails_admin_settings/validation"
|
35
|
-
autoload :RequireHelpers, "rails_admin_settings/require_helpers"
|
36
|
-
autoload :RailsAdminConfig, "rails_admin_settings/rails_admin_config"
|
37
|
-
autoload :Uploads, "rails_admin_settings/uploads"
|
38
|
-
autoload :HexColorValidator, "rails_admin_settings/hex_color_validator"
|
39
|
-
autoload :Dumper, "rails_admin_settings/dumper"
|
40
39
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
40
|
+
def apply_defaults!(file, verbose = false)
|
41
|
+
if File.file?(file)
|
42
|
+
puts "[settings] Loading from #{file}" if verbose
|
43
|
+
if defined?(Psych) && Psych.respond_to?(:safe_load)
|
44
|
+
yaml = Psych.safe_load(File.read(file))
|
45
|
+
else
|
46
|
+
yaml = YAML.load(File.read(file), safe: true)
|
47
|
+
end
|
48
|
+
yaml.each_pair do |namespace, vals|
|
49
|
+
process_defaults(namespace, vals, verbose)
|
50
|
+
end
|
52
51
|
end
|
53
52
|
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.track_history!
|
57
|
-
return false unless Settings.table_exists?
|
58
53
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
54
|
+
def process_defaults(namespace, vals, verbose = false)
|
55
|
+
vals.symbolize_keys!
|
56
|
+
n = Settings.ns(namespace)
|
57
|
+
vals.each_pair do |key, val|
|
58
|
+
val.symbolize_keys!
|
59
|
+
if !val[:kind].nil? && (val[:kind] == 'file' || val[:kind] == 'image')
|
60
|
+
unless Settings.file_uploads_supported
|
61
|
+
raise PersistenceException, "Fatal: setting #{key} is #{val[:type]} but file upload engine is not detected"
|
62
|
+
end
|
63
|
+
value = File.open(Settings.root_file_path.join(val.delete(:value)))
|
64
|
+
else
|
65
|
+
value = val.delete(:value)
|
66
|
+
end
|
67
|
+
puts "#{key} - default '#{value}' current '#{Settings.get(key).raw}'" if verbose
|
68
|
+
n.set(key, value, val.merge(overwrite: false))
|
65
69
|
end
|
66
|
-
|
67
|
-
|
70
|
+
n.unload!
|
71
|
+
end
|
72
|
+
|
73
|
+
def migrate!
|
74
|
+
if RailsAdminSettings.mongoid?
|
75
|
+
RailsAdminSettings::Setting.where(:ns.exists => false).update_all(ns: 'main')
|
76
|
+
RailsAdminSettings::Setting.all.each do |s|
|
77
|
+
s.kind = s.read_attribute(:type) if !s.read_attribute(:type).blank? && s.kind != s.read_attribute(:type)
|
78
|
+
s.save! if s.changed?
|
79
|
+
s.unset(:type)
|
80
|
+
end
|
68
81
|
else
|
69
|
-
|
82
|
+
if Settings.table_exists?
|
83
|
+
RailsAdminSettings::Setting.where("ns IS NULL").update_all(ns: 'main')
|
84
|
+
end
|
70
85
|
end
|
71
|
-
|
72
|
-
|
73
|
-
|
86
|
+
end
|
87
|
+
|
88
|
+
def track_history!
|
89
|
+
return false unless Settings.table_exists?
|
90
|
+
|
91
|
+
if mongoid?
|
92
|
+
if ::Mongoid.const_defined?('History')
|
93
|
+
RailsAdminSettings::Setting.send(:include, ::Mongoid::History::Trackable)
|
94
|
+
RailsAdminSettings::Setting.send(:track_history, {track_create: true, track_destroy: true})
|
95
|
+
else
|
96
|
+
puts "[rails_admin_settings] WARN unable to track_history: Mongoid::History not loaded!"
|
97
|
+
end
|
98
|
+
if ::Mongoid.const_defined?('Userstamp')
|
99
|
+
RailsAdminSettings::Setting.send(:include, ::Mongoid::Userstamp)
|
100
|
+
else
|
101
|
+
puts "[rails_admin_settings] WARN unable to track_history: Mongoid::Userstamp not loaded!"
|
102
|
+
end
|
103
|
+
elsif active_record?
|
104
|
+
if defined?(PaperTrail) && PaperTrail::Version.table_exists?
|
105
|
+
RailsAdminSettings::Setting.send(:has_paper_trail)
|
106
|
+
end
|
74
107
|
end
|
75
108
|
end
|
76
109
|
end
|
@@ -64,32 +64,7 @@ class Settings < BasicObject
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def apply_defaults!(file, verbose = false)
|
67
|
-
|
68
|
-
puts "[settings] Loading from #{file}" if verbose
|
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
|
74
|
-
yaml.each_pair do |namespace, vals|
|
75
|
-
vals.symbolize_keys!
|
76
|
-
n = ns(namespace)
|
77
|
-
vals.each_pair do |key, val|
|
78
|
-
val.symbolize_keys!
|
79
|
-
if !val[:kind].nil? && (val[:kind] == 'file' || val[:kind] == 'image')
|
80
|
-
unless @@file_uploads_supported
|
81
|
-
::Kernel.raise ::RailsAdminSettings::PersistenceException, "Fatal: setting #{key} is #{val[:type]} but file upload engine is not detected"
|
82
|
-
end
|
83
|
-
value = File.open(root_file_path.join(val.delete(:value)))
|
84
|
-
else
|
85
|
-
value = val.delete(:value)
|
86
|
-
end
|
87
|
-
puts "#{key} - default '#{value}' current '#{Settings.get(key).raw}'" if verbose
|
88
|
-
n.set(key, value, val.merge(overwrite: false))
|
89
|
-
end
|
90
|
-
n.unload!
|
91
|
-
end
|
92
|
-
end
|
67
|
+
RailsAdminSettings.apply_defaults!(file, verbose)
|
93
68
|
end
|
94
69
|
|
95
70
|
def get(key, options = {})
|
@@ -31,7 +31,7 @@ module RailsAdminSettings
|
|
31
31
|
Settings.file_uploads_supported = true
|
32
32
|
Settings.file_uploads_engine = :paperclip
|
33
33
|
elsif RailsAdminSettings.active_record? && defined?(Paperclip)
|
34
|
-
base.
|
34
|
+
base.has_attached_file(:file, self.paperclip_options)
|
35
35
|
if base.respond_to?(:do_not_validate_attachment_file_type)
|
36
36
|
base.do_not_validate_attachment_file_type :file
|
37
37
|
end
|
@@ -1,91 +1,122 @@
|
|
1
1
|
module RailsAdminSettings
|
2
2
|
module Validation
|
3
|
-
|
4
|
-
base
|
5
|
-
|
3
|
+
class << self
|
4
|
+
def included(base)
|
5
|
+
base.before_validation do
|
6
|
+
self.raw = default_serializable_value if raw.blank?
|
7
|
+
end
|
8
|
+
base.before_validation :preprocess_value, if: :preprocessed_kind?
|
9
|
+
base.validates_uniqueness_of :key, scope: :ns
|
10
|
+
base.validates_inclusion_of :kind, in: RailsAdminSettings.kinds
|
11
|
+
base.validates_numericality_of :raw, if: :integer_kind?
|
12
|
+
|
13
|
+
add_validators(base)
|
6
14
|
end
|
7
|
-
base.before_validation :preprocess_value, if: :preprocessed_kind?
|
8
|
-
base.validates_uniqueness_of :key, scope: :ns
|
9
|
-
base.validates_inclusion_of :kind, in: RailsAdminSettings.kinds
|
10
|
-
base.validates_numericality_of :raw, if: :integer_kind?
|
11
15
|
|
12
|
-
base
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
def add_validators(base)
|
17
|
+
add_color_validator(base)
|
18
|
+
add_file_validator(base)
|
19
|
+
add_email_validator(base)
|
20
|
+
add_url_validator(base)
|
21
|
+
add_phone_validator(base)
|
22
|
+
add_geo_validator(base)
|
23
|
+
add_yaml_validator(base)
|
24
|
+
add_json_validator(base)
|
16
25
|
end
|
17
26
|
|
18
|
-
base
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
27
|
+
def add_color_validator(base)
|
28
|
+
base.validates_with(RailsAdminSettings::HexColorValidator, attributes: :raw, if: :color_kind?)
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_file_validator(base)
|
32
|
+
base.validate if: :file_kind? do
|
33
|
+
unless Settings.file_uploads_supported
|
34
|
+
raise '[rails_admin_settings] File kind requires either CarrierWave or Paperclip. Check that rails_admin_settings is below them in Gemfile'
|
26
35
|
end
|
27
36
|
end
|
28
37
|
end
|
29
38
|
|
30
|
-
base
|
31
|
-
|
32
|
-
|
39
|
+
def add_email_validator(base)
|
40
|
+
base.validate if: :email_kind? do
|
41
|
+
require_validates_email_format_of do
|
42
|
+
errors.add(:raw, I18n.t('admin.settings.email_invalid')) unless raw.blank? || ValidatesEmailFormatOf.validate_email_format(raw).nil?
|
43
|
+
end
|
33
44
|
end
|
34
45
|
end
|
35
46
|
|
36
|
-
base
|
37
|
-
|
38
|
-
|
47
|
+
def add_url_validator(base)
|
48
|
+
base.before_validation if: :url_kind? do
|
49
|
+
require_addressable do
|
50
|
+
self.raw = Addressable::URI.heuristic_parse(self.raw) unless self.raw.blank?
|
51
|
+
end
|
39
52
|
end
|
40
|
-
end
|
41
53
|
|
42
|
-
|
43
|
-
|
44
|
-
|
54
|
+
base.before_validation if: :domain_kind? do
|
55
|
+
require_addressable do
|
56
|
+
self.raw = Addressable::URI.heuristic_parse(self.raw).host unless self.raw.blank?
|
57
|
+
end
|
45
58
|
end
|
46
59
|
end
|
47
60
|
|
48
|
-
base
|
49
|
-
|
50
|
-
|
61
|
+
def add_phone_validator(base)
|
62
|
+
base.validate if: :phone_kind? do
|
63
|
+
require_russian_phone do
|
64
|
+
errors.add(:raw, I18n.t('admin.settings.phone_invalid')) unless raw.blank? || RussianPhone::Number.new(raw).valid?
|
65
|
+
end
|
51
66
|
end
|
52
|
-
end
|
53
67
|
|
54
|
-
|
55
|
-
|
56
|
-
|
68
|
+
base.validate if: :phones_kind? do
|
69
|
+
require_russian_phone do
|
70
|
+
unless raw.blank?
|
71
|
+
invalid_phones = raw.gsub("\r", '').split("\n").inject([]) do |memo, value|
|
72
|
+
memo << value unless RussianPhone::Number.new(value).valid?
|
73
|
+
memo
|
74
|
+
end
|
75
|
+
errors.add(:raw, I18n.t('admin.settings.phones_invalid', phones: invalid_phones * ', ')) unless invalid_phones.empty?
|
76
|
+
end
|
77
|
+
end
|
57
78
|
end
|
79
|
+
|
58
80
|
end
|
59
81
|
|
60
|
-
|
61
|
-
if
|
62
|
-
|
63
|
-
|
82
|
+
def add_geo_validator(base)
|
83
|
+
base.validate if: :address_kind? do
|
84
|
+
require_geocoder do
|
85
|
+
# just raise error if we are trying to use address kind without geocoder
|
86
|
+
end
|
87
|
+
end
|
88
|
+
if Object.const_defined?('Geocoder')
|
89
|
+
if RailsAdminSettings.mongoid?
|
90
|
+
base.field(:coordinates, type: Array)
|
91
|
+
base.send(:include, Geocoder::Model::Mongoid)
|
92
|
+
end
|
93
|
+
base.geocoded_by(:raw)
|
94
|
+
base.after_validation(:geocode, if: :address_kind?)
|
64
95
|
end
|
65
|
-
base.geocoded_by(:raw)
|
66
|
-
base.after_validation(:geocode, if: :address_kind?)
|
67
96
|
end
|
68
97
|
|
69
|
-
base
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
98
|
+
def add_yaml_validator(base)
|
99
|
+
base.validate if: :yaml_kind? do
|
100
|
+
require_safe_yaml do
|
101
|
+
unless raw.blank?
|
102
|
+
begin
|
103
|
+
YAML.safe_load(raw)
|
104
|
+
rescue Psych::SyntaxError => e
|
105
|
+
errors.add(:raw, I18n.t('admin.settings.yaml_invalid'))
|
106
|
+
end
|
78
107
|
end
|
79
108
|
end
|
80
109
|
end
|
81
110
|
end
|
82
111
|
|
83
|
-
base
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
112
|
+
def add_json_validator(base)
|
113
|
+
base.validate if: :json_kind? do
|
114
|
+
unless raw.blank?
|
115
|
+
begin
|
116
|
+
JSON.load(raw)
|
117
|
+
rescue JSON::ParserError => e
|
118
|
+
errors.add(:raw, I18n.t('admin.settings.json_invalid'))
|
119
|
+
end
|
89
120
|
end
|
90
121
|
end
|
91
122
|
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: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Tv
|
@@ -271,8 +271,6 @@ extra_rdoc_files: []
|
|
271
271
|
files:
|
272
272
|
- ".gitignore"
|
273
273
|
- ".rspec"
|
274
|
-
- ".ruby-gemset"
|
275
|
-
- ".ruby-version"
|
276
274
|
- ".travis.yml"
|
277
275
|
- CHANGELOG.md
|
278
276
|
- Gemfile
|
data/.ruby-gemset
DELETED
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1.5
|