rails_admin_settings 0.5.5 → 0.6.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +2 -1
  4. data/CHANGELOG.md +11 -0
  5. data/app/models/rails_admin_settings/setting.rb +27 -5
  6. data/app/views/rails_admin/main/_setting_value.html.haml +1 -1
  7. data/config/locales/{en.rails_admin_settings.yml → en.yml} +0 -0
  8. data/config/locales/{ru.rails_admin_settings.yml → ru.yml} +20 -20
  9. data/lib/rails_admin_settings/dumper.rb +12 -0
  10. data/lib/rails_admin_settings/engine.rb +3 -0
  11. data/lib/rails_admin_settings/fallback.rb +19 -0
  12. data/lib/rails_admin_settings/hex_color_validator.rb +1 -1
  13. data/lib/rails_admin_settings/namespaced.rb +201 -0
  14. data/lib/rails_admin_settings/rails_admin_config.rb +3 -6
  15. data/lib/rails_admin_settings/railtie.rb +7 -0
  16. data/lib/rails_admin_settings/settings.rb +63 -165
  17. data/lib/rails_admin_settings/tasks.rb +25 -0
  18. data/lib/rails_admin_settings/types.rb +15 -1
  19. data/lib/rails_admin_settings/validation.rb +2 -4
  20. data/lib/rails_admin_settings/version.rb +1 -1
  21. data/lib/rails_admin_settings.rb +4 -0
  22. data/rails_admin_settings.gemspec +8 -7
  23. data/spec/carrierwave_spec.rb +7 -2
  24. data/spec/database_trickery_spec.rb +5 -7
  25. data/spec/defaults_spec.rb +53 -0
  26. data/spec/enabling_spec.rb +29 -0
  27. data/spec/label_spec.rb +2 -2
  28. data/spec/namespaced_spec.rb +41 -0
  29. data/spec/paperclip_spec.rb +5 -0
  30. data/spec/settings_spec.rb +13 -4
  31. data/spec/spec_helper.rb +4 -0
  32. data/spec/support/defaults.yml +15 -0
  33. data/spec/support/defaults_w_file.yml +19 -0
  34. data/spec/support/mongoid.yml +1 -1
  35. data/spec/types_spec.rb +12 -9
  36. metadata +49 -19
@@ -1,208 +1,106 @@
1
1
  require 'thread'
2
2
 
3
- class Settings
4
- cattr_accessor :file_uploads_supported, :file_uploads_engine, :settings
3
+ # we are inheriting from BasicObject so we don't get a bunch of methods from
4
+ # Kernel or Object
5
+ class Settings < BasicObject
6
+ cattr_accessor :file_uploads_supported, :file_uploads_engine
5
7
  @@file_uploads_supported = false
6
8
  @@file_uploads_engine = false
7
- @@mutex = Mutex.new
9
+ @@namespaces = {}
10
+ @@mutex = ::Mutex.new
8
11
 
9
12
  class << self
10
- @@loaded = false
11
- @@settings = {}
12
-
13
- def load!
14
- @@mutex.synchronize do
15
- if @@loaded
16
- false
17
- else
18
- @@settings = {}
19
- RailsAdminSettings::Setting.all.each do |setting|
20
- @@settings[setting.key] = setting
21
- end
22
- @@loaded = true
23
- true
24
- end
25
- end
26
- end
27
-
28
- def unload!
29
- @@mutex.synchronize do
30
- if @@loaded
31
- @@settings = {}
32
- @@loaded = false
33
- true
34
- else
35
- false
36
- end
37
- end
38
- end
39
-
40
- # returns processed setting value
41
- def method_missing(key, *args)
42
- key = key.to_s
43
-
44
- if key[-1] == '='
45
- key = key[0..-2]
46
- options = args[1] || {}
47
- value = args.first
48
- set(key, value, options).val
49
- else
50
- get(key, args.first || {}).val
51
- end
52
- end
53
-
54
- def set(key, value = nil, options = {})
55
- load!
56
- key = key.to_s
13
+ def ns(name, options = {})
57
14
  options.symbolize_keys!
