techwhizbang-jruby-quartz 0.2 → 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/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == Instructions
4
4
 
5
- Requires the following jars in your application container
5
+ Requires the following jars in your application container and if running with just jruby place these in your $JRUBY_HOME/lib
6
6
 
7
7
  commons-collections-3.2.x.jar
8
8
  commons-logging.jar
@@ -30,13 +30,11 @@ cron expression representing the frequency of the job(s) you want to with it:
30
30
 
31
31
  class IntegrationScheduler < BaseScheduler
32
32
 
33
- private
34
-
35
- def initialize
33
+ def initialize(cron_expression)
36
34
  super
35
+ @cron_expression = cron_expression
37
36
  @base_jobs_group = "IntegrationJobs"
38
37
  @base_triggers_group = "IntegrationTriggers"
39
- @cron_expression = "0 0/1 * * * ?"
40
38
  end
41
39
  end
42
40
 
@@ -57,14 +55,11 @@ Notice the Rails.env /container/, I defined custom environments that only run wh
57
55
  inside a Java container so that the schedule! method doesn't get fired off during
58
56
  testing.
59
57
 
60
- ****If you don't do this the schedule! method is fired off a Quartz thread pool
61
- is spun up.****
62
58
 
63
- if RUBY_PLATFORM =~ /java/ && Rails.env =~ /container/
59
+ if RUBY_PLATFORM =~ /java/
64
60
 
65
- CustomerLoadScheduler.instance.schedule!(Jobs::CustomerLoadJob)
66
- LoggerOneScheduler.instance.schedule!(Jobs::LoggerOneJob)
67
- LoggerTwoScheduler.instance.schedule!(Jobs::LoggerTwoJob)
61
+ LoggerOneScheduler.new("0 0/1 * * * ?").schedule!(Jobs::LoggerOneJob)
62
+ LoggerTwoScheduler.new("0 0/2 * * * ?").schedule!(Jobs::LoggerTwoJob)
68
63
 
69
64
  end
70
65
 
@@ -75,5 +70,5 @@ only with Rails 2.2 or higher because thread safety == 1 runtime
75
70
 
76
71
  === Other
77
72
 
78
- Problems, comments, and suggestions all welcome. nick@controlaltcreate.com or visit my blog
79
- http://techwhizbang.com
73
+ Problems, comments, and suggestions all welcome. techwhizbang@gmail.com or visit my blog
74
+ http://techwhizbang.com
@@ -1,5 +1,3 @@
1
- require 'singleton'
2
-
3
1
  import org.quartz.SchedulerFactory
4
2
  import org.quartz.SchedulerException
5
3
  import org.quartz.Scheduler
@@ -9,11 +7,19 @@ import org.quartz.SimpleTrigger
9
7
  import org.quartz.impl.StdSchedulerFactory
10
8
 
11
9
  class BaseScheduler
12
- include Singleton
13
10
  attr_reader :scheduler_factory
14
11
 
15
12
  attr_accessor :base_jobs_group, :base_triggers_group
16
13
  attr_accessor :job_name, :trigger_name, :cron_expression
14
+
15
+ def initialize(cron_expression)
16
+ @scheduler_factory = initialize_scheduler_factory
17
+ @base_jobs_group = "BaseJobsGroup"
18
+ @base_triggers_group = "BaseTriggersGroup"
19
+ @job_name = "BaseJob"
20
+ @trigger_name = "BaseTrigger"
21
+ @cron_expression = cron_expression
22
+ end
17
23
 
18
24
  def fire!(job_class, options={})
19
25
  raise "Not implemented yet"
@@ -21,7 +27,7 @@ class BaseScheduler
21
27
 
22
28
  def schedule!(job_class, options={})
23
29
  begin
24
- scheduler = self.scheduler_factory.get_scheduler
30
+ scheduler = scheduler_factory.get_scheduler
25
31
  scheduler.set_job_factory(job_factory.new)
