arask 1.1.3 → 1.2.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bbc371d18529aa76cdb47358c395712a623f95c6
4
- data.tar.gz: c48f5ddda64e71cafac940cb3ce4af81691ae2ba
2
+ SHA256:
3
+ metadata.gz: 124439fc5b51273732a02efb953350c77953bfd4c2fe120460d6bb74b8762f02
4
+ data.tar.gz: a6c54e857d937e5d4e87a38b50c2c75a8beeb1d3e708e903047b15de2e6a74af
5
5
  SHA512:
6
- metadata.gz: 2061665d541fc6bc7758b0a595161b18820f267ea90e3bb56edead27f7bc666fe78d765405c2f86e69d11d744052a918a11a98bdfd76463a745a3f81c34a68d5
7
- data.tar.gz: 1338c50d342cd77ff4d26bc273f518c276e1174369fcc5db0a27938573302dfd148dafd6243dcdb7126027f29682dd1c50902aab20122c603cbba5183d58b87f
6
+ metadata.gz: f9b78ff561bb8e9dfcc1850f70f52550e045b6fee4a3fba4e2e687e9bce3d83f6e8032cd222dc07c45da5580fdad5f7a82065e8ce971628c8bea75003327c19f
7
+ data.tar.gz: 1a075fc84d7cf53155725221774277822da02adfe06e418443fd6d825bdae0eb440bf41ee17c11504ab1325291b6c5bc7422d8ef5210e37cd3f4af2ff25c8435
data/README.md CHANGED
@@ -49,6 +49,11 @@ arask.create script: 'Attachment.process_new', interval: 5.hours, run_first_time
49
49
 
50
50
  # On exceptions, send email with details
51
51
  arask.on_exception email: 'errors@example.com'
52
+
53
+ # Run code on exceptions
54
+ arask.on_exception do |exception, arask_job|
55
+ MyExceptionHandler.new(exception)
56
+ end
52
57
  ```
53
58
 
54
59
  ### About cron
@@ -61,15 +66,19 @@ The interval starts when the task has started running. If a task with the interv
61
66
 
62
67
  ## Todos
63
68
  * Have a "try again" feature. For instance `arask.create script: 'raise "I failed"', interval: :daily, fail_retry: 5.minutes, retry_at_most: 2`
64
- * Be able to run a block when an exception occurs. `arask.on_exception do <code> end`
65
69
  * Be able to specify line and number that failed for an exception:
66
70
  ```ruby
67
- file,line,_ = caller.first.split(' ')[0].split(':')
71
+ file,line,_ = caller.first.split(':')
68
72
  fileline = File.readlines(file)[line.to_i - 1].strip
69
73
  ```
70
74
 
71
- ## Setup for Heroku
72
- None. But if you use a hobby dyno and it falls to sleep, so will Arask. As soon as the dyno wakes up, Arask will run any pending jobs.
75
+ ## Special environments
76
+
77
+ ### Heroku
78
+ Nothing special to setup. But if you use a hobby dyno and it falls to sleep, so will Arask. As soon as the dyno wakes up, Arask will run any pending jobs.
79
+
80
+ ### Docker
81
+ Nothing special to setup.
73
82
 
74
83
  ## Caveats
75
84
  If you reload a database dump, your jobs could be run again.
data/lib/arask.rb CHANGED
@@ -5,26 +5,32 @@ require "arask/setup"
5
5
  require 'fugit' # To parse cron
6
6
 
7
7
  module Arask
8
- class << self; attr_accessor :jobs_touched, :exception_email, :exception_email_from; end
8
+ class << self; attr_accessor :jobs_touched, :exception_email, :exception_email_from, :exception_block, :jobs_block; end
9
9
 
10
- def self.setup
11
- # Make sure we only run setup if Rails is actually run as a server or testing.
12
- return unless defined?(Rails::Server) or Rails.env.test?
13
- ActiveSupport.on_load :after_initialize, yield: true do
14
- Arask.jobs_touched = []
15
- yield Setup
16
- begin
17
- AraskJob.all.where.not(id: Arask.jobs_touched).delete_all
18
- Arask.queue_self
19
- rescue
20
- end
10
+ def self.setup(force_run = false, &block)
11
+ Arask.jobs_block = block
12
+ # Make sure we only run setup now if we are testing.
13
+ # Else we would run them at every cli execution.
14
+ # railtie.rb inits the jobs when the server is ready
15
+ Arask.init_jobs if force_run
16
+ end
17
+
18
+ def self.init_jobs
19
+ Arask.jobs_touched = []
20
+ Arask.jobs_block.call(Setup)
21
+ Arask.jobs_block = nil
22
+ begin
23
+ AraskJob.all.where.not(id: Arask.jobs_touched).delete_all
24
+ Arask.jobs_touched = nil
25
+ Arask.queue_self
26
+ rescue
21
27
  end
22
28
  end
23
29
 
24
30
  def self.queue_self
25
31
  begin
26
32
  next_job_run = AraskJob.order(execute_at: :asc).first.try(:execute_at)
27
- # At least check database for jobs every 5 minutes
33
+ # At least check database for jobs every day
28
34
  next_job_run = 1.day.from_now if next_job_run.nil? or (next_job_run - DateTime.now)/60/60 > 24
29
35
  RunJobs.set(wait_until: next_job_run).perform_later
30
36
  rescue
@@ -16,6 +16,9 @@ module Arask
16
16
  p self
17
17
  puts e.message
18
18
 
19
+ unless Arask.exception_block.nil?
20
+ Arask.exception_block.call(e, self)
21
+ end
19
22
  unless Arask.exception_email.nil?
20
23
  ActionMailer::Base.mail(
21
24
  from: Arask.exception_email_from,
@@ -21,4 +21,9 @@ Arask.setup do |arask|
21
21
 
22
22
  # On exceptions, send email with details
23
23
  #arask.on_exception email: 'errors@example.com'
24
+
25
+ # Run code on exceptions
26
+ #arask.on_exception do |exception, arask_job|
27
+ # MyExceptionHandler.new(exception)
28
+ #end
24
29
  end
data/lib/arask/railtie.rb CHANGED
@@ -1,4 +1,8 @@
1
1
  module Arask
2
2
  class Railtie < ::Rails::Railtie
3
+ # Executes when the rails server is running
4
+ server do
5
+ Arask.init_jobs
6
+ end
3
7
  end
4
8
  end
data/lib/arask/setup.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  module Arask
2
2
  class Setup
3
- def self.on_exception(email: nil, from: 'robot@server')
4
- Arask.exception_email = email
5
- Arask.exception_email_from = from
6
- puts "Arask could not parse parameter for on_exception!" unless email.class == String
3
+ def self.on_exception(email: nil, from: 'robot@server', &block)
4
+ Arask.exception_email = email unless email.nil?
5
+ Arask.exception_email_from = from unless from.nil?
6
+ puts "Arask could not parse parameter for on_exception!" unless email.nil? or email.class == String
7
+ if block_given?
8
+ Arask.exception_block = block
9
+ end
7
10
  end
8
11
 
9
12
  def self.create(script: nil, task: nil, job: nil, interval: nil, cron: nil, run_first_time: false)
data/lib/arask/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Arask
2
- VERSION = '1.1.3'
2
+ VERSION = '1.2.4'
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arask
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esben Damgaard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-02 00:00:00.000000000 Z
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.1'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.1'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fugit
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -90,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.6.11
93
+ rubygems_version: 3.2.3
95
94
  signing_key:
96
95
  specification_version: 4
97
96
  summary: Automatic RAils taSKs (with minimal setup)