58
-
59
-
60
- if !options[:type].nil? && options[:type] == 'yaml' && !value.nil? && !valid_yaml?(value)
61
- value = value.to_yaml
62
- end
63
-
64
- is_file = !options[:type].nil? && (options[:type] == 'image' || options[:type] == 'file')
65
- if is_file
66
- options[:raw] = ''
15
+ if name.nil?
16
+ name = 'main'
67
17
  else
68
- options[:raw] = value
18
+ name = name.to_s
69
19
  end
70
-
71
- if @@settings[key].nil?
72
- write_to_database(key, options.merge(key: key))
73
- else
74
- @@mutex.synchronize do
75
- @@settings[key].update_attributes!(options)
76
- end
20
+ @@mutex.synchronize do
21
+ @@namespaces[name] ||= ::RailsAdminSettings::Namespaced.new(name.to_s)
77
22
  end
78
-
79
- if is_file
80
- @@mutex.synchronize do
81
- @@settings[key].file = value
82
- @@settings[key].save!
83
- end
23
+ if options[:fallback].nil?
24
+ @@namespaces[name]
25
+ else
26
+ ::RailsAdminSettings::Fallback.new(@@namespaces[name], options[:fallback])
84
27
  end
85
-
86
- @@settings[key]
87
28
  end
88
29
 
89
- def valid_yaml?(value)
90
- begin
91
- YAML.safe_load(value)
92
- rescue LoadError => e
93
- e.message << " [rails_admin_settings] Please add gem 'safe_yaml' to your Gemfile to use yaml settings"
94
- raise e
95
- rescue Psych::SyntaxError => e
96
- return false
30
+ def unload!
31
+ @@mutex.synchronize do
32
+ @@namespaces.values.map(&:unload!)
33
+ @@namespaces = {}
97
34
  end
98
35
  end
99
36
 
100
- def enabled?(key, options = {})
101
- get(key, options).enabled?
37
+ def destroy_all!
38
+ RailsAdminSettings::Setting.destroy_all
39
+ unload!
102
40
  end
103
41
 
104
- # returns setting object
105
- def get(key, options = {})
106
- load!
107
- key = key.to_s
108
- if @@settings[key].nil?
109
- create_setting(key, options)
42
+ def root_file_path
43
+ if Object.const_defined?('Rails')
44
+ Rails.root
110
45
  else
111
- @@settings[key]
46
+ Pathname.new(File.dirname(__FILE__)).join('../..')
112
47
  end
113
48
  end
114
49
 
115
- def []=(key, value)
116
- set(key, value)
117
- end
118
-
119
- def [](key)
120
- get(key)
121
- end
122
-
123
- def save_default(key, value, options = {})
124
- load!
125
- key = key.to_s
126
- options.merge!(default: value)
127
-
128
- if @@settings[key].nil?
129
- create_setting(key, options).val
130
- else
131
- if @@settings[key].blank?
132
- set(key, value).val
133
- else
134
- @@settings[key].val
50
+ def apply_defaults!(file)
51
+ if File.file?(file)
52
+ yaml = YAML.load(File.read(file), safe: true)
53
+ yaml.each_pair do |namespace, vals|
54
+ vals.symbolize_keys!
55
+ n = ns(namespace)
56
+ vals.each_pair do |key, val|
57
+ val.symbolize_keys!
58
+ if !val[:type].nil? && (val[:type] == 'file' || val[:type] == 'image')
59
+ unless @@file_uploads_supported
60
+ ::Kernel.raise ::RailsAdminSettings::PersistenceException, "Fatal: setting #{key} is #{val[:type]} but file upload engine is not detected"
61
+ end
62
+ value = File.open(root_file_path.join(val.delete(:value)))
63
+ else
64
+ value = val.delete(:value)
65
+ end
66
+ n.set(key, value, val.merge(overwrite: false))
67
+ end
68
+ n.unload!
135
69
  end
