epugh-sequel 0.0.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 (134) hide show
  1. data/README.rdoc +652 -0
  2. data/VERSION.yml +4 -0
  3. data/bin/sequel +104 -0
  4. data/lib/sequel.rb +1 -0
  5. data/lib/sequel/adapters/ado.rb +85 -0
  6. data/lib/sequel/adapters/db2.rb +132 -0
  7. data/lib/sequel/adapters/dbi.rb +101 -0
  8. data/lib/sequel/adapters/do.rb +197 -0
  9. data/lib/sequel/adapters/do/mysql.rb +38 -0
  10. data/lib/sequel/adapters/do/postgres.rb +92 -0
  11. data/lib/sequel/adapters/do/sqlite.rb +31 -0
  12. data/lib/sequel/adapters/firebird.rb +307 -0
  13. data/lib/sequel/adapters/informix.rb +75 -0
  14. data/lib/sequel/adapters/jdbc.rb +485 -0
  15. data/lib/sequel/adapters/jdbc/h2.rb +62 -0
  16. data/lib/sequel/adapters/jdbc/mysql.rb +56 -0
  17. data/lib/sequel/adapters/jdbc/oracle.rb +23 -0
  18. data/lib/sequel/adapters/jdbc/postgresql.rb +101 -0
  19. data/lib/sequel/adapters/jdbc/sqlite.rb +43 -0
  20. data/lib/sequel/adapters/mysql.rb +370 -0
  21. data/lib/sequel/adapters/odbc.rb +184 -0
  22. data/lib/sequel/adapters/openbase.rb +57 -0
  23. data/lib/sequel/adapters/oracle.rb +140 -0
  24. data/lib/sequel/adapters/postgres.rb +453 -0
  25. data/lib/sequel/adapters/shared/mssql.rb +93 -0
  26. data/lib/sequel/adapters/shared/mysql.rb +341 -0
  27. data/lib/sequel/adapters/shared/oracle.rb +62 -0
  28. data/lib/sequel/adapters/shared/postgres.rb +743 -0
  29. data/lib/sequel/adapters/shared/progress.rb +34 -0
  30. data/lib/sequel/adapters/shared/sqlite.rb +263 -0
  31. data/lib/sequel/adapters/sqlite.rb +243 -0
  32. data/lib/sequel/adapters/utils/date_format.rb +21 -0
  33. data/lib/sequel/adapters/utils/stored_procedures.rb +75 -0
  34. data/lib/sequel/adapters/utils/unsupported.rb +62 -0
  35. data/lib/sequel/connection_pool.rb +258 -0
  36. data/lib/sequel/core.rb +204 -0
  37. data/lib/sequel/core_sql.rb +185 -0
  38. data/lib/sequel/database.rb +687 -0
  39. data/lib/sequel/database/schema_generator.rb +324 -0
  40. data/lib/sequel/database/schema_methods.rb +164 -0
  41. data/lib/sequel/database/schema_sql.rb +324 -0
  42. data/lib/sequel/dataset.rb +422 -0
  43. data/lib/sequel/dataset/convenience.rb +237 -0
  44. data/lib/sequel/dataset/prepared_statements.rb +220 -0
  45. data/lib/sequel/dataset/sql.rb +1105 -0
  46. data/lib/sequel/deprecated.rb +529 -0
  47. data/lib/sequel/exceptions.rb +44 -0
  48. data/lib/sequel/extensions/blank.rb +42 -0
  49. data/lib/sequel/extensions/inflector.rb +288 -0
  50. data/lib/sequel/extensions/pagination.rb +96 -0
  51. data/lib/sequel/extensions/pretty_table.rb +78 -0
  52. data/lib/sequel/extensions/query.rb +48 -0
  53. data/lib/sequel/extensions/string_date_time.rb +47 -0
  54. data/lib/sequel/metaprogramming.rb +44 -0
  55. data/lib/sequel/migration.rb +212 -0
  56. data/lib/sequel/model.rb +142 -0
  57. data/lib/sequel/model/association_reflection.rb +263 -0
  58. data/lib/sequel/model/associations.rb +1024 -0
  59. data/lib/sequel/model/base.rb +911 -0
  60. data/lib/sequel/model/deprecated.rb +188 -0
  61. data/lib/sequel/model/deprecated_hooks.rb +103 -0
  62. data/lib/sequel/model/deprecated_inflector.rb +335 -0
  63. data/lib/sequel/model/deprecated_validations.rb +384 -0
  64. data/lib/sequel/model/errors.rb +37 -0
  65. data/lib/sequel/model/exceptions.rb +7 -0
  66. data/lib/sequel/model/inflections.rb +230 -0
  67. data/lib/sequel/model/plugins.rb +74 -0
  68. data/lib/sequel/object_graph.rb +230 -0
  69. data/lib/sequel/plugins/caching.rb +122 -0
  70. data/lib/sequel/plugins/hook_class_methods.rb +122 -0
  71. data/lib/sequel/plugins/schema.rb +53 -0
  72. data/lib/sequel/plugins/single_table_inheritance.rb +63 -0
  73. data/lib/sequel/plugins/validation_class_methods.rb +373 -0
  74. data/lib/sequel/sql.rb +854 -0
  75. data/lib/sequel/version.rb +11 -0
  76. data/lib/sequel_core.rb +1 -0
  77. data/lib/sequel_model.rb +1 -0
  78. data/spec/adapters/ado_spec.rb +46 -0
  79. data/spec/adapters/firebird_spec.rb +376 -0
  80. data/spec/adapters/informix_spec.rb +96 -0
  81. data/spec/adapters/mysql_spec.rb +875 -0
  82. data/spec/adapters/oracle_spec.rb +272 -0
  83. data/spec/adapters/postgres_spec.rb +692 -0
  84. data/spec/adapters/spec_helper.rb +10 -0
  85. data/spec/adapters/sqlite_spec.rb +550 -0
  86. data/spec/core/connection_pool_spec.rb +526 -0
  87. data/spec/core/core_ext_spec.rb +156 -0
  88. data/spec/core/core_sql_spec.rb +528 -0
  89. data/spec/core/database_spec.rb +1214 -0
  90. data/spec/core/dataset_spec.rb +3513 -0
  91. data/spec/core/expression_filters_spec.rb +363 -0
  92. data/spec/core/migration_spec.rb +261 -0
  93. data/spec/core/object_graph_spec.rb +280 -0
  94. data/spec/core/pretty_table_spec.rb +58 -0
  95. data/spec/core/schema_generator_spec.rb +167 -0
  96. data/spec/core/schema_spec.rb +778 -0
  97. data/spec/core/spec_helper.rb +82 -0
  98. data/spec/core/version_spec.rb +7 -0
  99. data/spec/extensions/blank_spec.rb +67 -0
  100. data/spec/extensions/caching_spec.rb +201 -0
  101. data/spec/extensions/hook_class_methods_spec.rb +470 -0
  102. data/spec/extensions/inflector_spec.rb +122 -0
  103. data/spec/extensions/pagination_spec.rb +99 -0
  104. data/spec/extensions/pretty_table_spec.rb +91 -0
  105. data/spec/extensions/query_spec.rb +85 -0
  106. data/spec/extensions/schema_spec.rb +111 -0
  107. data/spec/extensions/single_table_inheritance_spec.rb +53 -0
  108. data/spec/extensions/spec_helper.rb +90 -0
  109. data/spec/extensions/string_date_time_spec.rb +93 -0
  110. data/spec/extensions/validation_class_methods_spec.rb +1054 -0
  111. data/spec/integration/dataset_test.rb +160 -0
  112. data/spec/integration/eager_loader_test.rb +683 -0
  113. data/spec/integration/prepared_statement_test.rb +130 -0
  114. data/spec/integration/schema_test.rb +183 -0
  115. data/spec/integration/spec_helper.rb +75 -0
  116. data/spec/integration/type_test.rb +96 -0
  117. data/spec/model/association_reflection_spec.rb +93 -0
  118. data/spec/model/associations_spec.rb +1780 -0
  119. data/spec/model/base_spec.rb +494 -0
  120. data/spec/model/caching_spec.rb +217 -0
  121. data/spec/model/dataset_methods_spec.rb +78 -0
  122. data/spec/model/eager_loading_spec.rb +1165 -0
  123. data/spec/model/hooks_spec.rb +472 -0
  124. data/spec/model/inflector_spec.rb +126 -0
  125. data/spec/model/model_spec.rb +588 -0
  126. data/spec/model/plugins_spec.rb +142 -0
  127. data/spec/model/record_spec.rb +1243 -0
  128. data/spec/model/schema_spec.rb +92 -0
  129. data/spec/model/spec_helper.rb +124 -0
  130. data/spec/model/validations_spec.rb +1080 -0
  131. data/spec/rcov.opts +6 -0
  132. data/spec/spec.opts +0 -0
  133. data/spec/spec_config.rb.example +10 -0
  134. metadata +202 -0