26
32
  detail = job_detail.new(self.job_name,
27
33
  self.base_jobs_group,
@@ -62,18 +68,6 @@ class BaseScheduler
62
68
  CronTrigger
63
69
  end
64
70
 
65
- private
66
-
67
- def initialize
68
- super
69
- @scheduler_factory = initialize_scheduler_factory
70
- @base_jobs_group = "BaseJobsGroup"
71
- @base_triggers_group = "BaseTriggersGroup"
72
- @job_name = "BaseJob"
73
- @trigger_name = "BaseTrigger"
74
- @cron_expression = "0 0/1 * * * ?"
75
- end
76
-
77
71
  class SchedulerError < StandardError; end
78
72
 
79
73
  end
@@ -4,5 +4,5 @@ require File.expand_path(File.dirname(__FILE__) + '/jobs/base_job_detail')
4
4
  require File.expand_path(File.dirname(__FILE__) + '/jobs/base_job_factory')
5
5
 
6
6
  module JrubyQuartz
7
- VERSION = '0.2'
7
+ VERSION = '1.0'
8
8
  end
@@ -2,13 +2,13 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
2
 
3
3
  class IntegrationScheduler < BaseScheduler
4
4
 
5
- private
6
-
7
- def initialize
5
+ def initialize(cron_expression)
8
6
  super
7
+ @job_name = "IntegrationJob"
8
+ @trigger_name = "IntegrationTrigger"
9
9
  @base_jobs_group = "IntegrationJobs"
10
10
  @base_triggers_group = "IntegrationTriggers"
11
- @cron_expression = "0 0/1 * * * ?"
11
+ @cron_expression = cron_expression
12
12
  end
13
13
  end
14
14
 
@@ -23,6 +23,8 @@ end
23
23
  class JrubyQuartzIntegrationTest < Test::Unit::TestCase
24
24
 
25
25
  def test_scheduler_implementation
26
+ integration_scheduler = IntegrationScheduler.new "0 0/1 * * * ?"
27
+
26
28
  #must stub the scheduler and scheduler factory to avoid invokation of real Quartz thread pool, etc.
27
29
  scheduler = mock('scheduler')
28
30
  scheduler_factory = mock('scheduler factory', :get_scheduler => scheduler)
@@ -30,7 +32,7 @@ class JrubyQuartzIntegrationTest < Test::Unit::TestCase
30
32
  scheduler.expects(:schedule_job)
31
33
  scheduler.expects(:set_job_factory)
32
34
 
33
- IntegrationScheduler.instance.expects(:scheduler_factory).returns(scheduler_factory)
34
- IntegrationScheduler.instance.schedule!(IntegrationJob)
35
+ integration_scheduler.expects(:scheduler_factory).returns(scheduler_factory)
36
+ integration_scheduler.schedule!(IntegrationJob)
35
37
  end
36
38
  end
@@ -2,42 +2,49 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
2
 
3
3
  class BaseSchedulerTest < Test::Unit::TestCase
4
4
 
5
- def test_singleton_initialization
6
- assert_raise(NoMethodError) { BaseScheduler.new }
7
- assert_not_nil(BaseScheduler.instance)
8
- end
5
+ # def test_singleton_initialization
6
+ # assert_raise(NoMethodError) { BaseScheduler.new }
7
+ # assert_not_nil(BaseScheduler.instance)
8
+ # end
9
9
 
10
10
  def test_scheduler_instance_variables
11
- assert_equal BaseScheduler.instance.base_jobs_group, "BaseJobsGroup"
12
- assert_equal BaseScheduler.instance.job_name, "BaseJob"
13
- assert_equal BaseScheduler.instance.base_triggers_group, "BaseTriggersGroup"
14
- assert_equal BaseScheduler.instance.trigger_name, "BaseTrigger"
15
- assert_equal BaseScheduler.instance.cron_expression, "0 0/1 * * * ?"
11
+ scheduler = BaseScheduler.new "0 0/1 * * * ?"
12
+ assert_equal scheduler.base_jobs_group, "BaseJobsGroup"
13
+ assert_equal scheduler.job_name, "BaseJob"
14
+ assert_equal scheduler.base_triggers_group, "BaseTriggersGroup"
15
+ assert_equal scheduler.trigger_name, "BaseTrigger"
16
+ assert_equal scheduler.cron_expression, "0 0/1 * * * ?"
16
17
  end
17
18
 
18
19
  def test_trigger_class
19
- assert_kind_of(org.quartz.SimpleTrigger, BaseScheduler.instance.send(:trigger).new)
20
+ scheduler = BaseScheduler.new stub
21
+ assert_kind_of(org.quartz.SimpleTrigger, scheduler.send(:trigger).new)
20
22
  end
21
23
 
22
24
  def test_job_factory_class
23
- assert_kind_of(Jobs::BaseJobFactory, BaseScheduler.instance.send(:job_factory).new)
25
+ scheduler = BaseScheduler.new stub
26
+ assert_kind_of(Jobs::BaseJobFactory, scheduler.send(:job_factory).new)
24
27
  end
25
28
 
26
29
  def test_job_detail_class
27
- assert_kind_of(Jobs::BaseJobDetail, BaseScheduler.instance.send(:job_detail).new("JobName",
30
+ scheduler = BaseScheduler.new stub
31
+ assert_kind_of(Jobs::BaseJobDetail, scheduler.send(:job_detail).new("JobName",
28
32
  'JobGroup',
29
33
  'JobClass'))
30
34
  end
31
35
 
32
36
  def test_scheduler_factory_class
33
- assert_kind_of(StdSchedulerFactory, BaseScheduler.instance.send(:initialize_scheduler_factory))
37
+ scheduler = BaseScheduler.new stub
38
+ assert_kind_of(StdSchedulerFactory, scheduler.send(:initialize_scheduler_factory))
34
39
  end
35
40
 
36
41
  def test_cron_trigger_class
37
- assert_kind_of(CronTrigger, BaseScheduler.instance.send(:cron_trigger).new)
42
+ scheduler = BaseScheduler.new stub
43
+ assert_kind_of(CronTrigger, scheduler.send(:cron_trigger).new)
38
44
  end
39
45
 
40
46
  def test_schedule_method
47
+ base_scheduler = BaseScheduler.new stub
41
48
  base_job = mock("base job")
42
49
  scheduler = mock('scheduler')
43
50
  job_factory = mock('job factory')
@@ -45,6 +52,8 @@ class BaseSchedulerTest < Test::Unit::TestCase
45
52
  cron_trigger = mock('cron trigger')
46
53
  scheduler_factory = mock('scheduler factory', :get_scheduler => scheduler)
47
54
 
55
+ base_scheduler.expects(:scheduler_factory).returns(scheduler_factory)
56
+
48
57
  job_factory.expects(:new).returns(job_factory)
49
58
  base_job.expects(:new).returns(base_job)
50
59
  job_detail.expects(:new).returns(job_detail)
@@ -52,11 +61,10 @@ class BaseSchedulerTest < Test::Unit::TestCase
52
61
 
53
62
  scheduler.expects(:set_job_factory).with(job_factory)
54
63
  scheduler.expects(:schedule_job).with(job_detail, cron_trigger)
55
- BaseScheduler.instance.expects(:scheduler_factory).returns(scheduler_factory)
56
64
 
57
- BaseScheduler.instance.stubs(:job_detail).returns(job_detail)
58
- BaseScheduler.instance.stubs(:job_factory).returns(job_factory)
59
- BaseScheduler.instance.stubs(:cron_trigger).returns(cron_trigger)
60
- BaseScheduler.instance.schedule!(base_job)
65
+ base_scheduler.stubs(:job_detail).returns(job_detail)
66
+ base_scheduler.stubs(:job_factory).returns(job_factory)
67
+ base_scheduler.stubs(:cron_trigger).returns(cron_trigger)
68
+ base_scheduler.schedule!(base_job)
61
69
  end
62
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: techwhizbang-jruby-quartz
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ version: "1.0"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Zalabak
@@ -39,6 +39,7 @@ files:
39
39
  - Rakefile
40
40
  has_rdoc: true
41
41
  homepage: http://techwhizbang.com
42
+ licenses:
42
43
  post_install_message:
43
44
  rdoc_options:
44
45
  - --title
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  requirements: []
64
65
 
65
66
  rubyforge_project:
66
- rubygems_version: 1.2.0
67
+ rubygems_version: 1.3.5
67
68
  signing_key:
68
69
  specification_version: 2
69
70
  summary: A JRuby implementation of the Quartz scheduling framework that makes it easy to integrate into Ruby and Rails based projects.