136
70
  end
137
71
  end
138
72
 
139
- def create_setting(key, options = {})
140
- load!
141
- key = key.to_s
73
+ def get(key, options = {})
142
74
  options.symbolize_keys!
143
- options[:raw] = options.delete(:default)
144
75
 
145
- if @@settings[key].nil?
146
- write_to_database(key, options.merge(key: key))
76
+ if options[:ns].nil? || options[:ns].to_s == 'main'
77
+ ns('main').get(key, options)
147
78
  else
148
- @@settings[key]
79
+ ns(options[:ns]).get(key, options)
149
80
  end
150
81
  end
151
82
 
152
- # to satisfy rspec
153
- def to_ary
154
- ['Settings']
155
- end
156
-
157
- def destroy(key)
158
- raise 'please call destroy! to delete setting'
159
- end
160
-
161
- def destroy_all
162
- raise 'please call destroy_all! to delete all settings'
163
- end
164
-
165
- def destroy!(key)
166
- load!
167
- key = key.to_s
83
+ def set(key, value = nil, options = {})
84
+ options.symbolize_keys!
168
85
 
169
- @@mutex.synchronize do
170
- unless @@settings[key].nil?
171
- @@settings[key].destroy
172
- @@settings.delete(key)
173
- end
86
+ if options[:ns].nil? || options[:ns].to_s == 'main'
87
+ ns('main').set(key, value, options)
88
+ else
89
+ ns(options[:ns]).set(key, value, options)
174
90
  end
175
91
  end
176
92
 
177
- def destroy_all!
178
- RailsAdminSettings::Setting.destroy_all
179
- unload!
93
+ def save_default(key, value, options = {})
94
+ set(key, value, options.merge(overwrite: false))
180
95
  end
181
96
 
182
-
183
- def write_to_database(key, options)
184
- key = key.to_s
185
-
186
- @@mutex.synchronize do
187
- @@settings[key] = RailsAdminSettings::Setting.create(options)
188
- unless @@settings[key].persisted?
189
- if @@settings[key].errors[:key].any?
190
- @@settings[key] = RailsAdminSettings::Setting.where(key: key).first
191
- if options[:raw].blank? && !@@settings[key].blank?
192
- # do not update setting if it's not blank in DB and we want to make it blank
193
- else
194
- unless @@settings[key].update_attributes(options)
195
- raise RailsAdminSettings::PersistenceException
196
- end
197
- end
198
- end
199
- end
200
- @@settings[key]
201
- end
97
+ def create_setting(key, value, options = {})
98
+ set(key, nil, options.merge(overwrite: false))
202
99
  end
203
100
 
204
- def label key
205
- get(key).label
101
+ def method_missing(*args)
102
+ ns('main').__send__(*args)
206
103
  end
207
104
  end
208
105
  end
106
+
@@ -0,0 +1,25 @@
1
+ # require this file to load the tasks
2
+ require 'rake'
3
+
4
+ # Require sitemap_generator at runtime. If we don't do this the ActionView helpers are included
5
+ # before the Rails environment can be loaded by other Rake tasks, which causes problems
6
+ # for those tasks when rendering using ActionView.
7
+ namespace :settings do
8
+ # Require sitemap_generator only. When installed as a plugin the require will fail, so in
9
+ # that case, load the environment first.
10
+ task :require do
11
+ Rake::Task['environment'].invoke
12
+ end
13
+
14
+ desc "Dump settings to config/settings.yml"
15
+ task :dump => ['settings:require'] do
16
+ path = Settings.root_file_path.join('config/settings.yml')
17
+ RailsAdminSettings::Dumper.dump(path)
18
+ puts "dumped settings to #{path}"
19
+ end
20
+
21
+ desc "Delete all settings"
22
+ task :delete => ['settings:require'] do
23
+ Settings.destroy_all!
24
+ end
25
+ end
@@ -1,5 +1,19 @@
1
1
  module RailsAdminSettings