@@ -0,0 +1,472 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe "Model hooks" do
4
+ before do
5
+ MODEL_DB.reset
6
+ end
7
+
8
+ deprec_specify "should be definable using a block" do
9
+ $adds = []
10
+ c = Class.new(Sequel::Model)
11
+ c.class_eval do
12
+ before_save {$adds << 'hi'}
13
+ end
14
+
15
+ c.new.before_save
16
+ $adds.should == ['hi']
17
+ end
18
+
19
+ deprec_specify "should be definable using a method name" do
20
+ $adds = []
21
+ c = Class.new(Sequel::Model)
22
+ c.class_eval do
23
+ def bye; $adds << 'bye'; end
24
+ before_save :bye
25
+ end
26
+
27
+ c.new.before_save
28
+ $adds.should == ['bye']
29
+ end
30
+
31
+ deprec_specify "should be additive" do
32
+ $adds = []
33
+ c = Class.new(Sequel::Model)
34
+ c.class_eval do
35
+ after_save {$adds << 'hyiyie'}
36
+ after_save {$adds << 'byiyie'}
37
+ end
38
+
39
+ c.new.after_save
40
+ $adds.should == ['hyiyie', 'byiyie']
41
+ end
42
+
43
+ deprec_specify "before hooks should run in reverse order" do
44
+ $adds = []
45
+ c = Class.new(Sequel::Model)
46
+ c.class_eval do
47
+ before_save {$adds << 'hyiyie'}
48
+ before_save {$adds << 'byiyie'}
49
+ end
50
+
51
+ c.new.before_save
52
+ $adds.should == ['byiyie', 'hyiyie']
53
+ end
54
+
55
+ deprec_specify "should not be additive if the method or tag already exists" do
56
+ $adds = []
57
+ c = Class.new(Sequel::Model)
58
+ c.class_eval do
59
+ def bye; $adds << 'bye'; end
60
+ before_save :bye
61
+ before_save :bye
62
+ end
63
+
64
+ c.new.before_save
65
+ $adds.should == ['bye']
66
+
67
+ $adds = []
68
+ d = Class.new(Sequel::Model)
69
+ d.class_eval do
70
+ before_save(:bye){$adds << 'hyiyie'}
71
+ before_save(:bye){$adds << 'byiyie'}
72
+ end
73
+
74
+ d.new.before_save
75
+ $adds.should == ['byiyie']
76
+
77
+ $adds = []
78
+ e = Class.new(Sequel::Model)
79
+ e.class_eval do
80
+ def bye; $adds << 'bye'; end
81
+ before_save :bye
82
+ before_save(:bye){$adds << 'byiyie'}
83
+ end
84
+
85
+ e.new.before_save
86
+ $adds.should == ['byiyie']
87
+
88
+ $adds = []
89
+ e = Class.new(Sequel::Model)
90
+ e.class_eval do
91
+ def bye; $adds << 'bye'; end
92
+ before_save(:bye){$adds << 'byiyie'}
93
+ before_save :bye
94
+ end
95
+
96
+ e.new.before_save
97
+ $adds.should == ['bye']
98
+ end
99
+
100
+ deprec_specify "should be inheritable" do
101
+ $adds = []
102
+ a = Class.new(Sequel::Model)
103
+ a.class_eval do
104
+ after_save {$adds << '123'}
105
+ end
106
+
107
+ b = Class.new(a)
108
+ b.class_eval do
109
+ after_save {$adds << '456'}
110
+ after_save {$adds << '789'}
111
+ end
112
+
113
+ b.new.after_save
114
+ $adds.should == ['123', '456', '789']
115
+ end
116
+
117
+ deprec_specify "should be overridable in descendant classes" do
118
+ $adds = []
119
+ a = Class.new(Sequel::Model)
120
+ a.class_eval do
121
+ before_save {$adds << '123'}
122
+ end
123
+
124
+ b = Class.new(a)
125
+ b.class_eval do
126
+ def before_save; $adds << '456'; end
127
+ end
128
+
129
+ a.new.before_save
130
+ $adds.should == ['123']
131
+ $adds = []
132
+ b.new.before_save
133
+ $adds.should == ['456']
134
+ end
135
+
136
+ deprec_specify "should stop processing if a hook returns false" do
137
+ $flag = true
138
+ $adds = []
139
+
140
+ a = Class.new(Sequel::Model)
141
+ a.class_eval do
142
+ after_save {$adds << 'blah'; $flag}
143
+ after_save {$adds << 'cruel'}
144
+ end
145
+
146
+ a.new.after_save
147
+ $adds.should == ['blah', 'cruel']
148
+
149
+ # chain should not break on nil
150
+ $adds = []
151
+ $flag = nil
152
+ a.new.after_save
153
+ $adds.should == ['blah', 'cruel']
154
+
155
+ $adds = []
156
+ $flag = false
157
+ a.new.after_save
158
+ $adds.should == ['blah']
159
+
160
+ b = Class.new(a)
161
+ b.class_eval do
162
+ after_save {$adds << 'mau'}
163
+ end
164
+
165
+ $adds = []
166
+ b.new.after_save
167
+ $adds.should == ['blah']
168
+ end
169
+ end
170
+
171
+ describe "Model#after_initialize" do
172
+ specify "should be called after initialization" do
173
+ $values1 = nil
174
+ $reached_after_initialized = false
175
+
176
+ a = Class.new(Sequel::Model)
177
+ a.class_eval do
178
+ columns :x, :y
179
+ def after_initialize
180
+ $values1 = @values.clone
181
+ $reached_after_initialized = true
182
+ end
183
+ end
184
+
185
+ a.new(:x => 1, :y => 2)
186
+ $values1.should == {:x => 1, :y => 2}
187
+ $reached_after_initialized.should == true
188
+ end
189
+ end
190
+
191
+ describe "Model#before_create && Model#after_create" do
192
+ setup do
193
+ MODEL_DB.reset
194
+
195
+ @c = Class.new(Sequel::Model(:items))
196
+ @c.class_eval do
197
+ columns :x
198
+ no_primary_key
199
+
200
+ def after_create
201
+ MODEL_DB << "BLAH after"
202
+ end
203
+ end
204
+ end
205
+
206
+ specify "should be called around new record creation" do
207
+ @c.send(:define_method, :before_create){MODEL_DB << "BLAH before"}
208
+ @c.create(:x => 2)
209
+ MODEL_DB.sqls.should == [
210
+ 'BLAH before',
211
+ 'INSERT INTO items (x) VALUES (2)',
212
+ 'BLAH after'
213
+ ]
214
+ end
215
+
216
+ specify ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
217
+ @c.send(:define_method, :before_create){false}
218
+ proc{@c.load(:id => 2233).save}.should_not raise_error(Sequel::ValidationFailed)
219
+ proc{@c.create(:x => 2)}.should raise_error(Sequel::BeforeHookFailed)
220
+ MODEL_DB.sqls.should == []
221
+ end
222
+
223
+ specify ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
224
+ @c.send(:define_method, :before_create){false}
225
+ @c.raise_on_save_failure = false
226
+ @c.create(:x => 2).should == nil
227
+ MODEL_DB.sqls.should == []
228
+ end
229
+ end
230
+
231
+ describe "Model#before_update && Model#after_update" do
232
+ setup do
233
+ MODEL_DB.reset
234
+
235
+ @c = Class.new(Sequel::Model(:items))
236
+ @c.class_eval do
237
+ def after_update; MODEL_DB << "BLAH after" end
238
+ end
239
+ end
240
+
241
+ specify "should be called around record update" do
242
+ @c.send(:define_method, :before_update){MODEL_DB << "BLAH before"}
243
+ m = @c.load(:id => 2233)
244
+ m.save
245
+ MODEL_DB.sqls.should == [
246
+ 'BLAH before',
247
+ 'UPDATE items SET id = 2233 WHERE (id = 2233)',
248
+ 'BLAH after'
249
+ ]
250
+ end
251
+
252
+ specify "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
253
+ @c.send(:define_method, :before_update){false}
254
+ proc{@c.load(:id => 2233).save}.should_not raise_error(Sequel::ValidationFailed)
255
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::BeforeHookFailed)
256
+ MODEL_DB.sqls.should == []
257
+ end
258
+
259
+ specify "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
260
+ @c.send(:define_method, :before_update){false}
261
+ @c.raise_on_save_failure = false
262
+ @c.load(:id => 2233).save.should == nil
263
+ MODEL_DB.sqls.should == []
264
+ end
265
+ end
266
+
267
+ describe "Model#before_save && Model#after_save" do
268
+ setup do
269
+ MODEL_DB.reset
270
+
271
+ @c = Class.new(Sequel::Model(:items))
272
+ @c.class_eval do
273
+ columns :x
274
+ def after_save; MODEL_DB << "BLAH after" end
275
+ end
276
+ end
277
+
278
+ specify "should be called around record update" do
279
+ @c.send(:define_method, :before_save){MODEL_DB << "BLAH before"}
280
+ m = @c.load(:id => 2233)
281
+ m.save
282
+ MODEL_DB.sqls.should == [
283
+ 'BLAH before',
284
+ 'UPDATE items SET id = 2233 WHERE (id = 2233)',
285
+ 'BLAH after'
286
+ ]
287
+ end
288
+
289
+ specify "should be called around record creation" do
290
+ @c.send(:define_method, :before_save){MODEL_DB << "BLAH before"}
291
+ @c.no_primary_key
292
+ @c.create(:x => 2)
293
+ MODEL_DB.sqls.should == [
294
+ 'BLAH before',
295
+ 'INSERT INTO items (x) VALUES (2)',
296
+ 'BLAH after'
297
+ ]
298
+ end
299
+
300
+ specify "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
301
+ @c.send(:define_method, :before_save){false}
302
+ proc{@c.load(:id => 2233).save}.should_not raise_error(Sequel::ValidationFailed)
303
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::BeforeHookFailed)
304
+ MODEL_DB.sqls.should == []
305
+ end
306
+
307
+ specify "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
308
+ @c.send(:define_method, :before_save){false}
309
+ @c.raise_on_save_failure = false
310
+ @c.load(:id => 2233).save.should == nil
311
+ MODEL_DB.sqls.should == []
312
+ end
313
+ end
314
+
315
+ describe "Model#before_destroy && Model#after_destroy" do
316
+ setup do
317
+ MODEL_DB.reset
318
+
319
+ @c = Class.new(Sequel::Model(:items))
320
+ @c.class_eval do
321
+ def after_destroy; MODEL_DB << "BLAH after"; end
322
+
323
+ def delete
324
+ MODEL_DB << "DELETE BLAH"
325
+ end
326
+ end
327
+ end
328
+
329
+ specify "should be called around record destruction" do
330
+ @c.send(:define_method, :before_destroy){MODEL_DB << "BLAH before"}
331
+ m = @c.load(:id => 2233)
332
+ m.destroy
333
+ MODEL_DB.sqls.should == [
334
+ 'BLAH before',
335
+ 'DELETE BLAH',
336
+ 'BLAH after'
337
+ ]
338
+ end
339
+
340
+ specify "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
341
+ @c.send(:define_method, :before_destroy){false}
342
+ proc{@c.load(:id => 2233).destroy}.should raise_error(Sequel::BeforeHookFailed)
343
+ MODEL_DB.sqls.should == []
344
+ end
345
+
346
+ specify "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
347
+ @c.send(:define_method, :before_destroy){false}
348
+ @c.raise_on_save_failure = false
349
+ @c.load(:id => 2233).destroy.should == nil
350
+ MODEL_DB.sqls.should == []
351
+ end
352
+ end
353
+
354
+ describe "Model#before_validation && Model#after_validation" do
355
+ setup do
356
+ MODEL_DB.reset
357
+
358
+ @c = Class.new(Sequel::Model(:items))
359
+ @c.class_eval do
360
+ def after_validation; MODEL_DB << "BLAH after" end
361
+
362
+ def self.validate(o)
363
+ o.errors[:id] << 'not valid' unless o[:id] == 2233
364
+ end
365
+ columns :id
366
+ end
367
+ end
368
+
369
+ specify "should be called around validation" do
370
+ @c.send(:define_method, :before_validation){MODEL_DB << "BLAH before"}
371
+ m = @c.load(:id => 2233)
372
+ m.should be_valid
373
+ MODEL_DB.sqls.should == ['BLAH before', 'BLAH after']
374
+
375
+ MODEL_DB.sqls.clear
376
+ m = @c.load(:id => 22)
377
+ m.should_not be_valid
378
+ MODEL_DB.sqls.should == ['BLAH before', 'BLAH after']
379
+ end
380
+
381
+ specify "should be called when calling save" do
382
+ @c.send(:define_method, :before_validation){MODEL_DB << "BLAH before"}
383
+ m = @c.load(:id => 2233)
384
+ m.save.should == m
385
+ MODEL_DB.sqls.should == ['BLAH before', 'BLAH after', 'UPDATE items SET id = 2233 WHERE (id = 2233)']
386
+
387
+ MODEL_DB.sqls.clear
388
+ m = @c.load(:id => 22)
389
+ m.raise_on_save_failure = false
390
+ m.save.should == nil
391
+ MODEL_DB.sqls.should == ['BLAH before', 'BLAH after']
392
+ end
393
+
394
+ specify "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
395
+ @c.send(:define_method, :before_validation){false}
396
+ proc{@c.load(:id => 2233).save}.should_not raise_error(Sequel::ValidationFailed)
397
+ proc{@c.load(:id => 2233).save}.should raise_error(Sequel::BeforeHookFailed)
398
+ MODEL_DB.sqls.should == []
399
+ end
400
+
401
+ specify "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
402
+ @c.send(:define_method, :before_validation){false}
403
+ @c.raise_on_save_failure = false
404
+ @c.load(:id => 2233).save.should == nil
405
+ MODEL_DB.sqls.should == []
406
+ end
407
+ end
408
+
409
+ describe "Model.has_hooks?" do
410
+ setup do
411
+ @c = Class.new(Sequel::Model(:items))
412
+ end
413
+
414
+ deprec_specify "should return false if no hooks are defined" do
415
+ @c.has_hooks?(:before_save).should be_false
416
+ end
417
+
418
+ deprec_specify "should return true if hooks are defined" do
419
+ @c.before_save {'blah'}
420
+ @c.has_hooks?(:before_save).should be_true
421
+ end
422
+
423
+ deprec_specify "should return true if hooks are inherited" do
424
+ @d = Class.new(@c)
425
+ @d.has_hooks?(:before_save).should be_false
426
+ end
427
+ end
428
+
429
+ describe "Model#add_hook_type" do
430
+ setup do
431
+ deprec do
432
+ class Foo < Sequel::Model(:items)
433
+ add_hook_type :before_bar, :after_bar
434
+
435
+ def bar
436
+ return :b if before_bar == false
437
+ return :a if after_bar == false
438
+ true
439
+ end
440
+ end
441
+ end
442
+ @f = Class.new(Foo)
443
+ end
444
+
445
+ deprec_specify "should have before_bar and after_bar class methods" do
446
+ @f.should respond_to(:before_bar)
447
+ @f.should respond_to(:before_bar)
448
+ end
449
+
450
+ deprec_specify "should have before_bar and after_bar instance methods" do
451
+ @f.new.should respond_to(:before_bar)
452
+ @f.new.should respond_to(:before_bar)
453
+ end
454
+
455
+ deprec_specify "it should return true for bar when before_bar and after_bar hooks are returing true" do
456
+ a = 1
457
+ @f.before_bar { a += 1}
458
+ @f.new.bar.should be_true
459
+ a.should == 2
460
+ @f.after_bar { a *= 2}
461
+ @f.new.bar.should be_true
462
+ a.should == 6
463
+ end
464
+
465
+ deprec_specify "it should return nil for bar when before_bar and after_bar hooks are returing false" do
466
+ @f.new.bar.should be_true
467
+ @f.after_bar { false }
468
+ @f.new.bar.should == :a
469
+ @f.before_bar { false }
470
+ @f.new.bar.should == :b
471
+ end
472
+ end