navvy 0.0.0 → 0.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/spec/log_spec.rb ADDED
@@ -0,0 +1,71 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ class LoggerNotFound < StandardError; end
4
+
5
+ describe Navvy::Log do
6
+ describe '.info' do
7
+ describe 'when using the rails default logger' do
8
+ before do
9
+ Navvy::Log.logger = :rails
10
+ end
11
+
12
+ it 'should raise an error when the logger can not be found' do
13
+ lambda { Navvy::Log.info('123') }.should raise_error
14
+ end
15
+
16
+ it 'should pass the log to RAILS_DEFAULT_LOGGER' do
17
+ class RailsLogger
18
+ def self.info(text);end
19
+ end
20
+
21
+ RAILS_DEFAULT_LOGGER = RailsLogger
22
+
23
+ RAILS_DEFAULT_LOGGER.should_receive(:info).with('123')
24
+ Navvy::Log.info('123')
25
+ end
26
+ end
27
+
28
+ describe 'when using justlogging' do
29
+ before do
30
+ Navvy::Log.logger = :justlogging
31
+ end
32
+
33
+ it 'should raise an error when the logger can not be found' do
34
+ lambda { Navvy::Log.info('123') }.should raise_error
35
+ end
36
+
37
+ it 'should pass the log to justlogging' do
38
+ class Justlogging
39
+ def self.log(text);end
40
+ end
41
+
42
+ Justlogging.should_receive(:log).with('123')
43
+ Navvy::Log.info('123')
44
+ end
45
+ end
46
+
47
+ describe 'when using both the rails default logger and justlogging' do
48
+ before do
49
+ Navvy::Log.logger = [:rails, :justlogging]
50
+ end
51
+
52
+ it 'should pass the log to justlogging' do
53
+ RAILS_DEFAULT_LOGGER.should_receive(:info).with('123')
54
+ Justlogging.should_receive(:log).with('123')
55
+ Navvy::Log.info('123')
56
+ end
57
+ end
58
+
59
+ describe 'when not using any logger' do
60
+ before do
61
+ Navvy::Log.logger = nil
62
+ end
63
+
64
+ it 'should not log' do
65
+ RAILS_DEFAULT_LOGGER.should_not_receive(:info)
66
+ Justlogging.should_not_receive(:log)
67
+ Navvy::Log.info('123')
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/active_record')
2
+ require 'rubygems'
3
+ require 'yaml'
4
+
5
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => '/tmp/navvy_test.sqlite')
6
+
7
+ ActiveRecord::Schema.define do
8
+ create_table :jobs, :force => true do |table|
9
+ table.string :object
10
+ table.string :method_name
11
+ table.text :arguments
12
+ table.string :return
13
+ table.string :exception
14
+ table.datetime :created_at
15
+ table.datetime :run_at
16
+ table.datetime :started_at
17
+ table.datetime :completed_at
18
+ table.datetime :failed_at
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'sequel'
3
+ require 'yaml'
4
+
5
+ Sequel.sqlite('/tmp/navvy_test_s.sqlite')
6
+
7
+ Sequel::DATABASES[0].create_table!(:jobs) do
8
+ primary_key :id, :type=>Integer
9
+ String :object
10
+ String :method_name
11
+ String :arguments, :text => true
12
+ String :return
13
+ String :exception
14
+ DateTime :created_at
15
+ DateTime :run_at
16
+ DateTime :started_at
17
+ DateTime :completed_at
18
+ DateTime :failed_at
19
+ end
20
+
21
+ require File.expand_path(File.dirname(__FILE__) + '/../../lib/navvy/job/sequel')
data/spec/spec_helper.rb CHANGED
@@ -16,3 +16,5 @@ class Cow
16
16
  raise 'this method is broken'
17
17
  end
18
18
  end
19
+
20
+ Navvy::Log.quiet = true
data/spec/worker_spec.rb CHANGED
@@ -8,15 +8,15 @@ describe Navvy::Worker do
8
8
  Navvy::Job.enqueue(Cow, :speak),
9
9
  Navvy::Job.enqueue(Cow, :speak)
10
10
  ]
11
-
11
+
12
12
  Navvy::Job.stub!(:next).and_return(@jobs)
13
- end
14
-
13
+ end
14
+
15
15
  it 'should fetch jobs' do
16
16
  Navvy::Job.should_receive(:next).and_return(@jobs)
17
17
  Navvy::Worker.fetch_and_run_jobs
18
18
  end
19
-
19
+
20
20
  it 'should run three jobs' do
21
21
  @jobs.each do |job|
22
22
  job.should_receive(:run)
@@ -24,4 +24,4 @@ describe Navvy::Worker do
24
24
  Navvy::Worker.fetch_and_run_jobs
25
25
  end
26
26
  end
27
- end
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navvy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Kreeftmeijer
@@ -9,19 +9,9 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-11 00:00:00 +01:00
12
+ date: 2010-01-21 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: mongo_mapper
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 0.6.10
24
- version:
25
15
  - !ruby/object:Gem::Dependency
26
16
  name: rspec
27
17
  type: :development
