will_paginate 3.0.4 → 4.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 (50) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +7 -10
  3. data/lib/will_paginate/active_record.rb +18 -17
  4. data/lib/will_paginate/deprecation.rb +3 -3
  5. data/lib/will_paginate/i18n.rb +3 -3
  6. data/lib/will_paginate/locale/en.yml +4 -0
  7. data/lib/will_paginate/mongoid.rb +48 -0
  8. data/lib/will_paginate/page_number.rb +7 -11
  9. data/lib/will_paginate/railtie.rb +19 -13
  10. data/lib/will_paginate/version.rb +2 -2
  11. data/lib/will_paginate/view_helpers/action_view.rb +12 -5
  12. data/lib/will_paginate/view_helpers/hanami.rb +41 -0
  13. data/lib/will_paginate/view_helpers/link_renderer.rb +23 -17
  14. data/lib/will_paginate/view_helpers/link_renderer_base.rb +1 -1
  15. data/lib/will_paginate/view_helpers.rb +3 -1
  16. data/lib/will_paginate.rb +0 -12
  17. metadata +29 -58
  18. data/Rakefile +0 -25
  19. data/lib/will_paginate/data_mapper.rb +0 -95
  20. data/lib/will_paginate/view_helpers/merb.rb +0 -26
  21. data/spec/ci.rb +0 -29
  22. data/spec/collection_spec.rb +0 -139
  23. data/spec/console +0 -12
  24. data/spec/console_fixtures.rb +0 -28
  25. data/spec/database.yml +0 -22
  26. data/spec/finders/active_record_spec.rb +0 -556
  27. data/spec/finders/activerecord_test_connector.rb +0 -115
  28. data/spec/finders/data_mapper_spec.rb +0 -103
  29. data/spec/finders/data_mapper_test_connector.rb +0 -54
  30. data/spec/finders/sequel_spec.rb +0 -67
  31. data/spec/finders/sequel_test_connector.rb +0 -15
  32. data/spec/fixtures/admin.rb +0 -3
  33. data/spec/fixtures/developer.rb +0 -13
  34. data/spec/fixtures/developers_projects.yml +0 -13
  35. data/spec/fixtures/project.rb +0 -15
  36. data/spec/fixtures/projects.yml +0 -6
  37. data/spec/fixtures/replies.yml +0 -29
  38. data/spec/fixtures/reply.rb +0 -9
  39. data/spec/fixtures/schema.rb +0 -38
  40. data/spec/fixtures/topic.rb +0 -7
  41. data/spec/fixtures/topics.yml +0 -30
  42. data/spec/fixtures/user.rb +0 -2
  43. data/spec/fixtures/users.yml +0 -35
  44. data/spec/page_number_spec.rb +0 -65
  45. data/spec/per_page_spec.rb +0 -41
  46. data/spec/spec_helper.rb +0 -71
  47. data/spec/view_helpers/action_view_spec.rb +0 -423
  48. data/spec/view_helpers/base_spec.rb +0 -130
  49. data/spec/view_helpers/link_renderer_base_spec.rb +0 -87
  50. data/spec/view_helpers/view_example_group.rb +0 -121