2
2
  def self.types
3
- ['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'image', 'url', 'domain', 'color']
3
+ [
4
+ 'string',
5
+ 'integer',
6
+ 'html',
7
+ 'sanitized',
8
+ 'yaml',
9
+ 'phone',
10
+ 'email',
11
+ 'address',
12
+ 'file',
13
+ 'image',
14
+ 'url',
15
+ 'domain',
16
+ 'color'
17
+ ]
4
18
  end
5
19
  end
@@ -5,7 +5,7 @@ module RailsAdminSettings
5
5
  self.raw = default_value if raw.blank?
6
6
  end
7
7
  base.before_validation :sanitize_value, if: :sanitized_type?
8
- base.validates_uniqueness_of :key
8
+ base.validates_uniqueness_of :key, scope: :ns
9
9
  base.validates_inclusion_of :type, in: RailsAdminSettings.types
10
10
  base.validates_numericality_of :raw, if: :integer_type?
11
11
 
@@ -52,9 +52,7 @@ 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
55
+ base.validates_with(RailsAdminSettings::HexColorValidator, attributes: :raw, if: :color_type?)
58
56
 
59
57
  base.validate if: :yaml_type? do
60
58
  require_safe_yaml do
@@ -1,3 +1,3 @@
1
1
  module RailsAdminSettings
2
- VERSION = "0.5.5"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -4,18 +4,22 @@ module RailsAdminSettings
4
4
  class PersistenceException < Exception
5
5
  end
6
6
 
7
+ autoload :Fallback, "rails_admin_settings/fallback"
8
+ autoload :Namespaced, "rails_admin_settings/namespaced"
7
9
  autoload :Processing, "rails_admin_settings/processing"
8
10
  autoload :Validation, "rails_admin_settings/validation"
9
11
  autoload :RequireHelpers, "rails_admin_settings/require_helpers"
10
12
  autoload :RailsAdminConfig, "rails_admin_settings/rails_admin_config"
11
13
  autoload :Uploads, "rails_admin_settings/uploads"
12
14
  autoload :HexColorValidator, "rails_admin_settings/hex_color_validator"
15
+ autoload :Dumper, "rails_admin_settings/dumper"
13
16
  end
14
17
 
15
18
  require "rails_admin_settings/types"
16
19
  require "rails_admin_settings/settings"
17
20
 
18
21
  if Object.const_defined?('Rails')
22
+ require "rails_admin_settings/railtie"
19
23
  require "rails_admin_settings/engine"
20
24
  else
21
25
  require File.dirname(__FILE__) + '/../app/models/rails_admin_settings/setting.rb'
@@ -21,14 +21,14 @@ Gem::Specification.new do |spec|
21
21
  spec.add_runtime_dependency "mongoid", ">= 3.1"
22
22
 
23
23
  spec.add_development_dependency "bundler"
24
- spec.add_development_dependency "rake", "~> 10.0.3"
25
- spec.add_development_dependency "rspec", "~> 2.13.0"
26
- spec.add_development_dependency "mongoid-rspec", "~> 1.7.0"
27
- spec.add_development_dependency "simplecov", "~> 0.7.1"
28
- spec.add_development_dependency "database_cleaner", "~> 0.9.1"
29
- spec.add_development_dependency "factory_girl", "~> 4.2.0"
24
+ spec.add_development_dependency "rake", "~> 10.1.1"
25
+ spec.add_development_dependency "rspec", "~> 2.14.1"
26
+ spec.add_development_dependency "mongoid-rspec", "~> 1.10.0"
27
+ spec.add_development_dependency "simplecov", "~> 0.8.2"
28
+ spec.add_development_dependency "database_cleaner", "~> 1.2.0"
29
+ spec.add_development_dependency "factory_girl", "~> 4.3.0"
30
30
 
31
- spec.add_development_dependency "safe_yaml", "~> 0.8.6"
31
+ spec.add_development_dependency "safe_yaml", "~> 1.0.0"
32
32
  spec.add_development_dependency "russian_phone", "~> 0.3.2"
33
33
  spec.add_development_dependency "sanitize", "~> 2.0.3"
34
34
  spec.add_development_dependency "validates_email_format_of", "~> 1.5.3"
@@ -37,4 +37,5 @@ Gem::Specification.new do |spec|
37
37
 
38
38
  spec.add_development_dependency "glebtv-carrierwave-mongoid"
39
39
  spec.add_development_dependency "glebtv-mongoid-paperclip"
40
+ spec.add_development_dependency "pry"
40
41
  end
@@ -18,7 +18,7 @@ describe "Uploads" do
18
18
 
19
19
  Settings.get(:file).file.file.file.should eq "#{File.dirname(__FILE__).gsub('/spec', '/')}uploads/1024x768.gif"
20
20
 
21
- File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
21
+ File.exists?(Settings.root_file_path.join("uploads/1024x768.gif")).should be_true
22
22
  end
23
23
 
24
24
  it 'supports image type' do
@@ -29,7 +29,12 @@ describe "Uploads" do
29
29
 
30
30
  Settings.get(:file).file.file.file.should eq "#{File.dirname(__FILE__).gsub('/spec', '/')}uploads/1024x768.gif"
31
31
 
32
- File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
32
+ File.exists?(Settings.root_file_path.join("uploads/1024x768.gif")).should be_true
33
+ end
34
+
35
+ it 'supports defaults' do
36
+ Settings.apply_defaults!(File.join(File.dirname(__FILE__), 'support/defaults_w_file.yml'))
37
+ File.exists?(Settings.root_file_path.join("uploads/1024x768.gif")).should be_true
33
38
  end
34
39
  end
35
40
  end
@@ -4,7 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  # this tests check how well rails_admin_settings handles settings disappearing from DB during execution
6
6
  # real usage: app specs with database_cleaner enabled
7
- describe Settings do
7
+ describe 'Database trickery' do
8
8
 
9
9
  it "should handle settings disappearing from DB" do
10
10
  email = "my@mail.ru"
@@ -19,30 +19,28 @@ describe Settings do
19
19
  Settings.email.should == email2
20
20
  end
21
21
 
22
- it "should handle settings appearing from DB" do
22
+ it "should handle settings appearing in DB when settings are loaded" do
23
23
  Settings.tst2.should == ''
24
- RailsAdminSettings::Setting.create(key: 'tst', raw: 'tst')
24
+ RailsAdminSettings::Setting.create!(key: 'tst', raw: 'tst')
25
25
  # settings are still cached, but when we try to create a setting it sees updated value in DB
26
26
  Settings.tst.should == 'tst'
27
27
  end
28
28
 
29
- it "should handle settings appearing in DB" do
29
+ it "should handle settings appearing in DB when settings are not loaded" do
30
30
  RailsAdminSettings::Setting.create(key: 'tst', raw: 'tst')
31
-
32
31
  Settings.tst = 'str'
33
32
  Settings.tst.should == 'str'
34
33
  end
35
34
 
36
35
  it "#destroy_all!" do
37
36
  Settings.tst = 'str'
38
- expect { Settings.destroy_all }.to raise_exception
39
37
  Settings.destroy_all!
40
38
  Settings.tst.should == ''
41
39
  end
40
+
42
41
  it "#destroy!" do
43
42
  Settings.tst = 'str'
44
43
  Settings.tst2 = 'str2'
45
- expect { Settings.destroy(:tst) }.to raise_exception
46
44
  Settings.destroy!(:tst)
47
45
  Settings.tst.should == ''
48
46
  Settings.tst2.should == 'str2'
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Settings loading defaults' do
6
+ before :each do
7
+ Settings.apply_defaults!(File.join(File.dirname(__FILE__), 'support/defaults.yml'))
8
+ end
9
+
10
+ it 'loads twice ok' do
11
+ Settings.apply_defaults!(File.join(File.dirname(__FILE__), 'support/defaults.yml'))
12
+ Settings.apply_defaults!(File.join(File.dirname(__FILE__), 'support/defaults.yml'))
13
+ end
14
+
15
+ it 'sets value' do
16
+ Settings.footer.should eq 'test <b></b>'
17
+ Settings.get(:footer).type.should eq 'html'
18
+ end
19
+
20
+ it 'sets type' do
21
+ Settings.get(:phone).phone_type?.should be_true
22
+ Settings.get(:phone).val.city.should eq '906'
23
+ Settings.get(:phone).val.formatted_subscriber.should eq '111-11-11'
24
+ end
25
+
26
+ it 'sets enabled' do
27
+ Settings.phone_enabled?.should eq true
28
+ Settings.disabled_enabled?.should eq false
29
+ Settings.enabled?(:disabled).should eq false
30
+ end
31
+
32
+ it 'works with namespace' do
33
+ Settings.ns(:main).phone.should eq '906 1111111'
34
+ Settings.ns(:other).footer.should eq 'zzz'
35
+ Settings.footer.should eq 'test <b></b>'
36
+ Settings.ns(:main).footer.should eq 'test <b></b>'
37
+ end
38
+
39
+ it 'works with fallback' do
40
+ Settings.ns(:etc, fallback: :main).phone.should eq '906 1111111'
41
+ Settings.ns(:etc, fallback: :main).footer.should eq 'test <b></b>'
42
+ Settings.ns(:other, fallback: :main).footer.should eq 'zzz'
43
+ Settings.ns(:etc, fallback: :other).footer.should eq 'zzz'
44
+ end
45
+
46
+ it "doesn't overwrite" do
47
+ Settings.ns(:main).phone = '906 2222222'
48
+ Settings.ns(:other).footer = 'xxx'
49
+ Settings.apply_defaults!(File.join(File.dirname(__FILE__), 'support/defaults.yml'))
50
+ Settings.ns(:main).phone.should eq '906 2222222'
51
+ Settings.ns(:other).footer.should eq 'xxx'
52
+ end
53
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Settings enabling and disabling' do
6
+ it 'works for name_enabled? and name_enabled =' do
7
+ Settings.zzz = '123'
8
+ Settings.zzz.should eq '123'
9
+ Settings.get(:zzz).enabled.should eq true
10
+ Settings.enabled?(:zzz).should eq true
11
+ Settings.zzz_enabled?.should eq true
12
+
13
+ Settings.zzz.should eq '123'
14
+ Settings.zzz_enabled = false
15
+ Settings.zzz_enabled?.should eq false
16
+ Settings.get(:zzz).enabled.should eq false
17
+ Settings.enabled?(:zzz).should eq false
18
+ Settings.zzz.should eq ''
19
+ Settings.unload!
20
+ Settings.zzz.should eq ''
21
+ Settings.get(:zzz).raw.should eq '123'
22
+
23
+ Settings.zzz_enabled = true
24
+ Settings.zzz.should eq '123'
25
+ Settings.zzz_enabled?.should eq true
26
+ Settings.get(:zzz).enabled.should eq true
27
+ Settings.enabled?(:zzz).should eq true
28
+ end
29
+ end
data/spec/label_spec.rb CHANGED
@@ -7,12 +7,12 @@ describe 'Settings label' do
7
7
  it "should have label" do
8
8
  label = "E-Mail"
9
9
  Settings.email(label: label, default: "my@mail.ru")
10
- Settings.label(:email).should == label
10
+ Settings.get(:email).name.should == label
11
11
  end
12
12
 
13
13
  it "should properly set label as key if blank" do
14
14
  Settings.email(default: "my@mail.ru")
15
- Settings.label(:email).should == 'email'
15
+ Settings.get(:email).name.should == 'email'
16
16
  end
17
17
 
18
18
  end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Namespaced settings' do
6
+ it 'sets namespaced' do
7
+ Settings.ns(:other).test = 'test'
8
+ end
9
+
10
+ it 'reads namespaced from cache' do
11
+ ns = Settings.ns(:other)
12
+ ns.test = 'test'
13
+ ns.test.should eq 'test'
14
+ end
15
+
16
+ it 'reads namespaced from db' do
17
+ Settings.ns(:other).test = 'test'
18
+ Settings.ns(:other).test.should eq 'test'
19
+ end
20
+
21
+ it 'destroys' do
22
+ Settings.ns(:other).test = 'test'
23
+ Settings.ns(:other).destroy_all!
24
+ Settings.ns(:other).test.should eq ''
25
+ end
26
+
27
+ it 'sets type' do
28
+ expect {
29
+ Settings.ns(:other).set(:phone, 'test', type: 'phone')
30
+ }.to raise_error
31
+ Settings.ns(:other).set(:phone, '906 111 11 11', type: 'phone')
32
+ Settings.get(:phone, ns: 'other').phone_type?.should be_true
33
+ Settings.get(:phone, ns: 'other').val.city.should eq '906'
34
+ Settings.get(:phone, ns: 'other').val.formatted_subscriber.should eq '111-11-11'
35
+
36
+ ns = Settings.ns(:other)
37
+ ns.get(:phone).phone_type?.should be_true
38
+ ns.get(:phone).val.city.should eq '906'
39
+ ns.get(:phone).val.formatted_subscriber.should eq '111-11-11'
40
+ end
41
+ end
@@ -29,6 +29,11 @@ describe "Uploads" do
29
29
 
30
30
  File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
31
31
  end
32
+
33
+ it 'supports defaults' do
34
+ Settings.apply_defaults!(File.join(File.dirname(__FILE__), 'support/defaults_w_file.yml'))
35
+ File.exists?(Settings.root_file_path.join("uploads/1024x768.gif")).should be_true
36
+ end
32
37
  end
33
38
  end
34
39
 
@@ -2,8 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Settings do
6
-
5
+ describe 'Settings' do
7
6
  it "should works as RailsSettings" do
8
7
  Settings.destroy_all!
9
8
 
@@ -12,6 +11,18 @@ describe Settings do
12
11
  Settings.email.should == email
13
12
  end
14
13
 
14
+ it '#get should return new setting when setting does not exist' do
15
+ t = Settings.get(:test)
16
+ t.class.name.should eq 'RailsAdminSettings::Setting'
17
+ t.persisted?.should eq true
18
+ t.value.should eq ''
19
+ end
20
+
21
+ it '#name should return empty string when setting does not exist' do
22
+ Settings.test.should eq ''
23
+ Settings['test'].value.should eq ''
24
+ end
25
+
15
26
  it "should save default" do
16
27
  Settings.destroy_all!
17
28
 
@@ -26,7 +37,6 @@ describe Settings do
26
37
  end
27
38
 
28
39
  it 'should properly unload' do
29
- Settings.class_eval { cattr_accessor :loaded }
30
40
  Settings.load!
31
41
  Settings.loaded.should eq true
32
42
  Settings.unload!
@@ -34,7 +44,6 @@ describe Settings do
34
44
  end
35
45
 
36
46
  it 'should properly store settings to DB' do
37
- Settings.class_eval { cattr_accessor :loaded }
38
47
  Settings.unload!
39
48
  Settings.loaded.should eq false
40
49
  Settings.temp = '123'