Module: Arask

Defined in:
lib/arask.rb,
lib/arask/railtie.rb,
lib/arask/version.rb,
lib/arask/arask_job.rb

Defined Under Namespace

Classes: AraskJob, InstallGenerator, Railtie, RunJobs

Constant Summary collapse

VERSION =
'0.1.2'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.time_cacheObject

Returns the value of attribute time_cache.



5
6
7
# File 'lib/arask.rb', line 5

def time_cache
  @time_cache
end

Class Method Details

.create(script: nil, task: nil, interval:, run_first_time: false) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/arask.rb', line 27

def self.create(script: nil, task: nil, interval:, run_first_time: false)
  case interval
  when :hourly
    interval = 1.hour
  when :daily
    interval = 1.day
  when :monthly
    interval = 1.month
  end
  interval = interval.to_s.to_i
  unless task.nil?
    script = "Rake::Task['#{task}'].invoke"
  end
  if script.nil?
    puts 'Arask: You did not specify a script or task to run!'
    return
  end
  begin
    job = AraskJob.where(job: script, interval: interval).first
    if job
      @jobs_touched << job.id
    else
      job = AraskJob.create(job: script, interval: interval, execute_at: interval.seconds.from_now)
      @jobs_touched << job.id
      if run_first_time===true
        job.run
      end
    end
  rescue ActiveRecord::StatementInvalid => e
    puts 'Could not create arask job! Looks like the database is not migrated? Remember to run `rails generate arask:install` and `rails db:migrate`'
  end
end

.queue_selfObject



17
18
19
20
21
22
23
24
25
# File 'lib/arask.rb', line 17

def self.queue_self
  begin
    next_job_run = AraskJob.order(execute_at: :asc).first.try(:execute_at)
    # At least check database for jobs every 5 minutes
    next_job_run = 5.minutes.from_now if next_job_run.nil? or (next_job_run - DateTime.now)/60 > 5
    RunJobs.set(wait_until: next_job_run).perform_later
  rescue
  end
end

.setup {|Arask| ... } ⇒ Object

Yields:



7
8
9
10
11
12
13
14
15
# File 'lib/arask.rb', line 7

def self.setup
  @jobs_touched = []
  yield Arask
  begin
    AraskJob.all.where.not(id: @jobs_touched).delete_all
    Arask.queue_self
  rescue
  end
end