arsettings 1.0.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/test/_run_one.rb ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ query = File.dirname(__FILE__) << '/*_test.rb'
3
+ Dir[query].each { |filename| require filename }
@@ -0,0 +1,137 @@
1
+ require File.dirname(__FILE__) + '/_helper'
2
+
3
+ class ActiveRecordIntegration < Test::Unit::TestCase
4
+
5
+ def setup
6
+ ARSettings.default_class = Setting
7
+ Setting.reset_all
8
+ @@class_numbers ||= Array(1..100)
9
+ @klass = Object.const_get "Model#{@@class_numbers.shift}"
10
+ end
11
+
12
+ verify 'can add settings to any AR::B class with has_setting' do
13
+ @klass.class_eval { has_setting :abcd , :default => 5 }
14
+ assert_equal 5 , @klass.abcd
15
+ end
16
+
17
+ verify 'can specify that a setting should be able to be looked up from the instance' do
18
+ @klass.class_eval do
19
+ has_setting :abcd , :default => 4
20
+ has_setting :efgh , :default => 5 , :instance => true
21
+ end
22
+ assert_raises(NoMethodError) { @klass.new.abcd }
23
+ assert_raises(NoMethodError) { @klass.new.abcd? }
24
+ assert_nothing_raised { @klass.new.efgh }
25
+ assert_nothing_raised { @klass.new.efgh? }
26
+ end
27
+
28
+ verify 'settings are loaded from the db, if they exist in the db' do
29
+ $sql_executor.silent_execute "insert into settings (name,value,package,volatile) values ('abcd','#{ARSettings.serialize(12)}','#{@klass.name}','f')"
30
+ Setting.send :load_from_db # to simulate initial conditions
31
+ @klass.class_eval { has_setting :abcd }
32
+ assert_equal 12 , @klass.abcd
33
+ end
34
+
35
+ verify 'uses ARSettings.default_class' do
36
+ ARSettings.create_settings_class :Setting16
37
+ ARSettings.default_class = Setting16
38
+ @klass.class_eval { has_setting :abcd }
39
+ @klass.abcd = 50
40
+ assert_equal 1 , Setting16.count
41
+ assert_equal 50 , Setting16.first.value
42
+ end
43
+
44
+ verify 'can pass all the same args that Setting.add can take' do
45
+ @klass.class_eval do
46
+ has_setting :abcd , :default => 12 , :volatile => true do |val|
47
+ val.to_i
48
+ end
49
+ has_setting :efgh , :default => 13.0 , :volatile => false do |val|
50
+ val.to_f
51
+ end
52
+ has_setting :ijkl
53
+ end
54
+ assert_equal 12 , @klass.abcd
55
+ assert_equal 12.class , @klass.abcd.class
56
+ assert_equal 13.0 , @klass.efgh
57
+ assert_equal 13.0.class , @klass.efgh.class
58
+ @klass.abcd = @klass.efgh = @klass.ijkl = '14'
59
+ assert_equal 14 , @klass.abcd
60
+ assert_equal 14.class , @klass.abcd.class
61
+ assert_equal 14.0 , @klass.efgh
62
+ assert_equal 14.0.class , @klass.efgh.class
63
+ assert_equal '14' , @klass.ijkl
64
+ assert_equal '14'.class , @klass.ijkl.class
65
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(200) }' where name='abcd'"
66
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(200.0)}' where name='efgh'"
67
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(200.0)}' where name='ijkl'"
68
+ assert_equal 200 , @klass.abcd
69
+ assert_equal 14.0 , @klass.efgh
70
+ assert_equal '14' , @klass.ijkl
71
+ end
72
+
73
+ verify 'two classes dont see eachothers settings' do
74
+ @klass1 = @klass
75
+ setup
76
+ @klass2 = @klass
77
+ @klass1.class_eval { has_setting :abcd }
78
+ @klass2.class_eval { has_setting :abcd }
79
+ @klass1.abcd = 5
80
+ @klass2.abcd = 6
81
+ assert_equal 5 , @klass1.abcd
82
+ assert_equal 6 , @klass2.abcd
83
+ end
84
+
85
+ verify 'updates setting values if readding' do
86
+ @klass.class_eval { has_setting :abcd , :volatile => true , &lambda { |val| val.to_i * 2 } }
87
+ @klass.abcd = 5
88
+ assert_equal 10 , @klass.abcd
89
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(200)}' where name='abcd'"
90
+ assert_equal 200 , @klass.abcd
91
+ assert_equal 200 , @klass.abcd
92
+ @klass.class_eval { has_setting :abcd , :volatile => false , &lambda { |val| val * 3 } }
93
+ @klass.abcd = 5
94
+ assert_equal 15 , @klass.abcd
95
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(200)}' where name='abcd'"
96
+ assert_equal 15 , @klass.abcd
97
+ end
98
+
99
+ verify "doesn't raise error for valid options" do
100
+ assert_nothing_raised do
101
+ @klass.class_eval do
102
+ has_setting :abcd , :instance => true , :volatile => true , :default => 5
103
+ end
104
+ end
105
+ end
106
+
107
+ verify "does raise error if it receives any invalid options" do
108
+ [[:abcd,:settings_class,Setting],[:efgh,:package,String],[:ijkl,:lkjdsf,true],[:mnop,:abcd,true]].each do |meth,key,value|
109
+ assert_raises ARSettings::InvalidOptionError do
110
+ @klass.class_eval do
111
+ has_setting meth , key => value
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ end
118
+
119
+
120
+
121
+ # probably a better way, but IDK what it is
122
+ # just adds a table and AR::B class for each test
123
+ # and additional ones as necessary
124
+ ActiveRecord::Schema.define do
125
+ suppress_messages do
126
+ ActiveRecordIntegration.instance_methods.grep(/^test/).size.next.times do |i|
127
+ create_table "model#{i+1}s" do |t|
128
+ t.string :name , :null => false , :size => 30
129
+ t.text :value
130
+ t.boolean :volatile , :default => false
131
+ t.timestamps
132
+ end
133
+ Object.const_set "Model#{i+1}" , Class.new(ActiveRecord::Base)
134
+ end
135
+ end
136
+ end
137
+
@@ -0,0 +1,156 @@
1
+ require File.dirname(__FILE__) + '/_helper'
2
+
3
+ class AddToArbitraryClass < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Setting.reset_all
7
+ end
8
+
9
+ def teardown
10
+ ARSettings.default_class = Setting
11
+ end
12
+
13
+ def make_class(name,&block)
14
+ self.class.const_set name , Class.new
15
+ klass = self.class.const_get name
16
+ ARSettings.on klass
17
+ klass.instance_eval &block if block
18
+ end
19
+
20
+ verify 'can add to any class' do
21
+ class C1 ; end
22
+ assert_raises(NoMethodError) { C1.has_setting :abc }
23
+ class C1 ; ARSettings.on self ; end
24
+ assert_nothing_raised { C1.has_setting :abc }
25
+ end
26
+
27
+ verify 'this allows them to have settings' do
28
+ make_class(:C2) { has_setting :abcd }
29
+ C2.abcd = 5
30
+ assert_equal 5 , C2.abcd
31
+ assert_equal true , C2.abcd?
32
+ end
33
+
34
+ verify 'can specify the desired settings class when adding to another class' do
35
+ ARSettings.create_settings_class :Setting12s
36
+ class C4 ; ARSettings.on self , :settings_class => Setting12s ; end
37
+ assert_equal 0 , Setting12s.count
38
+ C4.has_setting :abcd
39
+ assert_equal 1 , Setting12s.count
40
+ end
41
+
42
+ verify 'settings are loaded from the db, if they exist in the db' do
43
+ $sql_executor.silent_execute "insert into settings (name,value,package,volatile) values ('abcd','#{ARSettings.serialize(12)}','AddToArbitraryClass::C3','f')"
44
+ Setting.send :load_from_db # to simulate initial conditions
45
+ make_class(:C3) { has_setting :abcd }
46
+ assert_equal 12 , C3.abcd
47
+ end
48
+
49
+ verify 'can specify settings without specifying a settings class, then it defaults to ARSettings.default_class' do
50
+ ARSettings.create_settings_class :Setting13
51
+ ARSettings.default_class = Setting13
52
+ make_class(:C4) { has_setting :abcd }
53
+ C4.abcd = 12
54
+ assert_equal 1 , Setting13.count
55
+ assert_equal 12 , Setting13.first.value
56
+ end
57
+
58
+ verify 'raises error if try to add settings without specifying a settings class or default' do
59
+ ARSettings.default_class = nil
60
+ assert_raises(ARSettings::NoDefaultPackageError) { make_class(:C5) { has_setting :abcd } }
61
+ end
62
+
63
+ verify 'can pass all the same args that Setting.add can take' do
64
+ ARSettings.default_class = nil
65
+ ARSettings.create_settings_class :Setting15
66
+ make_class :C6 do
67
+ has_setting :abcd , :default => 12 , :volatile => true do |val|
68
+ val.to_i
69
+ end
70
+ has_setting :efgh , :default => 13.0 , :volatile => false do |val|
71
+ val.to_f
72
+ end
73
+ has_setting :ijkl
74
+ end
75
+ assert_equal 12 , C6.abcd
76
+ assert_equal 12.class , C6.abcd.class
77
+ assert_equal 13.0 , C6.efgh
78
+ assert_equal 13.0.class , C6.efgh.class
79
+ C6.abcd = C6.efgh = C6.ijkl = '14'
80
+ assert_equal 14 , C6.abcd
81
+ assert_equal 14.class , C6.abcd.class
82
+ assert_equal 14.0 , C6.efgh
83
+ assert_equal 14.0.class , C6.efgh.class
84
+ assert_equal '14' , C6.ijkl
85
+ assert_equal '14'.class , C6.ijkl.class
86
+ $sql_executor.silent_execute "update setting15s set value='#{ARSettings.serialize(200) }' where name='abcd'"
87
+ $sql_executor.silent_execute "update setting15s set value='#{ARSettings.serialize(200.0)}' where name='efgh'"
88
+ $sql_executor.silent_execute "update setting15s set value='#{ARSettings.serialize(200.0)}' where name='ijkl'"
89
+ assert_equal 200 , C6.abcd
90
+ assert_equal 14.0 , C6.efgh
91
+ assert_equal '14' , C6.ijkl
92
+ end
93
+
94
+ verify 'two classes dont see eachothers settings' do
95
+ make_class(:C7) { has_setting :abcd }
96
+ make_class(:C8) { has_setting :abcd }
97
+ C7.abcd = 5
98
+ C8.abcd = 6
99
+ assert_equal 5 , C7.abcd
100
+ assert_equal 6 , C8.abcd
101
+ end
102
+
103
+ verify 'can specify that a setting should be able to be looked up from the instance' do
104
+ make_class :C25 do
105
+ has_setting :abcd , :default => 4
106
+ has_setting :efgh , :default => 5 , :instance => true
107
+ end
108
+ assert_raises(NoMethodError) { C25.new.abcd }
109
+ assert_raises(NoMethodError) { C25.new.abcd? }
110
+ assert_nothing_raised { C25.new.efgh }
111
+ assert_nothing_raised { C25.new.efgh? }
112
+ end
113
+
114
+ verify "ARSettings.on doesn't raise error for valid options" do
115
+ class C9 ; end
116
+ assert_nothing_raised do
117
+ ARSettings.on C9 , :settings_class => Setting
118
+ end
119
+ end
120
+
121
+ verify "ARSettings.on does raise error if it receives any invalid options" do
122
+ [ [ (class C11;self;end) , :package , String ],
123
+ [ (class C12;self;end) , :lkjdsf , true ],
124
+ [ (class C13;self;end) , :abcd , true ],
125
+ [ (class C14;self;end) , :instance , true ],
126
+ [ (class C15;self;end) , :volatile , true ],
127
+ [ (class C16;self;end) , :default , true ],
128
+ ].each do |klass,key,value|
129
+ assert_raises ARSettings::InvalidOptionError do
130
+ ARSettings.on klass , key => value
131
+ end
132
+ end
133
+ end
134
+
135
+
136
+ verify "has_setting doesn't raise error for valid options" do
137
+ class C17 ; ARSettings.on self ; end
138
+ assert_nothing_raised do
139
+ C17.has_setting :abcd , :volatile => true , :default => 4 , :instance => true
140
+ end
141
+ end
142
+
143
+ verify "has_setting does raise error if it receives any invalid options" do
144
+ [ [ (class C18;ARSettings.on(self);self;end) , :a , :package , String ],
145
+ [ (class C19;ARSettings.on(self);self;end) , :b , :lkjdsf , true ],
146
+ [ (class C20;ARSettings.on(self);self;end) , :c , :abcd , true ],
147
+ [ (class C24;ARSettings.on(self);self;end) , :g , :settings_class , Setting ],
148
+ ].each do |klass,meth,key,value|
149
+ assert_raises ARSettings::InvalidOptionError do
150
+ klass.has_setting meth , key => value
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+
@@ -0,0 +1,306 @@
1
+ require File.dirname(__FILE__) + '/_helper'
2
+
3
+ class TestPackaging < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Setting.reset_all
7
+ end
8
+
9
+
10
+ context 'singleton' do
11
+
12
+ packaged = ARSettings::Packaged
13
+
14
+ verify 'cannot instantiate on your own' do
15
+ assert_raises(NoMethodError) { ARSettings::Packaged.new Setting , String }
16
+ end
17
+
18
+ verify 'has_instance? returns whether it has instantiated a given package' do
19
+ MyClass1 = Class.new
20
+ assert !packaged.has_instance?(Setting,MyClass1)
21
+ packaged.instance Setting , MyClass1
22
+ assert packaged.has_instance?(Setting,MyClass1)
23
+ end
24
+
25
+ verify 'instance returns the same result' do
26
+ packaged.instance(Setting,String)
27
+ packaged.instance(Setting,String)
28
+ end
29
+
30
+ verify '#instance returns an instance of Packaged' do
31
+ MyClass2 = Class.new
32
+ assert_equal packaged , packaged.instance(Setting , MyClass2).class
33
+ assert_equal packaged , packaged.instance(Setting , String).class
34
+ end
35
+
36
+ verify 'it raises an error if given a package that is not a string / symbol / class' do
37
+ assert_raises(ARSettings::InvalidPackageError) { packaged.instance(Setting,/whoops!/) }
38
+ assert_nothing_raised { packaged.instance(Setting,'string') }
39
+ assert_nothing_raised { packaged.instance(Setting,:symbol) }
40
+ assert_nothing_raised { packaged.instance(Setting,Class) }
41
+ end
42
+
43
+ verify 'it considers strings, symbols, and classes to symbols' do
44
+ assert_equal :cLaSs , packaged.instance(Setting,'cLaSs').package
45
+ assert_equal :Symbol , packaged.instance(Setting,:Symbol).package
46
+ assert_equal :Symbol , packaged.instance(Setting,Symbol).package
47
+ end
48
+
49
+ verify 'raises error if settings_class is not a settings class' do
50
+ assert_raises(packaged::InvalidSettingsClassError) { packaged.instance(String,String) }
51
+ end
52
+
53
+ verify 'returns the same package regardless of how it is requested' do
54
+ id = Setting.package(Setting).object_id
55
+ assert_equal id , Setting.package(:Setting).object_id
56
+ assert_equal id , Setting.package('Setting').object_id
57
+ end
58
+
59
+ end
60
+
61
+
62
+
63
+
64
+
65
+ context 'settings behaviour' do
66
+
67
+ s = Setting.package(String)
68
+
69
+ verify 'can query whether a setting exists with setting?, and can declare settings with add, or has_setting' do
70
+ assert !s.setting?(:a)
71
+ assert !s.setting?(:b)
72
+ s.add :a
73
+ s.add :b
74
+ assert s.setting?(:a)
75
+ assert s.setting?(:b)
76
+ end
77
+
78
+ verify 'has_setting is an alias for add' do
79
+ assert_equal s.method(:add) , s.method(:has_setting)
80
+ end
81
+
82
+ verify "add returns the package the setting was added to" do
83
+ assert_equal s , s.add( :xyz , :default => 1)
84
+ assert_equal s , s.add( :xyz , :default => 2)
85
+ end
86
+
87
+ verify 'can add default when creating' do
88
+ s.add :a , :default => 123
89
+ assert_equal 123 , s.a
90
+ end
91
+
92
+ verify 'can pass proc to handle postprocessing' do
93
+ s.add :a , :default => '123' do |setting|
94
+ setting.to_i
95
+ end
96
+ assert_equal 123 , s.a
97
+ s.a = '456'
98
+ assert_equal 456 , s.a
99
+ end
100
+
101
+ verify 'adds record to the db' do
102
+ assert_count 0
103
+ s.add :a , :default => /abc/
104
+ assert_count 1
105
+ setting = Setting.find_by_sql("select * from settings").first
106
+ assert_equal 'a' , setting.name
107
+ assert_equal( /abc/ , setting.value )
108
+ end
109
+
110
+ verify 'does not raise error if the setting already exists' do
111
+ assert_nothing_raised { s.add :a }
112
+ assert_nothing_raised { s.add :a }
113
+ end
114
+
115
+ verify 'does not overwrite current value with default when added repeatedly' do
116
+ s.add :a , :default => 12
117
+ assert_equal 12 , s.a
118
+ s.add 'a' , :default => 13
119
+ assert_equal 12 , s.a
120
+ s.add 'b' , :default => 14
121
+ assert_equal 14 , s.b
122
+ s.add :b , :default => 15
123
+ assert_equal 14 , s.b
124
+ end
125
+
126
+ verify 'get a list of settings' do
127
+ s.add :abc
128
+ s.add :def
129
+ s.add :ghi
130
+ assert_equal [:abc,:def,:ghi] , s.settings.sort_by { |name| name.to_s }
131
+ end
132
+
133
+ verify 'get a list of settings and values' do
134
+ s.add :abc , :default => 1
135
+ s.add :def , :default => 2
136
+ s.add :ghi , :default => 3
137
+ assert_equal [[:abc,1],[:def,2],[:ghi,3]] , s.settings_with_values.sort_by { |name,value| name.to_s }
138
+ end
139
+
140
+ verify 'can specify that object should reload from db each time' do
141
+ s.add :abcd , :default => 1
142
+ s.add :efgh , :default => 10 , :volatile => true
143
+ assert_equal 1 , s.abcd
144
+ assert_equal 10 , s.efgh
145
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(2)}' where name='abcd'"
146
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(20)}' where name='efgh'"
147
+ assert_equal 1 , s.abcd
148
+ assert_equal 20 , s.efgh
149
+ end
150
+
151
+ verify 'retains postprocessing after a reload' do
152
+ s.add( :abcd , :default => 1 , :volatile => true ) { |val| val.to_i }
153
+ assert_equal 1 , s.abcd
154
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(2)}' where name='abcd'"
155
+ assert_equal 2 , s.abcd
156
+ s.abcd = "3"
157
+ assert_equal 3 , s.abcd
158
+ end
159
+
160
+ verify 'readding the setting allows you to update volatility' do
161
+ s.add( :abcd , :default => "12.5" , :volatile => false ) { |val| val.to_f }
162
+ assert_equal 12.5 , s.abcd
163
+ $sql_executor.silent_execute "update settings set value='#{ARSettings.serialize(5.5)}' where name='abcd'"
164
+ assert_equal 12.5 , s.abcd
165
+ s.add :abcd , :volatile => true
166
+ assert_equal 5.5 , s.abcd
167
+ end
168
+
169
+ verify 'postprocessing only occurs when inserting the data' do
170
+ s.add( :abcd , :default => "12.5" , :volatile => false ) { |val| val.to_f }
171
+ assert_equal 12.5 , s.abcd
172
+ s.add( :abcd ) { |val| val.to_i }
173
+ assert_equal 12.5 , s.abcd
174
+ end
175
+
176
+ verify 'readding the setting allows you to update postprocessing' do
177
+ s.add( :abcd , :default => 0 ) { |val| val.to_f }
178
+ s.abcd = "12.5"
179
+ assert_equal 12.5 , s.abcd
180
+ s.add( :abcd ) { |val| val.to_i }
181
+ s.abcd = "12.5"
182
+ assert_equal 12 , s.abcd
183
+ end
184
+
185
+ verify 'defaults get run through the postprocessor' do
186
+ s.add( :abcd , :default => "5" ) { |i| i.to_i }
187
+ assert_equal 5 , s.abcd
188
+ end
189
+
190
+ verify 'raises NoSuchSettingError when invoking nonexistent setting' do
191
+ assert_raises(ARSettings::NoSuchSettingError) { s.hjk }
192
+ assert_raises(ARSettings::NoSuchSettingError) { s.hjk = 1 }
193
+ end
194
+
195
+ verify 'raises InvalidSetting for settings with over MAX_NAME chars' do
196
+ assert_nothing_raised { s.add 'a' * s.settings_class.MAX_CHARS }
197
+ assert_invalid_name { s.add 'a' * s.settings_class.MAX_CHARS.next }
198
+ end
199
+
200
+ end
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+ context 'initializations' do
209
+
210
+ s = Setting.package(String)
211
+ packaged = ARSettings::Packaged
212
+
213
+ verify 'it raises an error if given a package that is not string / symbol / class' do
214
+ assert_nothing_raised { Setting.package "string" }
215
+ assert_nothing_raised { Setting.package :Symbol }
216
+ assert_nothing_raised { Setting.package Class }
217
+ assert_raises(ARSettings::InvalidPackageError) { Setting.package 1 }
218
+ assert_raises(ARSettings::InvalidPackageError) { Setting.package Object.new }
219
+ assert_raises(ARSettings::InvalidPackageError) { Setting.package(SomeConstant=Object.new) }
220
+ end
221
+
222
+ verify 'can add a package as an option' do
223
+ Setting.add :abcd , :package => Hash , :default => 12
224
+ assert_equal 12 , Setting.package(Hash).abcd
225
+ assert_raises(ARSettings::NoSuchSettingError) { Setting.abcd }
226
+ end
227
+
228
+ verify 'can package settings with classes' do
229
+ Setting.add :abcd , :package => String , :default => 12
230
+ assert_equal 12 , s.abcd
231
+ assert_equal :String , Setting.find( :first , :conditions => { :name => 'abcd' } ).package
232
+ end
233
+
234
+ verify 'Setting.package(package) returns a PackagedSetting object' do
235
+ assert_equal ARSettings::Packaged , Setting.package(String).class
236
+ end
237
+
238
+ verify 'packaged knows its settings class' do
239
+ assert_equal Setting , Setting.package(String).settings_class
240
+ end
241
+
242
+ verify 'current_package returns the current package' do
243
+ assert_equal :String , Setting.package(String).package
244
+ assert_equal :string , Setting.package('string').package
245
+ assert_equal :strIng , Setting.package(:strIng).package
246
+ end
247
+
248
+
249
+ verify 'can add and remove variables within a given package' do
250
+ s.add :abcd , :default => 12
251
+ assert_equal 12 , s.abcd
252
+ s.abcd = 5
253
+ assert_equal 5 , s.abcd
254
+ end
255
+
256
+ verify 'raises NoSuchSettingError when given incorrect package' do
257
+ s.add :abcd , :default => 12
258
+ assert_raises(ARSettings::NoSuchSettingError) { Setting.abcd }
259
+ assert_raises(ARSettings::NoSuchSettingError) { Setting.abcd = 3 }
260
+ assert_nothing_raised { s.abcd }
261
+ assert_nothing_raised { s.abcd = 5 }
262
+ end
263
+
264
+ verify 'packaged settings can list all settings and values' do
265
+ s.add :abcd , :default => 1
266
+ s.add :efgh , :default => 2
267
+ s.add :ijkl , :default => 3
268
+ assert_equal [:abcd,:efgh,:ijkl] , s.settings.sort_by { |setting| setting.to_s }
269
+ assert_equal [[:abcd,1],[:efgh,2],[:ijkl,3]] , s.settings_with_values.sort_by { |setting,value| value }
270
+ end
271
+
272
+ verify 'reset only applies to settings of a given package' do
273
+ string = Setting.package(String)
274
+ hash = Setting.package(Hash)
275
+ string.add :abcd , :default => 1
276
+ hash.add :abcd , :default => 2
277
+ string.reset
278
+ assert_equal 1 , Setting.count
279
+ assert_equal :Hash , Setting.first.package
280
+ assert_equal 2 , hash.abcd
281
+ end
282
+
283
+ verify "doesn't raise error for valid options" do
284
+ assert_nothing_raised do
285
+ s.add :abcd , :default => 1 , :volatile => true do end
286
+ end
287
+ end
288
+
289
+ verify "does raise error if it receives any invalid options" do
290
+ [ [ :a , :package , String ],
291
+ [ :b , :settings_class , Setting ],
292
+ [ :c , :lkjdsf , true ],
293
+ [ :d , :abcd , true ],
294
+ [ :e , :instance , true ],
295
+ ].each do |meth,key,value|
296
+ assert_raises ARSettings::InvalidOptionError do
297
+ s.add meth , key => value
298
+ end
299
+ end
300
+ end
301
+
302
+ end
303
+
304
+
305
+ end
306
+
@@ -0,0 +1,66 @@
1
+ require File.dirname(__FILE__) + '/_helper'
2
+
3
+ class ResetTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Setting.package(String).reset
7
+ Setting.package(String).add :abc
8
+ end
9
+
10
+ s = Setting.package(String)
11
+
12
+ verify 'resets respond_to?' do
13
+ assert s.respond_to?(:abc)
14
+ assert s.respond_to?(:abc=)
15
+ s.reset
16
+ assert !s.respond_to?(:abc)
17
+ assert !s.respond_to?(:abc=)
18
+ end
19
+
20
+ verify 'resets method' do
21
+ assert_nothing_raised { s.abc = 1 }
22
+ s.reset
23
+ assert_raises(ARSettings::NoSuchSettingError) { s.abc }
24
+ assert_raises(ARSettings::NoSuchSettingError) { s.abc = 2 }
25
+ end
26
+
27
+ verify 'resets setting?' do
28
+ assert s.setting?(:abc)
29
+ s.reset
30
+ assert !s.setting?(:abc)
31
+ end
32
+
33
+ verify 'resets count' do
34
+ assert_count 1
35
+ s.reset
36
+ assert_count 0
37
+ end
38
+
39
+ verify 'can reset all packages' do
40
+ Setting.reset_all
41
+ Setting.package(String).add :abcd
42
+ Setting.package(Hash).add :efgh
43
+ assert_equal 2 , Setting.count
44
+ Setting.reset_all
45
+ assert_equal 0 , Setting.count
46
+ end
47
+
48
+ verify "resetting one settings class' package doesn't impact others" do
49
+ ARSettings.create_settings_class 'Setting6'
50
+ Setting6.package(String).add :abc
51
+ Setting6.package(Hash).add :def
52
+ Setting.package(:ghi).add :jkl
53
+ assert_equal 2 , Setting6.count
54
+ assert_equal 2 , Setting.count
55
+ Setting.reset_all
56
+ assert_equal 2 , Setting6.count
57
+ assert_equal 0 , Setting.count
58
+ Setting.package(:ghi).add :mno
59
+ Setting.package(:ghi).add :pqr
60
+ Setting6.reset_all
61
+ assert_equal 0 , Setting6.count
62
+ assert_equal 2 , Setting.count
63
+ end
64
+
65
+
66
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/_helper'
2
+
3
+ class CanChooseNameOfSettingClass < Test::Unit::TestCase
4
+
5
+ verify 'can choose name of the class to store settings in' do
6
+ assert_raises(NameError) { DifferentName }
7
+ ARSettings.create_settings_class 'DifferentName'
8
+ assert_nothing_raised { DifferentName }
9
+ assert_equal Class , DifferentName.class
10
+ assert DifferentName.ancestors.include?(ActiveRecord::Base)
11
+ assert_nothing_raised { DifferentName.add :abc , :default => 12 }
12
+ assert_equal 12 , DifferentName.abc
13
+ end
14
+
15
+ end