resque-scheduler 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of resque-scheduler might be problematic. Click here for more details.
- checksums.yaml +5 -13
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +32 -26
- data/.travis.yml +3 -8
- data/AUTHORS.md +3 -0
- data/README.md +14 -3
- data/lib/resque/scheduler.rb +12 -15
- data/lib/resque/scheduler/cli.rb +3 -1
- data/lib/resque/scheduler/configuration.rb +1 -1
- data/lib/resque/scheduler/delaying_extensions.rb +40 -11
- data/lib/resque/scheduler/env.rb +6 -18
- data/lib/resque/scheduler/server.rb +11 -5
- data/lib/resque/scheduler/server/views/delayed.erb +1 -2
- data/lib/resque/scheduler/server/views/search.erb +1 -2
- data/lib/resque/scheduler/signal_handling.rb +1 -1
- data/lib/resque/scheduler/util.rb +1 -3
- data/lib/resque/scheduler/version.rb +1 -1
- data/resque-scheduler.gemspec +5 -3
- data/test/cli_test.rb +5 -0
- data/test/delayed_queue_test.rb +277 -0
- data/test/scheduler_test.rb +18 -6
- data/test/test_helper.rb +7 -12
- data/test/util_test.rb +6 -0
- metadata +77 -49
- data/test/support/redis_instance.rb +0 -133
@@ -1,5 +1,5 @@
|
|
1
1
|
<h1>Search Results</h1>
|
2
|
-
<%=
|
2
|
+
<%= scheduler_view :search_form, layout: false %>
|
3
3
|
<hr>
|
4
4
|
<% delayed = @jobs.select { |j| j['where_at'] == 'delayed' } %>
|
5
5
|
<h1>Delayed jobs</h1>
|
@@ -70,4 +70,3 @@
|
|
70
70
|
</table>
|
71
71
|
|
72
72
|
|
73
|
-
|
data/resque-scheduler.gemspec
CHANGED
@@ -18,23 +18,25 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.license = 'MIT'
|
19
19
|
|
20
20
|
spec.files = `git ls-files -z`.split("\0")
|
21
|
-
spec.executables = spec.files.grep(
|
22
|
-
spec.test_files = spec.files.grep(
|
21
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
22
|
+
spec.test_files = spec.files.grep(%r{^test/})
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler'
|
26
26
|
spec.add_development_dependency 'json'
|
27
27
|
spec.add_development_dependency 'kramdown'
|
28
|
+
spec.add_development_dependency 'minitest'
|
28
29
|
spec.add_development_dependency 'mocha'
|
29
30
|
spec.add_development_dependency 'pry'
|
30
31
|
spec.add_development_dependency 'rack-test'
|
31
32
|
spec.add_development_dependency 'rake'
|
32
33
|
spec.add_development_dependency 'simplecov'
|
34
|
+
spec.add_development_dependency 'test-unit'
|
33
35
|
spec.add_development_dependency 'yard'
|
34
36
|
|
35
37
|
# We pin rubocop because new cops have a tendency to result in false-y
|
36
38
|
# positives for new contributors, which is not a nice experience.
|
37
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
39
|
+
spec.add_development_dependency 'rubocop', '~> 0.35.1'
|
38
40
|
|
39
41
|
spec.add_runtime_dependency 'mono_logger', '~> 1.0'
|
40
42
|
spec.add_runtime_dependency 'redis', '~> 3.0'
|
data/test/cli_test.rb
CHANGED
@@ -223,4 +223,9 @@ context 'Cli' do
|
|
223
223
|
Resque::Scheduler.expects(:run)
|
224
224
|
Resque::Scheduler::Cli.run!([], {})
|
225
225
|
end
|
226
|
+
|
227
|
+
test 'does not create keys for unspecified environment variables' do
|
228
|
+
cli = new_cli([], 'DYNAMIC_SCHEDULE' => 'true')
|
229
|
+
assert_equal({ dynamic: 'true' }, cli.send(:options))
|
230
|
+
end
|
226
231
|
end
|
data/test/delayed_queue_test.rb
CHANGED
@@ -516,6 +516,283 @@ context 'DelayedQueue' do
|
|
516
516
|
assert_equal(2, Resque.count_all_scheduled_jobs)
|
517
517
|
end
|
518
518
|
|
519
|
+
test 'enqueue_delayed_selection enqueues multiple items matching ' \
|
520
|
+
'arguments at same timestamp' do
|
521
|
+
t = Time.now + 120
|
522
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'llama')
|
523
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
524
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'monkey')
|
525
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'platypus')
|
526
|
+
Resque.enqueue_at(t, SomeIvarJob, 'baz')
|
527
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'llama')
|
528
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'llama')
|
529
|
+
|
530
|
+
assert_equal(5, Resque.enqueue_delayed_selection { |a| a.first == 'bar' })
|
531
|
+
assert_equal(2, Resque.count_all_scheduled_jobs)
|
532
|
+
end
|
533
|
+
|
534
|
+
test 'enqueue_delayed_selection enqueues single item matching arguments' do
|
535
|
+
t = Time.now + 120
|
536
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
537
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
538
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, 'bar')
|
539
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, 'baz')
|
540
|
+
|
541
|
+
assert_equal(1, Resque.enqueue_delayed_selection { |a| a.first == 'foo' })
|
542
|
+
assert_equal(3, Resque.count_all_scheduled_jobs)
|
543
|
+
end
|
544
|
+
|
545
|
+
test 'enqueue_delayed_selection enqueues multiple items matching arguments' do
|
546
|
+
t = Time.now + 120
|
547
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
548
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
549
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, 'bar')
|
550
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, 'baz')
|
551
|
+
|
552
|
+
assert_equal(2, Resque.enqueue_delayed_selection { |a| a.first == 'bar' })
|
553
|
+
assert_equal(2, Resque.count_all_scheduled_jobs)
|
554
|
+
end
|
555
|
+
|
556
|
+
test 'enqueue_delayed_selection enqueues multiple items matching ' \
|
557
|
+
'arguments as hash' do
|
558
|
+
t = Time.now + 120
|
559
|
+
Resque.enqueue_at(t, SomeIvarJob, foo: 'foo')
|
560
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, foo: 'bar')
|
561
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, foo: 'bar')
|
562
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, foo: 'baz')
|
563
|
+
|
564
|
+
assert_equal(
|
565
|
+
2, Resque.enqueue_delayed_selection { |a| a.first['foo'] == 'bar' }
|
566
|
+
)
|
567
|
+
assert_equal(2, Resque.count_all_scheduled_jobs)
|
568
|
+
end
|
569
|
+
|
570
|
+
test 'enqueue_delayed_selection ignores jobs with no arguments' do
|
571
|
+
t = Time.now + 120
|
572
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
573
|
+
Resque.enqueue_at(t + 1, SomeIvarJob)
|
574
|
+
Resque.enqueue_at(t + 2, SomeIvarJob)
|
575
|
+
Resque.enqueue_at(t + 3, SomeIvarJob)
|
576
|
+
|
577
|
+
assert_equal(0, Resque.enqueue_delayed_selection { |a| a.first == 'bar' })
|
578
|
+
assert_equal(4, Resque.count_all_scheduled_jobs)
|
579
|
+
end
|
580
|
+
|
581
|
+
test "enqueue_delayed_selection doesn't enqueue items it shouldn't" do
|
582
|
+
t = Time.now + 120
|
583
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
584
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
585
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, 'bar')
|
586
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, 'baz')
|
587
|
+
|
588
|
+
assert_equal(0, Resque.enqueue_delayed_selection { |a| a.first == 'qux' })
|
589
|
+
assert_equal(4, Resque.count_all_scheduled_jobs)
|
590
|
+
end
|
591
|
+
|
592
|
+
test 'enqueue_delayed_selection ignores last_enqueued_at redis key' do
|
593
|
+
t = Time.now + 120
|
594
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
595
|
+
Resque.last_enqueued_at(SomeIvarJob, t)
|
596
|
+
|
597
|
+
assert_equal(0, Resque.enqueue_delayed_selection { |a| a.first == 'bar' })
|
598
|
+
assert_equal(t.to_s, Resque.get_last_enqueued_at(SomeIvarJob))
|
599
|
+
end
|
600
|
+
|
601
|
+
test 'enqueue_delayed_selection enqueues item by class' do
|
602
|
+
t = Time.now + 120
|
603
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
604
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
605
|
+
|
606
|
+
assert_equal(1, Resque.enqueue_delayed_selection(SomeIvarJob) do |a|
|
607
|
+
a.first == 'foo'
|
608
|
+
end)
|
609
|
+
assert_equal(1, Resque.count_all_scheduled_jobs)
|
610
|
+
end
|
611
|
+
|
612
|
+
test 'enqueue_delayed_selection enqueues item by class name as a string' do
|
613
|
+
t = Time.now + 120
|
614
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
615
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
616
|
+
|
617
|
+
assert_equal(1, Resque.enqueue_delayed_selection('SomeIvarJob') do |a|
|
618
|
+
a.first == 'foo'
|
619
|
+
end)
|
620
|
+
assert_equal(1, Resque.count_all_scheduled_jobs)
|
621
|
+
end
|
622
|
+
|
623
|
+
test 'enqueue_delayed_selection enqueues item by class name as a symbol' do
|
624
|
+
t = Time.now + 120
|
625
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
626
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
627
|
+
|
628
|
+
assert_equal(1, Resque.enqueue_delayed_selection(:SomeIvarJob) do |a|
|
629
|
+
a.first == 'foo'
|
630
|
+
end)
|
631
|
+
assert_equal(1, Resque.count_all_scheduled_jobs)
|
632
|
+
end
|
633
|
+
|
634
|
+
test 'enqueue_delayed_selection enqueues items only from' \
|
635
|
+
'matching job class' do
|
636
|
+
t = Time.now + 120
|
637
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
638
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
639
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
640
|
+
Resque.enqueue_at(t + 1, SomeQuickJob, 'bar')
|
641
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'foo')
|
642
|
+
Resque.enqueue_at(t + 2, SomeQuickJob, 'foo')
|
643
|
+
|
644
|
+
assert_equal(2, Resque.enqueue_delayed_selection(SomeIvarJob) do |a|
|
645
|
+
a.first == 'foo'
|
646
|
+
end)
|
647
|
+
assert_equal(4, Resque.count_all_scheduled_jobs)
|
648
|
+
end
|
649
|
+
|
650
|
+
test 'enqueue_delayed_selection enqueues items from matching job class ' \
|
651
|
+
'without params' do
|
652
|
+
t = Time.now + 120
|
653
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
654
|
+
Resque.enqueue_at(t + 1, SomeQuickJob)
|
655
|
+
Resque.enqueue_at(t + 2, SomeIvarJob)
|
656
|
+
Resque.enqueue_at(t + 3, SomeQuickJob)
|
657
|
+
|
658
|
+
assert_equal(2, Resque.enqueue_delayed_selection(SomeQuickJob) { true })
|
659
|
+
assert_equal(2, Resque.count_all_scheduled_jobs)
|
660
|
+
end
|
661
|
+
|
662
|
+
test 'find_delayed_selection finds multiple items matching ' \
|
663
|
+
'arguments at same timestamp' do
|
664
|
+
t = Time.now + 120
|
665
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'llama')
|
666
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
667
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'monkey')
|
668
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'platypus')
|
669
|
+
Resque.enqueue_at(t, SomeIvarJob, 'baz')
|
670
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'llama')
|
671
|
+
Resque.enqueue_at(t, SomeIvarJob, 'bar', 'llama')
|
672
|
+
|
673
|
+
assert_equal(5, (Resque.find_delayed_selection do |a|
|
674
|
+
a.first == 'bar'
|
675
|
+
end).length)
|
676
|
+
end
|
677
|
+
|
678
|
+
test 'find_delayed_selection finds single item matching arguments' do
|
679
|
+
t = Time.now + 120
|
680
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
681
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
682
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, 'bar')
|
683
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, 'baz')
|
684
|
+
|
685
|
+
assert_equal(1, (Resque.find_delayed_selection do |a|
|
686
|
+
a.first == 'foo'
|
687
|
+
end).length)
|
688
|
+
end
|
689
|
+
|
690
|
+
test 'find_delayed_selection finds multiple items matching arguments' do
|
691
|
+
t = Time.now + 120
|
692
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
693
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
694
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, 'bar')
|
695
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, 'baz')
|
696
|
+
|
697
|
+
assert_equal(2, (Resque.find_delayed_selection do |a|
|
698
|
+
a.first == 'bar'
|
699
|
+
end).length)
|
700
|
+
end
|
701
|
+
|
702
|
+
test 'find_delayed_selection finds multiple items matching ' \
|
703
|
+
'arguments as hash' do
|
704
|
+
t = Time.now + 120
|
705
|
+
Resque.enqueue_at(t, SomeIvarJob, foo: 'foo')
|
706
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, foo: 'bar')
|
707
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, foo: 'bar')
|
708
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, foo: 'baz')
|
709
|
+
|
710
|
+
len = Resque.find_delayed_selection { |a| a.first['foo'] == 'bar' }.length
|
711
|
+
assert_equal(2, len)
|
712
|
+
end
|
713
|
+
|
714
|
+
test 'find_delayed_selection ignores jobs with no arguments' do
|
715
|
+
t = Time.now + 120
|
716
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
717
|
+
Resque.enqueue_at(t + 1, SomeIvarJob)
|
718
|
+
Resque.enqueue_at(t + 2, SomeIvarJob)
|
719
|
+
Resque.enqueue_at(t + 3, SomeIvarJob)
|
720
|
+
|
721
|
+
assert_equal(0, (Resque.find_delayed_selection do |a|
|
722
|
+
a.first == 'bar'
|
723
|
+
end).length)
|
724
|
+
end
|
725
|
+
|
726
|
+
test "find_delayed_selection doesn't find items it shouldn't" do
|
727
|
+
t = Time.now + 120
|
728
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
729
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
730
|
+
Resque.enqueue_at(t + 2, SomeIvarJob, 'bar')
|
731
|
+
Resque.enqueue_at(t + 3, SomeIvarJob, 'baz')
|
732
|
+
|
733
|
+
assert_equal(0, (Resque.find_delayed_selection do |a|
|
734
|
+
a.first == 'qux'
|
735
|
+
end).length)
|
736
|
+
end
|
737
|
+
|
738
|
+
test 'find_delayed_selection finds item by class' do
|
739
|
+
t = Time.now + 120
|
740
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
741
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
742
|
+
|
743
|
+
assert_equal(1, (Resque.find_delayed_selection(SomeIvarJob) do |a|
|
744
|
+
a.first == 'foo'
|
745
|
+
end).length)
|
746
|
+
end
|
747
|
+
|
748
|
+
test 'find_delayed_selection finds item by class name as a string' do
|
749
|
+
t = Time.now + 120
|
750
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
751
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
752
|
+
|
753
|
+
assert_equal(1, (Resque.find_delayed_selection('SomeIvarJob') do |a|
|
754
|
+
a.first == 'foo'
|
755
|
+
end).length)
|
756
|
+
end
|
757
|
+
|
758
|
+
test 'find_delayed_selection finds item by class name as a symbol' do
|
759
|
+
t = Time.now + 120
|
760
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
761
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
762
|
+
|
763
|
+
assert_equal(1, (Resque.find_delayed_selection(:SomeIvarJob) do |a|
|
764
|
+
a.first == 'foo'
|
765
|
+
end).length)
|
766
|
+
end
|
767
|
+
|
768
|
+
test 'find_delayed_selection finds items only from' \
|
769
|
+
'matching job class' do
|
770
|
+
t = Time.now + 120
|
771
|
+
Resque.enqueue_at(t, SomeIvarJob, 'foo')
|
772
|
+
Resque.enqueue_at(t, SomeQuickJob, 'foo')
|
773
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'bar')
|
774
|
+
Resque.enqueue_at(t + 1, SomeQuickJob, 'bar')
|
775
|
+
Resque.enqueue_at(t + 1, SomeIvarJob, 'foo')
|
776
|
+
Resque.enqueue_at(t + 2, SomeQuickJob, 'foo')
|
777
|
+
|
778
|
+
assert_equal(2, (Resque.find_delayed_selection(SomeIvarJob) do |a|
|
779
|
+
a.first == 'foo'
|
780
|
+
end).length)
|
781
|
+
end
|
782
|
+
|
783
|
+
test 'find_delayed_selection finds items from matching job class ' \
|
784
|
+
'without params' do
|
785
|
+
t = Time.now + 120
|
786
|
+
Resque.enqueue_at(t, SomeIvarJob)
|
787
|
+
Resque.enqueue_at(t + 1, SomeQuickJob)
|
788
|
+
Resque.enqueue_at(t + 2, SomeIvarJob)
|
789
|
+
Resque.enqueue_at(t + 3, SomeQuickJob)
|
790
|
+
|
791
|
+
assert_equal(
|
792
|
+
2, (Resque.find_delayed_selection(SomeQuickJob) { true }).length
|
793
|
+
)
|
794
|
+
end
|
795
|
+
|
519
796
|
test 'remove_delayed_job_from_timestamp removes instances of jobs ' \
|
520
797
|
'at a given timestamp' do
|
521
798
|
t = Time.now + 120
|
data/test/scheduler_test.rb
CHANGED
@@ -87,9 +87,15 @@ context 'Resque::Scheduler' do
|
|
87
87
|
assert Resque::Scheduler.scheduled_jobs.include?('some_ivar_job')
|
88
88
|
|
89
89
|
Resque.redis.del(:schedules)
|
90
|
-
Resque.redis.hset(
|
91
|
-
|
92
|
-
|
90
|
+
Resque.redis.hset(
|
91
|
+
:schedules,
|
92
|
+
'some_ivar_job2',
|
93
|
+
Resque.encode(
|
94
|
+
'cron' => '* * * * *',
|
95
|
+
'class' => 'SomeIvarJob',
|
96
|
+
'args' => '/tmp/2'
|
97
|
+
)
|
98
|
+
)
|
93
99
|
|
94
100
|
Resque::Scheduler.reload_schedule!
|
95
101
|
|
@@ -366,9 +372,15 @@ context 'Resque::Scheduler' do
|
|
366
372
|
end
|
367
373
|
|
368
374
|
test 'fetch_schedule returns a schedule' do
|
369
|
-
Resque.redis.hset(
|
370
|
-
|
371
|
-
|
375
|
+
Resque.redis.hset(
|
376
|
+
:schedules,
|
377
|
+
'some_ivar_job2',
|
378
|
+
Resque.encode(
|
379
|
+
'cron' => '* * * * *',
|
380
|
+
'class' => 'SomeIvarJob',
|
381
|
+
'args' => '/tmp/33'
|
382
|
+
)
|
383
|
+
)
|
372
384
|
assert_equal(
|
373
385
|
{ 'cron' => '* * * * *', 'class' => 'SomeIvarJob', 'args' => '/tmp/33' },
|
374
386
|
Resque.fetch_schedule('some_ivar_job2')
|
data/test/test_helper.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'simplecov'
|
3
3
|
|
4
4
|
require 'test/unit'
|
5
|
+
require 'minitest'
|
5
6
|
require 'mocha/setup'
|
6
7
|
require 'rack/test'
|
7
8
|
require 'resque'
|
@@ -10,15 +11,6 @@ $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__)) + '/../lib'
|
|
10
11
|
require 'resque-scheduler'
|
11
12
|
require 'resque/scheduler/server'
|
12
13
|
|
13
|
-
unless ENV['RESQUE_SCHEDULER_DISABLE_TEST_REDIS_SERVER']
|
14
|
-
# Start our own Redis when the tests start. RedisInstance will take care of
|
15
|
-
# starting and stopping.
|
16
|
-
require File.expand_path('../support/redis_instance', __FILE__)
|
17
|
-
RedisInstance.run!
|
18
|
-
end
|
19
|
-
|
20
|
-
at_exit { exit MiniTest::Unit.new.run(ARGV) || 0 }
|
21
|
-
|
22
14
|
##
|
23
15
|
# test/spec/mini 3
|
24
16
|
# original work: http://gist.github.com/25455
|
@@ -31,11 +23,14 @@ def context(*args, &block)
|
|
31
23
|
def self.test(name, &block)
|
32
24
|
define_method("test_#{name.gsub(/\W/, '_')}", &block) if block
|
33
25
|
end
|
26
|
+
|
34
27
|
def self.xtest(*_args)
|
35
28
|
end
|
29
|
+
|
36
30
|
def self.setup(&block)
|
37
31
|
define_method(:setup, &block)
|
38
32
|
end
|
33
|
+
|
39
34
|
def self.teardown(&block)
|
40
35
|
define_method(:teardown, &block)
|
41
36
|
end
|
@@ -55,16 +50,16 @@ unless defined?(Rails)
|
|
55
50
|
end
|
56
51
|
|
57
52
|
class FakeCustomJobClass
|
58
|
-
def self.scheduled(
|
53
|
+
def self.scheduled(_, _, *_); end
|
59
54
|
end
|
60
55
|
|
61
56
|
class FakeCustomJobClassEnqueueAt
|
62
57
|
@queue = :test
|
63
|
-
def self.scheduled(
|
58
|
+
def self.scheduled(_, _, *_); end
|
64
59
|
end
|
65
60
|
|
66
61
|
class SomeJob
|
67
|
-
def self.perform(
|
62
|
+
def self.perform(_, _)
|
68
63
|
end
|
69
64
|
end
|
70
65
|
|