@@ -1,556 +0,0 @@
1
- require 'spec_helper'
2
- require 'will_paginate/active_record'
3
- require File.expand_path('../activerecord_test_connector', __FILE__)
4
-
5
- ActiverecordTestConnector.setup
6
- abort unless ActiverecordTestConnector.able_to_connect
7
-
8
- describe WillPaginate::ActiveRecord do
9
-
10
- extend ActiverecordTestConnector::FixtureSetup
11
-
12
- fixtures :topics, :replies, :users, :projects, :developers_projects
13
-
14
- it "should integrate with ActiveRecord::Base" do
15
- ActiveRecord::Base.should respond_to(:paginate)
16
- end
17
-
18
- it "should paginate" do
19
- lambda {
20
- users = User.paginate(:page => 1, :per_page => 5).to_a
21
- users.length.should == 5
22
- }.should run_queries(2)
23
- end
24
-
25
- it "should fail when encountering unknown params" do
26
- lambda {
27
- User.paginate :foo => 'bar', :page => 1, :per_page => 4
28
- }.should raise_error(ArgumentError)
29
- end
30
-
31
- describe "relation" do
32
- it "should return a relation" do
33
- rel = nil
34
- lambda {
35
- rel = Developer.paginate(:page => 1)
36
- rel.per_page.should == 10
37
- rel.current_page.should == 1
38
- }.should run_queries(0)
39
-
40
- lambda {
41
- rel.total_pages.should == 2
42
- }.should run_queries(1)
43
- end
44
-
45
- it "should keep per-class per_page number" do
46
- rel = Developer.order('id').paginate(:page => 1)
47
- rel.per_page.should == 10
48
- end
49
-
50
- it "should be able to change per_page number" do
51
- rel = Developer.order('id').paginate(:page => 1).limit(5)
52
- rel.per_page.should == 5
53
- end
54
-
55
- it "remembers pagination in sub-relations" do
56
- rel = Topic.paginate(:page => 2, :per_page => 3)
57
- lambda {
58
- rel.total_entries.should == 4
59
- }.should run_queries(1)
60
- rel = rel.mentions_activerecord
61
- rel.current_page.should == 2
62
- rel.per_page.should == 3
63
- lambda {
64
- rel.total_entries.should == 1
65
- }.should run_queries(1)
66
- end
67
-
68
- it "supports the page() method" do
69
- rel = Developer.page('1').order('id')
70
- rel.current_page.should == 1
71
- rel.per_page.should == 10
72
- rel.offset.should == 0
73
-
74
- rel = rel.limit(5).page(2)
75
- rel.per_page.should == 5
76
- rel.offset.should == 5
77
- end
78
-
79
- it "raises on invalid page number" do
80
- lambda {
81
- Developer.page('foo')
82
- }.should raise_error(ArgumentError)
83
- end
84
-
85
- it "supports first limit() then page()" do
86
- rel = Developer.limit(3).page(3)
87
- rel.offset.should == 6
88
- end
89
-
90
- it "supports first page() then limit()" do
91
- rel = Developer.page(3).limit(3)
92
- rel.offset.should == 6
93
- end
94
-
95
- it "supports #first" do
96
- rel = Developer.order('id').page(2).per_page(4)
97
- rel.first.should == users(:dev_5)
98
- rel.first(2).should == users(:dev_5, :dev_6)
99
- end
100
-
101
- it "supports #last" do
102
- rel = Developer.order('id').page(2).per_page(4)
103
- rel.last.should == users(:dev_8)
104
- rel.last(2).should == users(:dev_7, :dev_8)
105
- rel.page(3).last.should == users(:poor_jamis)
106
- end
107
-
108
- it "keeps pagination data after 'scoped'" do
109
- rel = Developer.page(2).scoped
110
- rel.per_page.should == 10
111
- rel.offset.should == 10
112
- rel.current_page.should == 2
113
- end
114
- end
115
-
116
- describe "counting" do
117
- it "should guess the total count" do
118
- lambda {
119
- topics = Topic.paginate :page => 2, :per_page => 3
120
- topics.total_entries.should == 4
121
- }.should run_queries(1)
122
- end
123
-
124
- it "should guess that there are no records" do
125
- lambda {
126
- topics = Topic.where(:project_id => 999).paginate :page => 1, :per_page => 3
127
- topics.total_entries.should == 0
128
- }.should run_queries(1)
129
- end
130
-
131
- it "forgets count in sub-relations" do
132
- lambda {
133
- topics = Topic.paginate :page => 1, :per_page => 3
134
- topics.total_entries.should == 4
135
- topics.where('1 = 1').total_entries.should == 4
136
- }.should run_queries(2)
137
- end
138
-
139
- it "remembers custom count options in sub-relations" do
140
- topics = Topic.paginate :page => 1, :per_page => 3, :count => {:conditions => "title LIKE '%futurama%'"}
141
- topics.total_entries.should == 1
142
- topics.length.should == 3
143
- lambda {
144
- topics.order('id').total_entries.should == 1
145
- }.should run_queries(1)
146
- end
147
-
148
- it "supports empty? method" do
149
- topics = Topic.paginate :page => 1, :per_page => 3
150
- lambda {
151
- topics.should_not be_empty
152
- }.should run_queries(1)
153
- end
154
-
155
- it "support empty? for grouped queries" do
156
- topics = Topic.group(:project_id).paginate :page => 1, :per_page => 3
157
- lambda {
158
- topics.should_not be_empty
159
- }.should run_queries(1)
160
- end
161
-
162
- it "supports `size` for grouped queries" do
163
- topics = Topic.group(:project_id).paginate :page => 1, :per_page => 3
164
- lambda {
165
- topics.size.should == {nil=>2, 1=>2}
166
- }.should run_queries(1)
167
- end
168
-
169
- it "overrides total_entries count with a fixed value" do
170
- lambda {
171
- topics = Topic.paginate :page => 1, :per_page => 3, :total_entries => 999
172
- topics.total_entries.should == 999
173
- # value is kept even in sub-relations
174
- topics.where('1 = 1').total_entries.should == 999
175
- }.should run_queries(0)
176
- end
177
-
178
- it "supports a non-int for total_entries" do
179
- topics = Topic.paginate :page => 1, :per_page => 3, :total_entries => "999"
180
- topics.total_entries.should == 999
181
- end
182
-
183
- it "removes :include for count" do
184
- lambda {
185
- developers = Developer.paginate(:page => 1, :per_page => 1).includes(:projects)
186
- developers.total_entries.should == 11
187
- $query_sql.last.should_not =~ /\bJOIN\b/
188
- }.should run_queries(1)
189
- end
190
-
191
- it "keeps :include for count when they are referenced in :conditions" do
192
- developers = Developer.paginate(:page => 1, :per_page => 1).includes(:projects)
193
- with_condition = developers.where('projects.id > 1')
194
- with_condition.total_entries.should == 1
195
-
196
- $query_sql.last.should =~ /\bJOIN\b/
197
- end
198
-
199
- it "should count with group" do
200
- Developer.group(:salary).page(1).total_entries.should == 4
201
- end
202
-
203
- it "should not have zero total_pages when the result set is empty" do
204
- Developer.where("1 = 2").page(1).total_pages.should == 1
205
- end
206
- end
207
-
208
- it "should not ignore :select parameter when it says DISTINCT" do
209
- users = User.select('DISTINCT salary').paginate :page => 2
210
- users.total_entries.should == 5
211
- end
212
-
213
- describe "paginate_by_sql" do
214
- it "should respond" do
215
- User.should respond_to(:paginate_by_sql)
216
- end
217
-
218
- it "should paginate" do
219
- lambda {
220
- sql = "select content from topics where content like '%futurama%'"
221
- topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 1
222
- topics.total_entries.should == 1
223
- topics.first.attributes.has_key?('title').should be_false
224
- }.should run_queries(2)
225
- end
226
-
227
- it "should respect total_entries setting" do
228
- lambda {
229
- sql = "select content from topics"
230
- topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 1, :total_entries => 999
231
- topics.total_entries.should == 999
232
- }.should run_queries(1)
233
- end
234
-
235
- it "defaults to page 1" do
236
- sql = "select content from topics"
237
- topics = Topic.paginate_by_sql sql, :page => nil, :per_page => 1
238
- topics.current_page.should == 1
239
- topics.size.should == 1
240
- end
241
-
242
- it "should strip the order when counting" do
243
- lambda {
244
- sql = "select id, title, content from topics order by topics.title"
245
- topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 2
246
- topics.first.should == topics(:ar)
247
- }.should run_queries(2)
248
-
249
- $query_sql.last.should include('COUNT')
250
- $query_sql.last.should_not include('order by topics.title')
251
- end
252
-
253
- it "shouldn't change the original query string" do
254
- query = 'select * from topics where 1 = 2'
255
- original_query = query.dup
256
- Topic.paginate_by_sql(query, :page => 1)
257
- query.should == original_query
258
- end
259
- end
260
-
261
- it "doesn't mangle options" do
262
- options = { :page => 1 }
263
- options.expects(:delete).never
264
- options_before = options.dup
265
-
266
- Topic.paginate(options)
267
- options.should == options_before
268
- end
269
-
270
- it "should get first page of Topics with a single query" do
271
- lambda {
272
- result = Topic.paginate :page => nil
273
- result.to_a # trigger loading of records
274
- result.current_page.should == 1
275
- result.total_pages.should == 1
276
- result.size.should == 4
277
- }.should run_queries(1)
278
- end
279
-
280
- it "should get second (inexistent) page of Topics, requiring 2 queries" do
281
- lambda {
282
- result = Topic.paginate :page => 2
283
- result.total_pages.should == 1
284
- result.should be_empty
285
- }.should run_queries(2)
286
- end
287
-
288
- it "should paginate with :order" do
289
- result = Topic.paginate :page => 1, :order => 'created_at DESC'
290
- result.should == topics(:futurama, :harvey_birdman, :rails, :ar).reverse
291
- result.total_pages.should == 1
292
- end
293
-
294
- it "should paginate with :conditions" do
295
- result = Topic.paginate :page => 1, :order => 'id ASC',
296
- :conditions => ["created_at > ?", 30.minutes.ago]
297
- result.should == topics(:rails, :ar)
298
- result.total_pages.should == 1
299
- end
300
-
301
- it "should paginate with :include and :conditions" do
302
- result = Topic.paginate \
303
- :page => 1,
304
- :include => :replies,
305
- :conditions => "replies.content LIKE 'Bird%' ",
306
- :per_page => 10
307
-
308
- expected = Topic.find :all,
309
- :include => 'replies',
310
- :conditions => "replies.content LIKE 'Bird%' ",
311
- :limit => 10
312
-
313
- result.should == expected
314
- result.total_entries.should == 1
315
- end
316
-
317
- it "should paginate with :include and :order" do
318
- result = nil
319
- lambda {
320
- result = Topic.paginate(:page => 1, :include => :replies, :per_page => 10,
321
- :order => 'replies.created_at asc, topics.created_at asc').to_a
322
- }.should run_queries(2)
323
-
324
- expected = Topic.find :all,
325
- :include => 'replies',
326
- :order => 'replies.created_at asc, topics.created_at asc',
327
- :limit => 10
328
-
329
- result.should == expected
330
- result.total_entries.should == 4
331
- end
332
-
333
- describe "associations" do
334
- it "should paginate with include" do
335
- project = projects(:active_record)
336
-
337
- result = project.topics.paginate \
338
- :page => 1,
339
- :include => :replies,
340
- :conditions => ["replies.content LIKE ?", 'Nice%'],
341
- :per_page => 10
342
-
343
- expected = Topic.find :all,
344
- :include => 'replies',
345
- :conditions => ["project_id = ? AND replies.content LIKE ?", project.id, 'Nice%'],
346
- :limit => 10
347
-
348
- result.should == expected
349
- end
350
-
351
- it "should paginate" do
352
- dhh = users(:david)
353
- expected_name_ordered = projects(:action_controller, :active_record)
354
- expected_id_ordered = projects(:active_record, :action_controller)
355
-
356
- lambda {
357
- # with association-specified order
358
- result = ignore_deprecation { dhh.projects.paginate(:page => 1) }
359
- result.should == expected_name_ordered
360
- result.total_entries.should == 2
361
- }.should run_queries(2)
362
-
363
- # with explicit order
364
- result = dhh.projects.paginate(:page => 1).reorder('projects.id')
365
- result.should == expected_id_ordered
366
- result.total_entries.should == 2
367
-
368
- lambda {
369
- dhh.projects.find(:all, :order => 'projects.id', :limit => 4)
370
- }.should_not raise_error
371
-
372
- result = dhh.projects.paginate(:page => 1, :per_page => 4).reorder('projects.id')
373
- result.should == expected_id_ordered
374
-
375
- # has_many with implicit order
376
- topic = Topic.find(1)
377
- expected = replies(:spam, :witty_retort)
378
- # FIXME: wow, this is ugly
379
- topic.replies.paginate(:page => 1).map(&:id).sort.should == expected.map(&:id).sort
380
- topic.replies.paginate(:page => 1).reorder('replies.id ASC').should == expected.reverse
381
- end
382
-
383
- it "should paginate through association extension" do
384
- project = Project.order('id').first
385
- expected = [replies(:brave)]
386
-
387
- lambda {
388
- result = project.replies.only_recent.paginate(:page => 1)
389
- result.should == expected
390
- }.should run_queries(1)
391
- end
392
- end
393
-
394
- it "should paginate with joins" do
395
- result = nil
396
- join_sql = 'LEFT JOIN developers_projects ON users.id = developers_projects.developer_id'
397
-
398
- lambda {
399
- result = Developer.paginate(:page => 1, :joins => join_sql, :conditions => 'project_id = 1')
400
- result.to_a # trigger loading of records
401
- result.size.should == 2
402
- developer_names = result.map(&:name)
403
- developer_names.should include('David')
404
- developer_names.should include('Jamis')
405
- }.should run_queries(1)
406
-
407
- lambda {
408
- expected = result.to_a
409
- result = Developer.paginate(:page => 1, :joins => join_sql,
410
- :conditions => 'project_id = 1', :count => { :select => "users.id" }).to_a
411
- result.should == expected
412
- result.total_entries.should == 2
413
- }.should run_queries(1)
414
- end
415
-
416
- it "should paginate with group" do
417
- result = nil
418
- lambda {
419
- result = Developer.paginate(:page => 1, :per_page => 10,
420
- :group => 'salary', :select => 'salary', :order => 'salary').to_a
421
- }.should run_queries(1)
422
-
423
- expected = users(:david, :jamis, :dev_10, :poor_jamis).map(&:salary).sort
424
- result.map(&:salary).should == expected
425
- end
426
-
427
- it "should not paginate with dynamic finder" do
428
- lambda {
429
- Developer.paginate_by_salary(100000, :page => 1, :per_page => 5)
430
- }.should raise_error(NoMethodError)
431
- end
432
-
433
- it "should paginate with_scope" do
434
- result = Developer.with_poor_ones { Developer.paginate :page => 1 }
435
- result.size.should == 2
436
- result.total_entries.should == 2
437
- end
438
-
439
- describe "scopes" do
440
- it "should paginate" do
441
- result = Developer.poor.paginate :page => 1, :per_page => 1
442
- result.size.should == 1
443
- result.total_entries.should == 2
444
- end
445
-
446
- it "should paginate on habtm association" do
447
- project = projects(:active_record)
448
- lambda {
449
- result = ignore_deprecation { project.developers.poor.paginate :page => 1, :per_page => 1 }
450
- result.size.should == 1
451
- result.total_entries.should == 1
452
- }.should run_queries(2)
453
- end
454
-
455
- it "should paginate on hmt association" do
456
- project = projects(:active_record)
457
- expected = [replies(:brave)]
458
-
459
- lambda {
460
- result = project.replies.recent.paginate :page => 1, :per_page => 1
461
- result.should == expected
462
- result.total_entries.should == 1
463
- }.should run_queries(2)
464
- end
465
-
466
- it "should paginate on has_many association" do
467
- project = projects(:active_record)
468
- expected = [topics(:ar)]
469
-
470
- lambda {
471
- result = project.topics.mentions_activerecord.paginate :page => 1, :per_page => 1
472
- result.should == expected
473
- result.total_entries.should == 1
474
- }.should run_queries(2)
475
- end
476
- end
477
-
478
- it "should paginate with :readonly option" do
479
- lambda {
480
- Developer.paginate :readonly => true, :page => 1
481
- }.should_not raise_error
482
- end
483
-
484
- it "should not paginate an array of IDs" do
485
- lambda {
486
- Developer.paginate((1..8).to_a, :per_page => 3, :page => 2, :order => 'id')
487
- }.should raise_error(ArgumentError)
488
- end
489
-
490
- it "errors out for invalid values" do |variable|
491
- lambda {
492
- # page that results in an offset larger than BIGINT
493
- Project.page(307445734561825862)
494
- }.should raise_error(WillPaginate::InvalidPage, "invalid offset: 9223372036854775830")
495
- end
496
-
497
- protected
498
-
499
- def ignore_deprecation
500
- ActiveSupport::Deprecation.silence { yield }
501
- end
502
-
503
- def run_queries(num)
504
- QueryCountMatcher.new(num)
505
- end
506
-
507
- def show_queries(&block)
508
- counter = QueryCountMatcher.new(nil)
509
- counter.run block
510
- ensure
511
- queries = counter.performed_queries
512
- if queries.any?
513
- puts queries
514
- else
515
- puts "no queries"
516
- end
517
- end
518
-
519
- end
520
-
521
- class QueryCountMatcher
522
- def initialize(num)
523
- @expected_count = num
524
- end
525
-
526
- def matches?(block)
527
- run(block)
528
-
529
- if @expected_count.respond_to? :include?
530
- @expected_count.include? @count
531
- else
532
- @count == @expected_count
533
- end
534
- end
535
-
536
- def run(block)
537
- $query_count = 0
538
- $query_sql = []
539
- block.call
540
- ensure
541
- @queries = $query_sql.dup
542
- @count = $query_count
543
- end
544
-
545
- def performed_queries
546
- @queries
547
- end
548
-
549
- def failure_message
550
- "expected #{@expected_count} queries, got #{@count}\n#{@queries.join("\n")}"
551
- end
552
-
553
- def negative_failure_message
554
- "expected query count not to be #{@expected_count}"
555
- end
556
- end
@@ -1,115 +0,0 @@
1
- require 'active_record'
2
- require 'active_record/fixtures'
3
- require 'active_support/multibyte' # needed for Ruby 1.9.1
4
-
5
- $query_count = 0
6
- $query_sql = []
7
-
8
- ignore_sql = /
9
- ^(
10
- PRAGMA | SHOW\ max_identifier_length |
11
- SELECT\ (currval|CAST|@@IDENTITY|@@ROWCOUNT) |
12
- SHOW\ (FIELDS|TABLES)
13
- )\b |
14
- \bFROM\ (sqlite_master|pg_tables|pg_attribute)\b
15
- /x
16
-
17
- ActiveSupport::Notifications.subscribe(/^sql\./) do |*args|
18
- payload = args.last
19
- unless payload[:name] =~ /^Fixture/ or payload[:sql] =~ ignore_sql
20
- $query_count += 1
21
- $query_sql << payload[:sql]
22
- end
23
- end
24
-
25
- module ActiverecordTestConnector
26
- extend self
27
-
28
- attr_accessor :able_to_connect
29
- attr_accessor :connected
30
-
31
- FIXTURES_PATH = File.expand_path('../../fixtures', __FILE__)
32
-
33
- Fixtures = defined?(ActiveRecord::FixtureSet) ? ActiveRecord::FixtureSet :
34
- defined?(ActiveRecord::Fixtures) ? ActiveRecord::Fixtures :
35
- ::Fixtures
36
-
37
- # Set our defaults
38
- self.connected = false
39
- self.able_to_connect = true
40
-
41
- def setup
42
- unless self.connected || !self.able_to_connect
43
- setup_connection
44
- load_schema
45
- add_load_path FIXTURES_PATH
46
- self.connected = true
47
- end
48
- rescue Exception => e # errors from ActiveRecord setup
49
- $stderr.puts "\nSkipping ActiveRecord tests: #{e}\n\n"
50
- self.able_to_connect = false
51
- end
52
-
53
- private
54
-
55
- def add_load_path(path)
56
- dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies
57
- dep.autoload_paths.unshift path
58
- end
59
-
60
- def setup_connection
61
- db = ENV['DB'].blank?? 'sqlite3' : ENV['DB']
62
-
63
- configurations = YAML.load_file(File.expand_path('../../database.yml', __FILE__))
64
- raise "no configuration for '#{db}'" unless configurations.key? db
65
- configuration = configurations[db]
66
-
67
- # ActiveRecord::Base.logger = Logger.new(STDOUT) if $0 == 'irb'
68
- puts "using #{configuration['adapter']} adapter"
69
-
70
- ActiveRecord::Base.configurations = { db => configuration }
71
- ActiveRecord::Base.establish_connection(db)
72
- ActiveRecord::Base.default_timezone = :utc
73
- end
74
-
75
- def load_schema
76
- ActiveRecord::Base.silence do
77
- ActiveRecord::Migration.verbose = false
78
- load File.join(FIXTURES_PATH, 'schema.rb')
79
- end
80
- end
81
-
82
- module FixtureSetup
83
- def fixtures(*tables)
84
- table_names = tables.map { |t| t.to_s }
85
-
86
- fixtures = Fixtures.create_fixtures ActiverecordTestConnector::FIXTURES_PATH, table_names
87
- @@loaded_fixtures = {}
88
- @@fixture_cache = {}
89
-
90
- unless fixtures.nil?
91
- if fixtures.instance_of?(Fixtures)
92
- @@loaded_fixtures[fixtures.table_name] = fixtures
93
- else
94
- fixtures.each { |f| @@loaded_fixtures[f.table_name] = f }
95
- end
96
- end
97
-
98
- table_names.each do |table_name|
99
- define_method(table_name) do |*fixtures|
100
- @@fixture_cache[table_name] ||= {}
101
-
102
- instances = fixtures.map do |fixture|
103
- if @@loaded_fixtures[table_name][fixture.to_s]
104
- @@fixture_cache[table_name][fixture] ||= @@loaded_fixtures[table_name][fixture.to_s].find
105
- else
106
- raise StandardError, "No fixture with name '#{fixture}' found for table '#{table_name}'"
107
- end
108
- end
109
-
110
- instances.size == 1 ? instances.first : instances
111
- end
112
- end
113
- end
114
- end
115
- end