@@ -62,6 +52,16 @@ dependencies:
62
52
  - !ruby/object:Gem::Version
63
53
  version: 1.0.6
64
54
  version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: mongo_mapper
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.6.10
64
+ version:
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: machinist_mongomapper
67
67
  type: :development
@@ -72,6 +72,16 @@ dependencies:
72
72
  - !ruby/object:Gem::Version
73
73
  version: 0.9.7
74
74
  version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: sequel
77
+ type: :development
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 3.8.0
84
+ version:
75
85
  description: Simple background job processor inspired by delayed_job, but aiming for database agnosticism.
76
86
  email: jeff@kreeftmeijer.nl
77
87
  executables: []
@@ -88,14 +98,24 @@ files:
88
98
  - README.textile
89
99
  - Rakefile
90
100
  - VERSION
91
- - lib/job/mongo_mapper.rb
101
+ - generators/navvy/navvy_generator.rb
102
+ - generators/navvy/templates/migration.rb
103
+ - lib/generators/navvy_generator.rb
92
104
  - lib/navvy.rb
93
- - lib/navvy/job.rb
105
+ - lib/navvy/job/active_record.rb
94
106
  - lib/navvy/job/mongo_mapper.rb
107
+ - lib/navvy/job/sequel.rb
108
+ - lib/navvy/log.rb
109
+ - lib/navvy/tasks.rb
95
110
  - lib/navvy/worker.rb
96
111
  - navvy.gemspec
112
+ - spec/job/active_record_spec.rb
97
113
  - spec/job/mongo_mapper_spec.rb
114
+ - spec/job/sequel_spec.rb
115
+ - spec/log_spec.rb
116
+ - spec/setup/active_record.rb
98
117
  - spec/setup/mongo_mapper.rb
118
+ - spec/setup/sequel.rb
99
119
  - spec/spec_helper.rb
100
120
  - spec/worker_spec.rb
101
121
  has_rdoc: true
@@ -127,7 +147,12 @@ signing_key:
127
147
  specification_version: 3
128
148
  summary: Simple background job processor inspired by delayed_job, but aiming for database agnosticism.
129
149
  test_files:
150
+ - spec/job/active_record_spec.rb
130
151
  - spec/job/mongo_mapper_spec.rb
152
+ - spec/job/sequel_spec.rb
153
+ - spec/log_spec.rb
154
+ - spec/setup/active_record.rb
131
155
  - spec/setup/mongo_mapper.rb
156
+ - spec/setup/sequel.rb
132
157
  - spec/spec_helper.rb
133
158
  - spec/worker_spec.rb
@@ -1,74 +0,0 @@
1
- require 'rubygems'
2
- require 'mongo_mapper'
3
-
4
- module Navvy
5
- class Job
6
- include MongoMapper::Document
7
-
8
- key :object, String
9
- key :method, Symbol
10
- key :arguments, Array
11
- key :exception, String
12
- key :run_at, Time
13
- key :failed_at, Time
14
-
15
- ##
16
- # Add a job to the job queue.
17
- #
18
- # @param [Object] object the object you want to run a method from
19
- # @param [Symbol, String] method the name of the method you want to run
20
- # @param [*] arguments optional arguments you want to pass to the method
21
- #
22
- # @return [true, false]
23
-
24
- def self.enqueue(object, method, *args)
25
- create(
26
- :object => object.name,
27
- :method => method.to_sym,
28
- :run_at => Time.now,
29
- :arguments => args
30
- )
31
- end
32
-
33
- ##
34
- # Find the next available job in the queue. This will not include failed
35
- # jobs (where :failed_at is not nil) and jobs that should run in the future
36
- # (where :run_at is greater than the current time).
37
- #
38
- #
39
- # @return [Navvy::Job, nil] the next available job or nil if no jobs
40
- # were found
41
-
42
- def self.next
43
- first(
44
- :failed_at => nil,
45
- :run_at => {'$lte', Time.now}
46
- )
47
- end
48
-
49
- ##
50
- # Run the job. Will delete the Navvy::Job record and return its return
51
- # value if it runs successfully. If a job fails, it'll update the
52
- # Navvy::Job record to include the exception message it sent back and set
53
- # the :failed_at date. Failed jobs don't get deleted.
54
- #
55
- # @example
56
- # job = Navvy::Job.next # finds the next available job in the queue
57
- # job.run # runs the job and returns the job's return value
58
- #
59
- # @return [String] return value of the called method
60
-
61
- def run
62
- begin
63
- result = object.constantize.send(method)
64
- destroy
65
- result
66
- rescue Exception => exception
67
- update_attributes({
68
- :exception => exception.message,
69
- :failed_at => Time.now
70
- })
71
- end
72
- end
73
- end
74
- end
data/lib/navvy/job.rb DELETED
@@ -1,16 +0,0 @@
1
- module Navvy
2
- class Job
3
- class << self
4
- attr_accessor :limit
5
- end
6
-
7
- ##
8
- # Default limit of jobs to be fetched
9
- #
10
- # @return [Integer] limit
11
-
12
- def self.limit
13
- 10
14
- end
15
- end
16
- end