tracked_job 0.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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZjVlYzllOGEzM2FiNzNjODljNWMxZTg2YTI5ODFlODQwODA4YjIyNA==
5
+ data.tar.gz: !binary |-
6
+ YTQyMjMzNjJlNTVlY2E0OGU2YzUxYThmMjdhMWVkMTQ4Mjc0YjRmNg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZGY5MjQzNDA0M2RkMDZiN2U5OTAwYmE0ZGEwNjAyZjdhNTA5NDc2ZjI1OGZk
10
+ YmQ5YWQwMDA2M2NmYWZkZGNiMGQwMmVlOGVjOGUyODc2M2I3MGU4M2ZkMjEx
11
+ ODZkYWM1MDcxN2U0ZGMwYWJhNjcwNTk2NGNkNmUyMTIwMWYwYjQ=
12
+ data.tar.gz: !binary |-
13
+ YzQwYzE1OTc0YjhiYzg1MTM1ODRkMWQ1YzkyNjVkNjAzNDFkODkzMjExMzU1
14
+ YzgwM2MwZTg0ZmE1ODU4NWQxMWRkYzZhMjkyZTE5NWNmNzI0ODIzY2MzYjgz
15
+ YmNmYjhlZDRjZGUwNWY0MTUxYzIyNDZkYTM4NDJiOTdlYTE5ZDM=
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Tracked'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
@@ -0,0 +1,4 @@
1
+ module Tracked
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Tracked
2
+ module ApplicationHelper
3
+ end
4
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ TrackedJob::Engine.routes.draw do
2
+ end
@@ -0,0 +1,15 @@
1
+ class CreateTrackedJob < ActiveRecord::Migration
2
+ def change
3
+ create_table :tracked_jobs do |t|
4
+ t.string :uuid, limit: 36, null: false
5
+ t.references :job, null: false
6
+ t.boolean :success
7
+ t.text :result
8
+ t.datetime :started_at
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :tracked_jobs, :uuid, unique: true
13
+ add_index :tracked_jobs, :job_id, unique: true
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ module Tracked
2
+ module DelayedJob
3
+ class Plugin < Delayed::Plugin
4
+ module Perform
5
+ def perform
6
+ @tracked_job.start!
7
+ begin
8
+ result = super
9
+ rescue Exception => exception
10
+ @tracked_job.fail!(exception.message)
11
+ raise
12
+ end
13
+ @tracked_job.succeed!(result)
14
+ return result
15
+ end
16
+ end
17
+
18
+ callbacks do |lifecycle|
19
+ lifecycle.before(:invoke_job) do |job|
20
+ tracked_job = Tracked::Job.find_by(job_id: job.id)
21
+ if tracked_job.present?
22
+ payload = job.payload_object
23
+ payload.instance_variable_set(:@tracked_job, tracked_job)
24
+ payload.extend Perform
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ module Delayed
2
+ class TrackedDelayProxy < Delayed::DelayProxy
3
+ def method_missing(method, *args)
4
+ job = super
5
+ tracked_job = ::Tracked::Job.generate(job.id)
6
+ tracked_job
7
+ end
8
+ end
9
+
10
+ module MessageSending
11
+ def tracked_delay(options = {})
12
+ TrackedDelayProxy.new(PerformableMethod, self, options)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ module Tracked
2
+ class Job < ActiveRecord::Base
3
+ self.table_name = "tracked_jobs"
4
+
5
+ serialize :result
6
+
7
+ def self.generate(job_id)
8
+ uuid = SecureRandom.uuid
9
+ self.create!(job_id: job_id, uuid: uuid)
10
+ end
11
+
12
+ def start!
13
+ self.update_attributes!(started_at: Time.now)
14
+ end
15
+
16
+ def succeed!(result)
17
+ self.update_attributes!(success: true, result: result)
18
+ end
19
+
20
+ def fail!(result)
21
+ self.update_attributes!(success: false, result: result)
22
+ end
23
+
24
+ def status
25
+ return :created if started_at.nil?
26
+ return :started if success.nil?
27
+ return :success if success
28
+ :failed
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ module TrackedJob
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace TrackedJob
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module TrackedJob
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'tracked_job/engine'
2
+ require 'tracked/job'
3
+
4
+ if defined?(Delayed)
5
+ require 'tracked/delayed_job/plugin'
6
+ require 'tracked/delayed_job/tracked_delay_proxy'
7
+ end
8
+
9
+ module TrackedJob
10
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tracked_job
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ludvig Dickman
8
+ - Jenny Olsson
9
+ - Avidity
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2014-02-03 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 4.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: 4.0.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: delayed_job
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '='
34
+ - !ruby/object:Gem::Version
35
+ version: 4.0.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '='
41
+ - !ruby/object:Gem::Version
42
+ version: 4.0.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: delayed_job_active_record
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '='
48
+ - !ruby/object:Gem::Version
49
+ version: 4.0.0
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '='
55
+ - !ruby/object:Gem::Version
56
+ version: 4.0.0
57
+ - !ruby/object:Gem::Dependency
58
+ name: sqlite3
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec-rails
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ description: Adds the ability to track backgrounds jobs. Currently only for delayed_job.
86
+ email:
87
+ - code@avidity.se
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - Rakefile
93
+ - app/controllers/tracked/application_controller.rb
94
+ - app/helpers/tracked/application_helper.rb
95
+ - config/routes.rb
96
+ - db/migrate/20140128084338_create_tracked_job.rb
97
+ - lib/tracked/delayed_job/plugin.rb
98
+ - lib/tracked/delayed_job/tracked_delay_proxy.rb
99
+ - lib/tracked/job.rb
100
+ - lib/tracked_job.rb
101
+ - lib/tracked_job/engine.rb
102
+ - lib/tracked_job/version.rb
103
+ homepage: http://github.com/avidity/tracked_job
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.2.1
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Track background jobs
127
+ test_files: []