preferences 0.0.1 → 0.1.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/CHANGELOG +15 -0
- data/README +49 -15
- data/Rakefile +2 -2
- data/app/models/preference.rb +22 -4
- data/lib/preferences.rb +99 -52
- data/test/app_root/log/in_memory.log +8746 -0
- data/test/functional/preferences_test.rb +124 -13
- data/test/test_helper.rb +1 -1
- data/test/unit/preference_test.rb +69 -23
- metadata +13 -13
@@ -2,6 +2,8 @@ require "#{File.dirname(__FILE__)}/../test_helper"
|
|
2
2
|
|
3
3
|
class PreferencesTest < Test::Unit::TestCase
|
4
4
|
def setup
|
5
|
+
User.preference :notifications, :boolean
|
6
|
+
|
5
7
|
@user = User.new
|
6
8
|
end
|
7
9
|
|
@@ -30,9 +32,17 @@ class PreferencesTest < Test::Unit::TestCase
|
|
30
32
|
assert User.respond_to?(:preference_definitions)
|
31
33
|
end
|
32
34
|
|
35
|
+
def test_should_create_default_preferences_values
|
36
|
+
assert User.respond_to?(:default_preference_values)
|
37
|
+
end
|
38
|
+
|
33
39
|
def test_should_include_new_definitions_in_preference_definitions
|
34
|
-
|
35
|
-
|
40
|
+
assert_not_nil User.preference_definitions['notifications']
|
41
|
+
end
|
42
|
+
|
43
|
+
def teardown
|
44
|
+
User.preference_definitions.delete('notifications')
|
45
|
+
User.default_preference_values.delete('notifications')
|
36
46
|
end
|
37
47
|
end
|
38
48
|
|
@@ -60,6 +70,18 @@ class UserByDefaultTest < Test::Unit::TestCase
|
|
60
70
|
def test_should_have_a_preferred_language
|
61
71
|
assert_equal 'English', @user.preferred_language
|
62
72
|
end
|
73
|
+
|
74
|
+
def test_should_have_only_default_preference_values
|
75
|
+
expected = {
|
76
|
+
'hot_salsa' => nil,
|
77
|
+
'dark_chocolate' => true,
|
78
|
+
'color' => nil,
|
79
|
+
'car' => nil,
|
80
|
+
'language' => 'English'
|
81
|
+
}
|
82
|
+
|
83
|
+
assert_equal expected, @user.preference_values
|
84
|
+
end
|
63
85
|
end
|
64
86
|
|
65
87
|
class UserTest < Test::Unit::TestCase
|
@@ -175,6 +197,18 @@ class UserWithPreferencesTest < Test::Unit::TestCase
|
|
175
197
|
assert_equal 1, @user.preferences.size
|
176
198
|
end
|
177
199
|
|
200
|
+
def test_should_include_custom_and_default_preferences_in_preference_values
|
201
|
+
expected = {
|
202
|
+
'hot_salsa' => nil,
|
203
|
+
'dark_chocolate' => true,
|
204
|
+
'color' => nil,
|
205
|
+
'car' => nil,
|
206
|
+
'language' => 'Latin'
|
207
|
+
}
|
208
|
+
|
209
|
+
assert_equal expected, @user.preference_values
|
210
|
+
end
|
211
|
+
|
178
212
|
def test_should_not_remove_preference_if_set_to_default
|
179
213
|
@user.preferred_language = 'English'
|
180
214
|
@user.save!
|
@@ -215,12 +249,70 @@ class UserWithPreferencesTest < Test::Unit::TestCase
|
|
215
249
|
end
|
216
250
|
end
|
217
251
|
|
218
|
-
class
|
252
|
+
class UserWithPreferencesForBasicGroupsTest < Test::Unit::TestCase
|
253
|
+
def setup
|
254
|
+
@user = create_user
|
255
|
+
@user.preferred_color = 'red', 'cars'
|
256
|
+
@user.save!
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_should_have_preferences
|
260
|
+
assert_equal 1, @user.preferences.size
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_should_have_preference_values_for_group
|
264
|
+
expected = {
|
265
|
+
'hot_salsa' => nil,
|
266
|
+
'dark_chocolate' => true,
|
267
|
+
'color' => nil,
|
268
|
+
'car' => nil,
|
269
|
+
'language' => 'English',
|
270
|
+
'cars' => {
|
271
|
+
'hot_salsa' => nil,
|
272
|
+
'dark_chocolate' => true,
|
273
|
+
'color' => 'red',
|
274
|
+
'car' => nil,
|
275
|
+
'language' => 'English'
|
276
|
+
}
|
277
|
+
}
|
278
|
+
|
279
|
+
assert_equal expected, @user.preference_values
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_should_not_have_preference_without_group
|
283
|
+
assert_nil @user.preferred_color
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_should_have_preference_with_group
|
287
|
+
assert_equal 'red', @user.preferred_color('cars')
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_should_modify_existing_preferences_when_saved
|
291
|
+
@user.preferred_color = 'blue', 'cars'
|
292
|
+
assert @user.save
|
293
|
+
|
294
|
+
@user.reload
|
295
|
+
assert_equal 'blue', @user.preferred_color('cars')
|
296
|
+
assert_equal 1, @user.preferences.size
|
297
|
+
end
|
298
|
+
|
299
|
+
def test_should_be_able_to_differentiate_between_groups
|
300
|
+
@user.preferred_color = 'blue', 'boats'
|
301
|
+
assert @user.save
|
302
|
+
|
303
|
+
@user.reload
|
304
|
+
assert_equal 'red', @user.preferred_color('cars')
|
305
|
+
assert_equal 'blue', @user.preferred_color('boats')
|
306
|
+
assert_equal 2, @user.preferences.size
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
class UserWithPreferencesForActiveRecordGroupsTest < Test::Unit::TestCase
|
219
311
|
def setup
|
220
312
|
@car = create_car
|
221
313
|
|
222
314
|
@user = create_user
|
223
|
-
@user.preferred_color = 'red',
|
315
|
+
@user.preferred_color = 'red', @car
|
224
316
|
@user.save!
|
225
317
|
end
|
226
318
|
|
@@ -228,32 +320,51 @@ class UserWithPreferencesForOtherModelsTest < Test::Unit::TestCase
|
|
228
320
|
assert_equal 1, @user.preferences.size
|
229
321
|
end
|
230
322
|
|
231
|
-
def
|
323
|
+
def test_should_have_preference_values_for_group
|
324
|
+
expected = {
|
325
|
+
'hot_salsa' => nil,
|
326
|
+
'dark_chocolate' => true,
|
327
|
+
'color' => nil,
|
328
|
+
'car' => nil,
|
329
|
+
'language' => 'English',
|
330
|
+
@car => {
|
331
|
+
'hot_salsa' => nil,
|
332
|
+
'dark_chocolate' => true,
|
333
|
+
'color' => 'red',
|
334
|
+
'car' => nil,
|
335
|
+
'language' => 'English'
|
336
|
+
}
|
337
|
+
}
|
338
|
+
|
339
|
+
assert_equal expected, @user.preference_values
|
340
|
+
end
|
341
|
+
|
342
|
+
def test_should_not_have_preference_without_group
|
232
343
|
assert_nil @user.preferred_color
|
233
344
|
end
|
234
345
|
|
235
|
-
def
|
236
|
-
assert_equal 'red', @user.preferred_color(
|
346
|
+
def test_should_have_preference_with_group
|
347
|
+
assert_equal 'red', @user.preferred_color(@car)
|
237
348
|
end
|
238
349
|
|
239
350
|
def test_should_modify_existing_preferences_when_saved
|
240
|
-
@user.preferred_color = 'blue',
|
351
|
+
@user.preferred_color = 'blue', @car
|
241
352
|
assert @user.save
|
242
353
|
|
243
354
|
@user.reload
|
244
|
-
assert_equal 'blue', @user.preferred_color(
|
355
|
+
assert_equal 'blue', @user.preferred_color(@car)
|
245
356
|
assert_equal 1, @user.preferences.size
|
246
357
|
end
|
247
358
|
|
248
|
-
def
|
359
|
+
def test_should_be_able_to_differentiate_between_groups
|
249
360
|
@different_car = create_car
|
250
361
|
|
251
|
-
@user.preferred_color = 'blue',
|
362
|
+
@user.preferred_color = 'blue', @different_car
|
252
363
|
assert @user.save
|
253
364
|
|
254
365
|
@user.reload
|
255
|
-
assert_equal 'red', @user.preferred_color(
|
256
|
-
assert_equal 'blue', @user.preferred_color(
|
366
|
+
assert_equal 'red', @user.preferred_color(@car)
|
367
|
+
assert_equal 'blue', @user.preferred_color(@different_car)
|
257
368
|
assert_equal 2, @user.preferences.size
|
258
369
|
end
|
259
370
|
end
|
data/test/test_helper.rb
CHANGED
@@ -4,7 +4,7 @@ require 'rubygems'
|
|
4
4
|
require 'plugin_test_helper'
|
5
5
|
|
6
6
|
# Run the migrations
|
7
|
-
ActiveRecord::Migrator.migrate("#{
|
7
|
+
ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
|
8
8
|
|
9
9
|
# Mixin the factory helper
|
10
10
|
require File.expand_path("#{File.dirname(__FILE__)}/factory")
|
@@ -17,12 +17,12 @@ class PreferenceByDefaultTest < Test::Unit::TestCase
|
|
17
17
|
assert @preference.owner_type.blank?
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
assert_nil @preference.
|
20
|
+
def test_should_not_have_a_group_association
|
21
|
+
assert_nil @preference.group_id
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
assert @preference.
|
24
|
+
def test_should_not_have_a_group_type
|
25
|
+
assert @preference.group_type.nil?
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_should_not_have_a_value
|
@@ -58,28 +58,53 @@ class PreferenceTest < Test::Unit::TestCase
|
|
58
58
|
assert_equal 1, Array(preference.errors.on(:owner_type)).size
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
62
|
-
preference = new_preference(:
|
61
|
+
def test_should_not_require_a_group_id
|
62
|
+
preference = new_preference(:group => nil)
|
63
63
|
assert preference.valid?
|
64
64
|
end
|
65
65
|
|
66
|
-
def
|
67
|
-
preference = new_preference(:
|
68
|
-
preference.
|
69
|
-
assert
|
70
|
-
assert_equal 1, Array(preference.errors.on(:preferenced_id)).size
|
66
|
+
def test_should_not_require_a_group_id_if_type_specified
|
67
|
+
preference = new_preference(:group => nil)
|
68
|
+
preference.group_type = 'Car'
|
69
|
+
assert preference.valid?
|
71
70
|
end
|
72
71
|
|
73
|
-
def
|
74
|
-
preference = new_preference(:
|
72
|
+
def test_should_not_require_a_group_type
|
73
|
+
preference = new_preference(:group => nil)
|
75
74
|
assert preference.valid?
|
76
75
|
end
|
77
76
|
|
78
|
-
def
|
79
|
-
preference = new_preference(:
|
80
|
-
preference.
|
77
|
+
def test_should_require_a_group_type_if_id_specified
|
78
|
+
preference = new_preference(:group => nil)
|
79
|
+
preference.group_id = 1
|
81
80
|
assert !preference.valid?
|
82
|
-
assert_equal 1, Array(preference.errors.on(:
|
81
|
+
assert_equal 1, Array(preference.errors.on(:group_type)).size
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class PreferenceAsAClassTest < Test::Unit::TestCase
|
86
|
+
def test_should_be_able_to_split_nil_groups
|
87
|
+
group_id, group_type = Preference.split_group(nil)
|
88
|
+
assert_nil group_id
|
89
|
+
assert_nil group_type
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_should_be_able_to_split_non_active_record_groups
|
93
|
+
group_id, group_type = Preference.split_group('car')
|
94
|
+
assert_nil group_id
|
95
|
+
assert_equal 'car', group_type
|
96
|
+
|
97
|
+
group_id, group_type = Preference.split_group(10)
|
98
|
+
assert_nil group_id
|
99
|
+
assert_equal 10, group_type
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_should_be_able_to_split_active_record_groups
|
103
|
+
car = create_car
|
104
|
+
|
105
|
+
group_id, group_type = Preference.split_group(car)
|
106
|
+
assert_equal 1, group_id
|
107
|
+
assert_equal 'Car', group_type
|
83
108
|
end
|
84
109
|
end
|
85
110
|
|
@@ -102,18 +127,34 @@ class PreferenceAfterBeingCreatedTest < Test::Unit::TestCase
|
|
102
127
|
assert_not_nil @preference.value
|
103
128
|
end
|
104
129
|
|
105
|
-
def
|
106
|
-
assert_nil @preference.
|
130
|
+
def test_should_not_have_a_group_association
|
131
|
+
assert_nil @preference.group
|
132
|
+
end
|
133
|
+
|
134
|
+
def teardown
|
135
|
+
User.preference_definitions.delete('notifications')
|
136
|
+
User.default_preference_values.delete('notifications')
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
class PreferenceWithBasicGroupTest < Test::Unit::TestCase
|
141
|
+
def setup
|
142
|
+
@preference = create_preference(:group_type => 'car')
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_should_have_a_group_association
|
146
|
+
assert_equal 'car', @preference.group
|
107
147
|
end
|
108
148
|
end
|
109
149
|
|
110
|
-
class
|
150
|
+
class PreferenceWithActiveRecordGroupTest < Test::Unit::TestCase
|
111
151
|
def setup
|
112
|
-
@
|
152
|
+
@car = create_car
|
153
|
+
@preference = create_preference(:group => @car)
|
113
154
|
end
|
114
155
|
|
115
|
-
def
|
116
|
-
|
156
|
+
def test_should_have_a_group_association
|
157
|
+
assert_equal @car, @preference.group
|
117
158
|
end
|
118
159
|
end
|
119
160
|
|
@@ -142,4 +183,9 @@ class PreferenceWithBooleanAttributeTest < Test::Unit::TestCase
|
|
142
183
|
preference.value = true
|
143
184
|
assert_equal true, preference.value
|
144
185
|
end
|
186
|
+
|
187
|
+
def teardown
|
188
|
+
User.preference_definitions.delete('notifications')
|
189
|
+
User.default_preference_values.delete('notifications')
|
190
|
+
end
|
145
191
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: preferences
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Pfeifer
|
@@ -9,7 +9,7 @@ autorequire: preferences
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-06-19 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -27,24 +27,24 @@ files:
|
|
27
27
|
- lib/preferences
|
28
28
|
- lib/preferences/preference_definition.rb
|
29
29
|
- lib/preferences.rb
|
30
|
-
- test/factory.rb
|
31
30
|
- test/app_root
|
32
|
-
- test/app_root/
|
33
|
-
- test/app_root/
|
31
|
+
- test/app_root/app
|
32
|
+
- test/app_root/app/models
|
33
|
+
- test/app_root/app/models/car.rb
|
34
|
+
- test/app_root/app/models/user.rb
|
35
|
+
- test/app_root/config
|
36
|
+
- test/app_root/config/environment.rb
|
34
37
|
- test/app_root/db
|
35
38
|
- test/app_root/db/migrate
|
39
|
+
- test/app_root/db/migrate/001_create_users.rb
|
36
40
|
- test/app_root/db/migrate/003_migrate_preferences_to_version_1.rb
|
37
41
|
- test/app_root/db/migrate/002_create_cars.rb
|
38
|
-
- test/app_root/
|
39
|
-
- test/app_root/
|
40
|
-
- test/app_root/config/environment.rb
|
41
|
-
- test/app_root/app
|
42
|
-
- test/app_root/app/models
|
43
|
-
- test/app_root/app/models/user.rb
|
44
|
-
- test/app_root/app/models/car.rb
|
42
|
+
- test/app_root/log
|
43
|
+
- test/app_root/log/in_memory.log
|
45
44
|
- test/functional
|
46
45
|
- test/functional/preferences_test.rb
|
47
46
|
- test/test_helper.rb
|
47
|
+
- test/factory.rb
|
48
48
|
- test/unit
|
49
49
|
- test/unit/preference_test.rb
|
50
50
|
- test/unit/preference_definition_test.rb
|
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
requirements: []
|
76
76
|
|
77
77
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.1.
|
78
|
+
rubygems_version: 1.1.1
|
79
79
|
signing_key:
|
80
80
|
specification_version: 2
|
81
81
|
summary: Adds support for easily creating custom preferences for models
|