perform_every 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e9c1509e5c84a94b1a0029dd2a71e5f62a81deb63f1673ac7532a2a43bfdbe4
4
- data.tar.gz: 3c7f5acd581c44792a5dcb2577eaf2ec32d42dd36a2abbab333f8f20186ef79c
3
+ metadata.gz: 28665fe63baa450a89f68d9f6c800c32c0961bb5d3aa248ea39ed0e0363596ae
4
+ data.tar.gz: 3b570be0905adab69c73d8424a55f4a65bdd6be1cdd9ab918c8e4585157cc7d7
5
5
  SHA512:
6
- metadata.gz: 98636a9c1083dc8cd8ae302c1cb4c3ebd1f0b1e09cb3bd1cd0d6892d5f721f89d1e4d2ab579c74d39a6e19dc7bba9763fb8c225b2e675e1fcd3300738dd7645c
7
- data.tar.gz: da526fc6fbb9a6029f317072953fe15df393c8238605ae5cff5b89ef1d393ed4ca8a721abf8ac883e99790c203e552e29fd7f21f6d367c00e3835e40fb681366
6
+ metadata.gz: 1540d9335238bfdf3c18330b15263c309e85a504fb025f9e53b9cdeead34c315ca637ff313e2523baf05e7dfc31f19fd28efae8db7aa1f1ff7c0785771e86c31
7
+ data.tar.gz: b427ada8c301c57ed33ba71ebc369f859467d7ebb0a8fa6e465f9d45bb486ad1f0e9a87d1b784a858bec1004cd39d2934a0d3107b277409c6caee38788ae9ebb
data/Rakefile CHANGED
@@ -1,26 +1,26 @@
1
1
  begin
2
- require 'bundler/setup'
2
+ require "bundler/setup"
3
3
  rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
4
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
5
  end
6
6
 
7
- require 'rdoc/task'
7
+ require "rdoc/task"
8
8
 
9
9
  RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'PerformEvery'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.md')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
10
+ rdoc.rdoc_dir = "rdoc"
11
+ rdoc.title = "PerformEvery"
12
+ rdoc.options << "--line-numbers"
13
+ rdoc.rdoc_files.include("README.md")
14
+ rdoc.rdoc_files.include("lib/**/*.rb")
15
15
  end
16
16
 
17
- require 'bundler/gem_tasks'
17
+ require "bundler/gem_tasks"
18
18
 
19
- require 'rake/testtask'
19
+ require "rake/testtask"
20
20
 
21
21
  Rake::TestTask.new(:test) do |t|
22
- t.libs << 'test'
23
- t.pattern = 'test/**/*_test.rb'
22
+ t.libs << "test"
23
+ t.pattern = "test/**/*_test.rb"
24
24
  t.verbose = false
25
25
  end
26
26
 
@@ -1,4 +1,3 @@
1
-
2
1
  module PerformEvery
3
2
  class ActiveRecordGenerator < Rails::Generators::Base
4
3
  include Rails::Generators::Migration
@@ -8,24 +7,12 @@ module PerformEvery
8
7
  migration_template "migration.rb", "db/migrate/create_perform_every.rb"
9
8
  end
10
9
 
11
- #def generate_model
12
- #invoke "active_record:model", ["PerformEvery"], migration: false unless model_exists? && behavior == :invoke
13
- #end
14
-
15
- private
10
+ private
16
11
 
17
12
  # see https://stackoverflow.com/questions/11079617/next-migration-number-notimplementederror-notimplementederror-using-wysihat
18
13
  def self.next_migration_number(dirname)
19
14
  next_migration_number = current_migration_number(dirname) + 1
20
15
  ActiveRecord::Migration.next_migration_number(next_migration_number)
21
16
  end
22
-
23
- #def model_exists?
24
- #File.exist?(File.join(destination_root, model_path))
25
- #end
26
-
27
- #def model_path
28
- #@model_path ||= File.join("app", "models", "perform_every.rb")
29
- #end
30
17
  end
31
18
  end
