perform_every 0.1.0 → 0.1.1

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
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