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.
@@ -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
- definition = User.preference :notifications
35
- assert_equal definition, User.preference_definitions['notifications']
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 UserWithPreferencesForOtherModelsTest < Test::Unit::TestCase
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', {:for => @car}
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 test_should_not_have_preference_without_preferenced_record
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 test_should_have_preference_with_preferenced_record
236
- assert_equal 'red', @user.preferred_color(:for => @car)
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', {:for => @car}
351
+ @user.preferred_color = 'blue', @car
241
352
  assert @user.save
242
353
 
243
354
  @user.reload
244
- assert_equal 'blue', @user.preferred_color(:for => @car)
355
+ assert_equal 'blue', @user.preferred_color(@car)
245
356
  assert_equal 1, @user.preferences.size
246
357
  end
247
358
 
248
- def test_should_be_able_to_differentiate_between_preferenced_records
359
+ def test_should_be_able_to_differentiate_between_groups
249
360
  @different_car = create_car
250
361
 
251
- @user.preferred_color = 'blue', {:for => @different_car}
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(:for => @car)
256
- assert_equal 'blue', @user.preferred_color(:for => @different_car)
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("#{RAILS_ROOT}/db/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 test_should_not_have_a_preferenced_association
21
- assert_nil @preference.preferenced_id
20
+ def test_should_not_have_a_group_association
21
+ assert_nil @preference.group_id
22
22
  end
23
23
 
24
- def test_should_not_have_a_preferenced_type
25
- assert @preference.preferenced_type.nil?
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 test_should_not_require_a_preferenced_id
62
- preference = new_preference(:preferenced => nil)
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 test_should_require_a_preferenced_id_if_specified
67
- preference = new_preference(:preferenced => nil)
68
- preference.preferenced_type = 'Car'
69
- assert !preference.valid?
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 test_should_not_require_a_preferenced_type
74
- preference = new_preference(:preferenced => nil)
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 test_should_require_a_preferenced_type_if_specified
79
- preference = new_preference(:preferenced => nil)
80
- preference.preferenced_id = 1
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(:preferenced_type)).size
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 test_should_not_have_a_preferenced_association
106
- assert_nil @preference.preferenced
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 PreferenceWithPreferencedAssociationTest < Test::Unit::TestCase
150
+ class PreferenceWithActiveRecordGroupTest < Test::Unit::TestCase
111
151
  def setup
112
- @preference = create_preference(:preferenced => create_car)
152
+ @car = create_car
153
+ @preference = create_preference(:group => @car)
113
154
  end
114
155
 
115
- def test_should_have_a_preferenced_association
116
- assert_not_nil @preference.preferenced
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.1
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-05-10 00:00:00 -04:00
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/log
33
- - test/app_root/log/in_memory.log
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/db/migrate/001_create_users.rb
39
- - test/app_root/config
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.0
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