@@ -1,4 +1,4 @@
1
- class CreatePerformEvery < ActiveRecord::Migration[4.2]
1
+ class CreatePerformEvery < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :perform_every do |t|
4
4
  t.string :job_name
@@ -4,7 +4,7 @@ require "perform_every/reflection"
4
4
  require "perform_every/scheduler"
5
5
  require "perform_every/railtie"
6
6
 
7
- require 'fugit'
7
+ require "fugit"
8
8
 
9
9
  ActiveSupport.on_load(:active_job) do
10
10
  require "perform_every/activejob"
@@ -7,7 +7,7 @@ module PerformEvery
7
7
  # and https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations.rb
8
8
 
9
9
  class_methods do
10
- def perform_every(interval, opts={})
10
+ def perform_every(interval, opts = {})
11
11
  j = Job.new
12
12
  j.job_name = self.name
13
13
  j.typ = "interval"
@@ -17,14 +17,14 @@ module PerformEvery
17
17
  if j.value.blank?
18
18
  raise "#{self.name}#perform_every needs interval"
19
19
  end
20
-
20
+
21
21
  # TODO raise if perform method has parameters
22
22
  # Object.const_get(self.name).instance_method(:perform).parameters.flatten.count
23
23
 
24
24
  PerformEvery::Reflection.insert(j)
25
25
  end
26
26
 
27
- def perform_at(timestamp, opts={})
27
+ def perform_at(timestamp, opts = {})
28
28
  j = Job.new
29
29
  j.job_name = self.name
30
30
  j.typ = "timestamp"
@@ -43,4 +43,3 @@ module PerformEvery
43
43
  end
44
44
  end
45
45
  end
46
-
@@ -1,4 +1,4 @@
1
- require 'action_view'
1
+ require "action_view"
2
2
 
3
3
  module PerformEvery
4
4
  class Job < ActiveRecord::Base
@@ -15,7 +15,7 @@ module PerformEvery
15
15
  end
16
16
 
17
17
  def from_reflection_store(attr)
18
- s = PerformEvery::Reflection.find(self)
18
+ s = PerformEvery::Reflection.find(self)
19
19
  return nil if s.nil?
20
20
  s.send(attr.to_sym)
21
21
  end
@@ -122,7 +122,7 @@ module PerformEvery
122
122
  def add_history(t = Time.now.utc)
123
123
  self.history ||= []
124
124
  self.history << t.to_s
125
- self.history.shift(self.history.count - MAX_HISTORY) if self.history.count > MAX_HISTORY
125
+ self.history.shift(self.history.count - MAX_HISTORY) if self.history.count > MAX_HISTORY
126
126
  end
127
127
 
128
128
  def perform_next_at
@@ -138,7 +138,7 @@ module PerformEvery
138
138
  def parse_interval_value
139
139
  raise "must be interval" if self.value.blank?
140
140
  interval = ::Fugit::Nat.parse("every " + self.value, multi: :fail)
141
- raise "must be interval" if interval.blank? || !interval.is_a?(::Fugit::Cron)
141
+ raise "must be interval" if interval.blank? || !interval.is_a?(::Fugit::Cron)
142
142
  return interval
143
143
  end
144
144
 
@@ -149,8 +149,8 @@ module PerformEvery
149
149
  return timestamp
150
150
  end
151
151
 
152
- def == j
153
- self.job_name == j.job_name && self.typ == j.typ && self.value == j.value
152
+ def ==(j)
153
+ self.job_name == j.job_name && self.typ == j.typ && self.value == j.value
154
154
  end
155
155
 
156
156
  def perform_once?
@@ -165,6 +165,5 @@ module PerformEvery
165
165
  self.deprecated = true
166
166
  self.save!
167
167
  end
168
-
169
168
  end
170
169
  end
@@ -1,5 +1,4 @@
1
1
  module PerformEvery
2
-
3
2
  module Reflection
4
3
  mattr_reader :store, default: []
5
4
 
