schked 0.1.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b8b3e6f7d5d7a1db0b90f3ca5ec69ff064b79ab0923aa956a6ecde419426703
4
- data.tar.gz: 26f4ec5f80c97e1311913cc381448578b735a6b44517b1c2192cf8702e89e1c9
3
+ metadata.gz: 90b8205a097b70389092670aa9611f7d20ab5084566db58383259c1bfed475ac
4
+ data.tar.gz: ced62e04d7b71e2e96a43762ab39377ada35a5d6aaeb518099d6f74a0ef6026a
5
5
  SHA512:
6
- metadata.gz: 0fa825e6c8ea53aa82e575542da294e92c8d0c19ecb1ef3e2419460ce99c6306c606ebe3518daf2a57d0478c5c122c74a37df8578ad7bd2231fdd1542b8263b2
7
- data.tar.gz: be98b368b66d02c8c3656ac26015e9f9a4ab841c7d9d37a87988860500208d1a1abcdbb46b25ed272342d017356aff5580c2efba20af318db0b374431b7612da
6
+ metadata.gz: 4e95232f135a84da9346dfae02a5d915ab52ad36ae1ec98f7b8133e72c32b3417567f1a647d1439ac42445b24f56231b84d19168b5b622f9ddf4ba20dca98831
7
+ data.tar.gz: 1b21245b148b5532c117a9d2a41d475fba6186a7c166fd13cdb8e2e30172162c7c9e1121d61d06378925b471236517cad75423fc10ab846e43867bfbd50afd39
data/Rakefile CHANGED
@@ -1,8 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- task default: :spec
data/exe/schked CHANGED
@@ -4,4 +4,11 @@
4
4
  require "bundler/setup"
5
5
  require "schked/cli"
6
6
 
7
- Schked::CLI.start(ARGV)
7
+ begin
8
+ Schked::CLI.start(ARGV)
9
+ rescue Exception => e
10
+ $stderr.puts "Schked exited with error"
11
+ $stderr.puts(e.message) if e.respond_to?(:message)
12
+ $stderr.puts(e.backtrace.join("\n")) if e.respond_to?(:backtrace) && e.backtrace.respond_to?(:join)
13
+ exit 1
14
+ end
@@ -1,25 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rufus/scheduler"
4
-
5
3
  require "schked/version"
4
+ require "schked/config"
5
+ require "schked/worker"
6
+ require "schked/railtie" if defined?(Rails)
6
7
 
7
8
  module Schked
8
9
  module_function
9
10
 
10
- def paths
11
- @paths ||= []
12
- end
13
-
14
- def schedule
15
- paths.
16
- map { |path| File.read(path) }.
17
- join("\n")
11
+ def config
12
+ @config ||= Config.new
18
13
  end
19
14
 
20
- def start
21
- scheduler = Rufus::Scheduler.new
22
- scheduler.instance_eval(schedule)
23
- scheduler.join
15
+ def worker
16
+ @worker ||= Worker.new(config: config)
24
17
  end
25
18
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "schked"
4
3
  require "thor"
5
4
  require "shellwords"
6
5
 
@@ -8,12 +7,12 @@ module Schked
8
7
  class CLI < Thor
9
8
  def self.start(argv)
10
9
  if File.exist?(".schked")
11
- argv += File.
12
- read(".schked").
13
- split("\n").
14
- join(" ").
15
- strip.
16
- shellsplit
10
+ argv += File
11
+ .read(".schked")
12
+ .split("\n")
13
+ .join(" ")
14
+ .strip
15
+ .shellsplit
17
16
  end
18
17
 
19
18
  super(argv)
@@ -30,7 +29,7 @@ module Schked
30
29
  def start
31
30
  load_requires
32
31
 
33
- Schked.start
32
+ Schked.worker.wait
34
33
  end
35
34
 
36
35
  desc "show", "Output schedule to stdout"
@@ -39,16 +38,19 @@ module Schked
39
38
  load_requires
40
39
 
41
40
  puts "====="
42
- puts Schked.schedule
41
+ puts Schked.worker.schedule
43
42
  puts "====="
44
43
  end
45
44
 
46
45
  private
47
46
 
48
47
  def load_requires
49
- return unless options[:require]&.any?
48
+ if options[:require]&.any?
49
+ options[:require].each { |file| load(File.join(Dir.pwd, file)) }
50
+ end
50
51
 
51
- options[:require].each { |file| require(File.join(Dir.pwd, file)) }
52
+ # We have to load Schked at here, because of Rails and our railtie.
53
+ require "schked"
52
54
  end
53
55
  end
54
56
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "logger"
4
+
5
+ module Schked
6
+ class Config
7
+ attr_writer :logger
8
+
9
+ def paths
10
+ @paths ||= []
11
+ end
12
+
13
+ def logger?
14
+ !!@logger
15
+ end
16
+
17
+ def logger
18
+ @logger ||= Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
19
+ end
20
+
21
+ def register_callback(name, &block)
22
+ callbacks[name] << block
23
+ end
24
+
25
+ def fire_callback(name, *args)
26
+ callbacks[name].each do |callback|
27
+ callback.call(*args)
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def callbacks
34
+ @callbacks ||= Hash.new { |hsh, key| hsh[key] = [] }
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/railtie"
4
+
5
+ module Schked
6
+ class Railtie < Rails::Railtie
7
+ class PathsConfig
8
+ def self.call(app)
9
+ if (root_schedule = app.root.join("config", "schedule.rb")).exist?
10
+ path = root_schedule.to_s
11
+ Schked.config.paths << path unless Schked.config.paths.include?(path)
12
+ end
13
+ end
14
+ end
15
+
16
+ initializer("schked.paths", &PathsConfig.method(:call))
17
+
18
+ config.to_prepare do
19
+ Schked.config.logger = ::Rails.logger unless Schked.config.logger?
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schked
4
- VERSION = "0.1.1"
4
+ VERSION = "0.3.2"
5
5
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rufus/scheduler"
4
+
5
+ module Schked
6
+ class Worker
7
+ def initialize(config:)
8
+ @config = config
9
+
10
+ @scheduler = Rufus::Scheduler.new
11
+
12
+ define_callbacks
13
+ load_schedule
14
+ end
15
+
16
+ def job(as)
17
+ scheduler.jobs.find { |job| job.opts[:as] == as }
18
+ end
19
+
20
+ def pause
21
+ scheduler.pause
22
+ end
23
+
24
+ def wait
25
+ scheduler.join
26
+ end
27
+
28
+ def stop
29
+ scheduler.stop
30
+ end
31
+
32
+ def schedule
33
+ config
34
+ .paths
35
+ .map { |path| File.read(path) }
36
+ .join("\n")
37
+ end
38
+
39
+ private
40
+
41
+ attr_reader :config, :scheduler
42
+
43
+ def define_callbacks
44
+ cfg = config
45
+
46
+ scheduler.define_singleton_method(:on_error) do |job, error|
47
+ cfg.logger.fatal("Task #{job.opts[:as] || job.job_id} failed with error: #{error.message}")
48
+ cfg.logger.error(error.backtrace.join("\n")) if error.backtrace
49
+
50
+ cfg.fire_callback(:on_error, job, error)
51
+ end
52
+
53
+ scheduler.define_singleton_method(:on_pre_trigger) do |job, time|
54
+ cfg.logger.info("Started task: #{job.opts[:as] || job.job_id}")
55
+
56
+ cfg.fire_callback(:before_start, job, time)
57
+ end
58
+
59
+ scheduler.define_singleton_method(:on_post_trigger) do |job, time|
60
+ cfg.logger.info("Finished task: #{job.opts[:as] || job.job_id}")
61
+
62
+ cfg.fire_callback(:after_finish, job, time)
63
+ end
64
+ end
65
+
66
+ def load_schedule
67
+ scheduler.instance_eval(schedule)
68
+ end
69
+ end
70
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schked
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - bibendi@evilmartians.com
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-29 00:00:00.000000000 Z
11
+ date: 2020-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -39,103 +39,103 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: appraisal
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: '2.2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.16'
54
+ version: '2.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry-byebug
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '3.4'
61
+ version: '1.16'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '3.4'
68
+ version: '1.16'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: combustion
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '1.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rspec
84
+ name: pry-byebug
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.0'
89
+ version: '3.9'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.0'
96
+ version: '3.9'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.60'
103
+ version: '13.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.60'
110
+ version: '13.0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rubocop-rspec
112
+ name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '3.9'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '3.9'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: standard
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '0.4'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '0.4'
139
139
  description: Rufus-scheduler wrapper to run recurring jobs
140
140
  email:
141
141
  executables:
@@ -147,7 +147,10 @@ files:
147
147
  - exe/schked
148
148
  - lib/schked.rb
149
149
  - lib/schked/cli.rb
150
+ - lib/schked/config.rb
151
+ - lib/schked/railtie.rb
150
152
  - lib/schked/version.rb
153
+ - lib/schked/worker.rb
151
154
  homepage:
152
155
  licenses: []
153
156
  metadata: {}
@@ -166,8 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
169
  - !ruby/object:Gem::Version
167
170
  version: '0'
168
171
  requirements: []
169
- rubyforge_project:
170
- rubygems_version: 2.7.6
172
+ rubygems_version: 3.1.2
171
173
  signing_key:
172
174
  specification_version: 4
173
175
  summary: Ruby Scheduler