techwhizbang-jruby-quartz 0.1 → 0.2

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.
@@ -0,0 +1,80 @@
1
+ require 'singleton'
2
+
3
+ import org.quartz.SchedulerFactory
4
+ import org.quartz.SchedulerException
5
+ import org.quartz.Scheduler
6
+ import org.quartz.JobDetail
7
+ import org.quartz.CronTrigger
8
+ import org.quartz.SimpleTrigger
9
+ import org.quartz.impl.StdSchedulerFactory
10
+
11
+ class BaseScheduler
12
+ include Singleton
13
+ attr_reader :scheduler_factory
14
+
15
+ attr_accessor :base_jobs_group, :base_triggers_group
16
+ attr_accessor :job_name, :trigger_name, :cron_expression
17
+
18
+ def fire!(job_class, options={})
19
+ raise "Not implemented yet"
20
+ end
21
+
22
+ def schedule!(job_class, options={})
23
+ begin
24
+ scheduler = self.scheduler_factory.get_scheduler
25
+ scheduler.set_job_factory(job_factory.new)
26
+ detail = job_detail.new(self.job_name,
27
+ self.base_jobs_group,
28
+ job_class.new())
29
+
30
+ customer_load_trigger = cron_trigger.new(self.trigger_name,
31
+ self.base_triggers_group,
32
+ self.job_name,
33
+ self.base_jobs_group,
34
+ self.cron_expression)
35
+
36
+ scheduler.schedule_job(detail, customer_load_trigger)
37
+
38
+ rescue Exception => e
39
+ raise SchedulerError.new(e)
40
+ end
41
+ end
42
+
43
+ protected
44
+
45
+ def trigger
46
+ SimpleTrigger
47
+ end
48
+
49
+ def initialize_scheduler_factory(options={})
50
+ StdSchedulerFactory.new
51
+ end
52
+
53
+ def job_factory
54
+ Jobs::BaseJobFactory
55
+ end
56
+
57
+ def job_detail
58
+ Jobs::BaseJobDetail
59
+ end
60
+
61
+ def cron_trigger
62
+ CronTrigger
63
+ end
64
+
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
+ class SchedulerError < StandardError; end
78
+
79
+ end
80
+
@@ -0,0 +1,30 @@
1
+ import org.quartz.Job
2
+ import org.quartz.JobExecutionContext
3
+ import org.quartz.JobExecutionException
4
+
5
+ module Jobs
6
+ class BaseJob
7
+ include org.quartz.Job
8
+ implement org.quartz.Job
9
+
10
+ def initialize(); end
11
+
12
+ def execute(context)
13
+ begin
14
+ perform_job
15
+ rescue Exception => e
16
+ raise JobError.new(e)
17
+ end
18
+ end
19
+
20
+ def perform_job
21
+ raise "Subclass must implement the perform job method"
22
+ end
23
+
24
+ end
25
+
26
+ class JobError < StandardError ; end
27
+ end
28
+
29
+
30
+
@@ -0,0 +1,27 @@
1
+ import org.quartz.JobDetail
2
+ import org.quartz.SchedulerException
3
+
4
+ module Jobs
5
+ class BaseJobDetail < org.quartz.JobDetail
6
+
7
+ attr_accessor :job
8
+
9
+ def initialize(name, group, job)
10
+ super()
11
+ set_name name
12
+ set_group group
13
+ @job = job
14
+ end
15
+
16
+ def validate
17
+ raise org.quartz.SchedulerException.new("Job's name cannot be null",
18
+ org.quartz.SchedulerException.ERR_CLIENT_ERROR) if get_name == nil
19
+ raise org.quartz.SchedulerException.new("Job's group cannot be null",
20
+ org.quartz.SchedulerException.ERR_CLIENT_ERROR) if get_group == nil
21
+ end
22
+
23
+ end
24
+ end
25
+
26
+
27
+
@@ -0,0 +1,15 @@
1
+ import org.quartz.spi.JobFactory
2
+ import org.quartz.spi.TriggerFiredBundle
3
+ import org.quartz.JobDetail
4
+
5
+ module Jobs
6
+ class BaseJobFactory
7
+ include org.quartz.spi.JobFactory
8
+
9
+ def new_job bundle
10
+ bundle.get_job_detail.job
11
+ end
12
+ end
13
+ end
14
+
15
+
@@ -0,0 +1,8 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/base_scheduler')
2
+ require File.expand_path(File.dirname(__FILE__) + '/jobs/base_job')
3
+ require File.expand_path(File.dirname(__FILE__) + '/jobs/base_job_detail')
4
+ require File.expand_path(File.dirname(__FILE__) + '/jobs/base_job_factory')
5
+
6
+ module JrubyQuartz
7
+ VERSION = '0.2'
8
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class IntegrationScheduler < BaseScheduler
4
+
5
+ private
6
+
7
+ def initialize
8
+ super
9
+ @base_jobs_group = "IntegrationJobs"
10
+ @base_triggers_group = "IntegrationTriggers"
11
+ @cron_expression = "0 0/1 * * * ?"
12
+ end
13
+ end
14
+
15
+ class IntegrationJob < Jobs::BaseJob
16
+
17
+ def perform_job
18
+ worker_one = mock('worker class one', :whatever => "123")
19
+ worker_two = mock('worker class two', :whatever => '123')
20
+ end
21
+ end
22
+
23
+ class JrubyQuartzIntegrationTest < Test::Unit::TestCase
24
+
25
+ def test_scheduler_implementation
26
+ #must stub the scheduler and scheduler factory to avoid invokation of real Quartz thread pool, etc.
27
+ scheduler = mock('scheduler')
28
+ scheduler_factory = mock('scheduler factory', :get_scheduler => scheduler)
29
+
30
+ scheduler.expects(:schedule_job)
31
+ scheduler.expects(:set_job_factory)
32
+
33
+ IntegrationScheduler.instance.expects(:scheduler_factory).returns(scheduler_factory)
34
+ IntegrationScheduler.instance.schedule!(IntegrationJob)
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'mocha'
4
+
5
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/jruby-quartz")
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class BaseJobDetailTest < Test::Unit::TestCase
4
+
5
+ def test_initialization
6
+ assert_instance_of(Jobs::BaseJobDetail, Jobs::BaseJobDetail.new("Name", "Group", "Job"))
7
+ end
8
+
9
+ def test_initialization_with_failed_validation
10
+ assert_raise(NativeException) { Jobs::BaseJobDetail.new(nil, nil, nil) }
11
+ end
12
+
13
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class BaseJobFactoryTest < Test::Unit::TestCase
4
+
5
+ def test_new_job
6
+ job = mock('job')
7
+ job_detail = mock('job detail', :job => job)
8
+ bundle = mock('bundle', :get_job_detail => job_detail)
9
+ Jobs::BaseJobFactory.new.new_job(bundle)
10
+ end
11
+
12
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class BaseJobTest < Test::Unit::TestCase
4
+
5
+ def test_initialize
6
+ assert_instance_of(Jobs::BaseJob, Jobs::BaseJob.new)
7
+ end
8
+
9
+ def test_quartz_job_implement
10
+ assert_kind_of(org.quartz.Job, Jobs::BaseJob.new)
11
+ end
12
+
13
+ def test_execute
14
+ context = mock('context')
15
+ job = Jobs::BaseJob.new
16
+ job.expects(:perform_job)
17
+ job.execute(context)
18
+ end
19
+
20
+ end
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class BaseSchedulerTest < Test::Unit::TestCase
4
+
5
+ def test_singleton_initialization
6
+ assert_raise(NoMethodError) { BaseScheduler.new }
7
+ assert_not_nil(BaseScheduler.instance)
8
+ end
9
+
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 * * * ?"
16
+ end
17
+
18
+ def test_trigger_class
19
+ assert_kind_of(org.quartz.SimpleTrigger, BaseScheduler.instance.send(:trigger).new)
20
+ end
21
+
22
+ def test_job_factory_class
23
+ assert_kind_of(Jobs::BaseJobFactory, BaseScheduler.instance.send(:job_factory).new)
24
+ end
25
+
26
+ def test_job_detail_class
27
+ assert_kind_of(Jobs::BaseJobDetail, BaseScheduler.instance.send(:job_detail).new("JobName",
28
+ 'JobGroup',
29
+ 'JobClass'))
30
+ end
31
+
32
+ def test_scheduler_factory_class
33
+ assert_kind_of(StdSchedulerFactory, BaseScheduler.instance.send(:initialize_scheduler_factory))
34
+ end
35
+
36
+ def test_cron_trigger_class
37
+ assert_kind_of(CronTrigger, BaseScheduler.instance.send(:cron_trigger).new)
38
+ end
39
+
40
+ def test_schedule_method
41
+ base_job = mock("base job")
42
+ scheduler = mock('scheduler')
43
+ job_factory = mock('job factory')
44
+ job_detail = mock('job detail')
45
+ cron_trigger = mock('cron trigger')
46
+ scheduler_factory = mock('scheduler factory', :get_scheduler => scheduler)
47
+
48
+ job_factory.expects(:new).returns(job_factory)
49
+ base_job.expects(:new).returns(base_job)
50
+ job_detail.expects(:new).returns(job_detail)
51
+ cron_trigger.expects(:new).returns(cron_trigger)
52
+
53
+ scheduler.expects(:set_job_factory).with(job_factory)
54
+ scheduler.expects(:schedule_job).with(job_detail, cron_trigger)
55
+ BaseScheduler.instance.expects(:scheduler_factory).returns(scheduler_factory)
56
+
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)
61
+ end
62
+ 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.1"
4
+ version: "0.2"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Zalabak
@@ -9,12 +9,12 @@ autorequire: jruby-quartz
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-05 00:00:00 -08:00
12
+ date: 2009-05-16 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description: Jruby-Quartz is a wrapper library for the Java based Quartz scheduling framework.
17
- email: nick@controlaltcreate.com
17
+ email: techwhizbang@gmail.com
18
18
  executables: []
19
19
 
20
20
  extensions: []
@@ -22,7 +22,18 @@ extensions: []
22
22
  extra_rdoc_files:
23
23
  - README
24
24
  files:
25
- - "{lib,test}/**/*.rb"
25
+ - lib/base_scheduler.rb
26
+ - lib/jruby-quartz.rb
27
+ - lib/jobs/base_job.rb
28
+ - lib/jobs/base_job_detail.rb
29
+ - lib/jobs/base_job_factory.rb
30
+ - test/integration/jruby_quartz_integration_test.rb
31
+ - test/unit/base_job_detail_test.rb
32
+ - test/unit/base_job_factory_test.rb
33
+ - test/unit/base_job_test.rb
34
+ - test/unit/base_scheduler_test.rb
35
+ - test/all_tests.rb
36
+ - test/test_helper.rb
26
37
  - LICENSE
27
38
  - README
28
39
  - Rakefile
@@ -56,5 +67,5 @@ rubygems_version: 1.2.0
56
67
  signing_key:
57
68
  specification_version: 2
58
69
  summary: A JRuby implementation of the Quartz scheduling framework that makes it easy to integrate into Ruby and Rails based projects.
59
- test_files:
60
- - test/all_tests.rb
70
+ test_files: []
71
+