@@ -13,8 +12,7 @@ module PerformEvery
13
12
  def self.find(job)
14
13
  i = @@store.index(job)
15
14
  return nil if i.nil?
16
- @@store[i]
15
+ @@store[i]
17
16
  end
18
17
  end
19
-
20
18
  end
@@ -1,17 +1,16 @@
1
- require 'with_advisory_lock'
1
+ require "with_advisory_lock"
2
2
 
3
3
  module PerformEvery
4
4
  class Scheduler
5
-
6
5
  def run_forever
7
6
  Zeitwerk::Loader.eager_load_all # make sure all jobs are loaded
8
7
 
9
8
  # trap SIGINT and SIGTERM signals for clean shutdown
10
9
  kill = false
11
- Signal.trap("INT") {|s| kill = true }
12
- Signal.trap("TERM") {|s| kill = true }
10
+ Signal.trap("INT") { |s| kill = true }
11
+ Signal.trap("TERM") { |s| kill = true }
13
12
 
14
- # try to continuously acquire advisory lock so that only one worker
13
+ # try to continuously acquire advisory lock so that only one worker
15
14
  # at a time will schedule jobs. wait 5 seconds for lock, then try again after 30 seconds.
16
15
  loop do
17
16
  Rails.logger.info "Leader election: waiting to become master ..."
@@ -26,7 +25,7 @@ module PerformEvery
26
25
 
27
26
  at_exit do
28
27
  Rails.logger.info "#{metrics}" unless metrics.blank?
29
- Rails.logger.info "Bye"
28
+ Rails.logger.info "Bye"
30
29
  end
31
30
 
32
31
  # start endless loop
@@ -37,9 +36,8 @@ module PerformEvery
37
36
  jobs = Job.where(:deprecated => false)
38
37
  jobs.each do |job|
39
38
 
40
-
41
39
  # check if job is still present in local job files
42
- if Reflection.store.include?(job)
40
+ if Reflection.store.include?(job)
43
41
  op = job.perform!
44
42
  metrics[op] ||= 0
45
43
  metrics[op] += 1
@@ -72,7 +70,6 @@ module PerformEvery
72
70
  return if kill
73
71
  sleep 2
74
72
  end
75
-
76
73
  end # /loop around with_advisory_lock
77
74
  end
78
75
 
@@ -81,11 +78,14 @@ module PerformEvery
81
78
  # insert new jobs to database
82
79
  def self.persist_jobs
83
80
  return 0 if Reflection.store.blank?
84
- Job.insert_all(Reflection.store.map{|j| {
85
- job_name: j.job_name,
86
- typ: j.typ,
87
- value: j.value,
88
- perform_at: j.perform_next_at} })
81
+ Job.insert_all(Reflection.store.map { |j|
82
+ {
83
+ job_name: j.job_name,
84
+ typ: j.typ,
85
+ value: j.value,
86
+ perform_at: j.perform_next_at,
87
+ }
88
+ })
89
89
  Reflection.store.count
90
90
  end
91
91
 
@@ -96,6 +96,5 @@ module PerformEvery
96
96
  def self.reset_jobs
97
97
  Job.connection.truncate(Job.table_name)
98
98
  end
99
-
100
99
  end
101
100
  end
@@ -1,3 +1,3 @@
1
1
  module PerformEvery
2
- VERSION = '0.1.0'
2
+ VERSION = "0.1.1"
3
3
  end
@@ -1,8 +1,7 @@
1
1
  namespace :perform_every do
2
-
3
2
  desc "Run scheduler"
4
3
  task run: :environment do
5
- s = PerformEvery::Scheduler.new
4
+ s = PerformEvery::Scheduler.new
6
5
  s.run_forever
7
6
  end
8
7
 
@@ -15,5 +14,4 @@ namespace :perform_every do
15
14
  task reset: :environment do
16
15
  PerformEvery::Scheduler.reset_jobs
17
16
  end
18
-
19
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perform_every
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Kadenbach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-07 00:00:00.000000000 Z
11
+ date: 2020-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails