schked 0.3.1 → 0.4.0

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: 9032b965f197305414b29d447cdacb639dccbe6ccb2c880e42eb659f9be19e16
4
- data.tar.gz: 5b87c0acd0067a46ceaaf08439acd9b384eac0fa0ab793b0cf11326ffd9c88b6
3
+ metadata.gz: d8543c91732ed3147359b2b6c5c8ebef8ddb2f467766a8c143072ac403341647
4
+ data.tar.gz: d85da0ba7c7f001d9682c9423a59bb35a8ff4c3581583fbf1ed31cc11650c866
5
5
  SHA512:
6
- metadata.gz: dc849c6d11a7fa8e5262b5678b9998b3d3c2e08014d03a66ddb39c6d0291ecface28631c12cd496647094ad3ef24b548e14c6ecef480626cbcf2793a6d4a1263
7
- data.tar.gz: 0220e6572ce4badf7566449f6006c78c1d97529330d3920f3491c9009182ee8a9c7a6ab89060ecf82898a7ad1dbb15babd93e0f699f5fa630327e8816ae34032
6
+ metadata.gz: 4e87e77de1530b23d680660806edafba03eb191c72da03d8b37b2b0a3845916ce700924e9d51806a20fbba58d8c1c9403e2a9c8d7c33103ab0eb4ceeaa76cdd1
7
+ data.tar.gz: 4408c7dfb6b03b73018d2d80cd005e52b6ddfc28635fd6eca972c670f17add271e2e89501452220dec116d48c529cb4d5f43761cc7416ddd6a247a3444ee713d
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Michael Merkushin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,140 @@
1
+ [![Gem Version](https://badge.fury.io/rb/schked.svg)](https://badge.fury.io/rb/schked)
2
+ [![Build Status](https://travis-ci.org/bibendi/schked.svg?branch=master)](https://travis-ci.org/bibendi/schked)
3
+
4
+ # Schked
5
+
6
+ Framework agnostic [Rufus-scheduler](https://github.com/jmettraux/rufus-scheduler) wrapper to run recurring jobs.
7
+
8
+ <a href="https://evilmartians.com/?utm_source=schked">
9
+ <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54"></a>
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem "schked"
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ ```sh
22
+ bundle
23
+ ```
24
+
25
+ Or install it yourself as:
26
+
27
+ ```sh
28
+ gem install schked
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ ### Ruby on Rails
34
+
35
+ .schked
36
+
37
+ ```
38
+ --require config/environment.rb
39
+ ```
40
+
41
+ config/schedule.rb
42
+
43
+ ```ruby
44
+ cron "*/30 * * * *", as: "CleanOrphanAttachmentsJob" do
45
+ CleanOrphanAttachmentsJob.perform_later
46
+ end
47
+ ```
48
+
49
+ If you have a Rails engine with own schedule:
50
+
51
+ engine-path/lib/foo/engine.rb
52
+
53
+ ```ruby
54
+ module Foo
55
+ class Engine < ::Rails::Engine
56
+ initializer "foo" do |app|
57
+ Schked.config.paths << root.join("config", "schedule.rb")
58
+ end
59
+ end
60
+ end
61
+ ```
62
+
63
+ And run Schked:
64
+
65
+ ```sh
66
+ bundle exec schked start
67
+ ```
68
+
69
+ To show schedule:
70
+
71
+ ```sh
72
+ bundle exec schked show
73
+ ```
74
+
75
+ ### Callbacks
76
+
77
+ Also, you can define callbacks for errors handling:
78
+
79
+ config/initializers/schked.rb
80
+
81
+ ```ruby
82
+ Schked.config.register_callback(:on_error) do |job, error|
83
+ Raven.capture_exception(error) if defined?(Raven)
84
+ end
85
+ ```
86
+
87
+ There are `:before_start` and `:after_finish` callbacks as well.
88
+
89
+ ### Logging
90
+
91
+ By default Schked writes logs into stdout. In Rails environment Schked is using application logger. You can change it like this:
92
+
93
+ config/initializers/schked.rb
94
+
95
+ ```ruby
96
+ Schked.config.logger = Logger.new(Rails.root.join("log", "schked.log"))
97
+ ```
98
+
99
+ ### Monitoring
100
+
101
+ [Yabeda::Schked](https://github.com/yabeda-rb/yabeda-schked) - built-in metrics for monitoring Schked recurring jobs out of the box! Part of the [yabeda](https://github.com/yabeda-rb/yabeda) suite.
102
+
103
+ ### Testing
104
+
105
+ ```ruby
106
+ describe Schked do
107
+ let(:worker) { described_class.worker.tap(&:pause) }
108
+
109
+ around do |ex|
110
+ Time.use_zone("UTC") { Timecop.travel(start_time, &ex) }
111
+ end
112
+
113
+ describe "CleanOrphanAttachmentsJob" do
114
+ let(:start_time) { Time.zone.local(2008, 9, 1, 10, 42, 21) }
115
+ let(:job) { worker.job("CleanOrphanAttachmentsJob") }
116
+
117
+ specify do
118
+ expect(job.next_time.to_local_time)
119
+ .to eq Time.zone.local(2008, 9, 1, 11, 0, 0)
120
+ end
121
+
122
+ it "enqueues job" do
123
+ expect { job.call(false) }
124
+ .to have_enqueued_job(CleanOrphanAttachmentsJob)
125
+ end
126
+ end
127
+ end
128
+ ```
129
+
130
+ ## Contributing
131
+
132
+ Bug reports and pull requests are welcome on GitHub at https://github.com/bibendi/schked. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
133
+
134
+ ## License
135
+
136
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
137
+
138
+ ## Code of Conduct
139
+
140
+ Everyone interacting in the Schked project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/schked/blob/master/CODE_OF_CONDUCT.md).
data/exe/schked CHANGED
@@ -4,4 +4,13 @@
4
4
  require "bundler/setup"
5
5
  require "schked/cli"
6
6
 
7
- Schked::CLI.start(ARGV)
7
+ # rubocop:disable Lint/RescueException
8
+ begin
9
+ Schked::CLI.start(ARGV)
10
+ rescue Exception => e
11
+ warn "Schked exited with error"
12
+ warn(e.message) if e.respond_to?(:message)
13
+ warn(e.backtrace.join("\n")) if e.respond_to?(:backtrace) && e.backtrace.respond_to?(:join)
14
+ exit 1
15
+ end
16
+ # rubocop:enable Lint/RescueException
data/lib/schked/config.rb CHANGED
@@ -4,7 +4,8 @@ require "logger"
4
4
 
5
5
  module Schked
6
6
  class Config
7
- attr_writer :logger
7
+ attr_writer :logger,
8
+ :do_not_load_root_schedule
8
9
 
9
10
  def paths
10
11
  @paths ||= []
@@ -15,7 +16,11 @@ module Schked
15
16
  end
16
17
 
17
18
  def logger
18
- @logger ||= Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
19
+ @logger ||= Logger.new($stdout).tap { |l| l.level = Logger::INFO }
20
+ end
21
+
22
+ def do_not_load_root_schedule?
23
+ !!@do_not_load_root_schedule
19
24
  end
20
25
 
21
26
  def register_callback(name, &block)
@@ -6,7 +6,10 @@ module Schked
6
6
  class Railtie < Rails::Railtie
7
7
  class PathsConfig
8
8
  def self.call(app)
9
- if (root_schedule = app.root.join("config", "schedule.rb")).exist?
9
+ return if Schked.config.do_not_load_root_schedule?
10
+
11
+ root_schedule = app.root.join("config", "schedule.rb")
12
+ if root_schedule.exist?
10
13
  path = root_schedule.to_s
11
14
  Schked.config.paths << path unless Schked.config.paths.include?(path)
12
15
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schked
4
- VERSION = "0.3.1"
4
+ VERSION = "0.4.0"
5
5
  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.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
- - bibendi@evilmartians.com
8
- autorequire:
7
+ - Misha Merkushin
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-07 00:00:00.000000000 Z
11
+ date: 2022-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.1'
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: '1.1'
82
+ version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
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.4'
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.4'
96
+ version: '3.9'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -114,64 +114,38 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '3.0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '3.0'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.60'
117
+ version: '3.9'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0.60'
139
- - !ruby/object:Gem::Dependency
140
- name: rubocop-rspec
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
124
+ version: '3.9'
153
125
  - !ruby/object:Gem::Dependency
154
126
  name: standard
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
129
  - - "~>"
158
130
  - !ruby/object:Gem::Version
159
- version: 0.1.0
131
+ version: '0.4'
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
136
  - - "~>"
165
137
  - !ruby/object:Gem::Version
166
- version: 0.1.0
138
+ version: '0.4'
167
139
  description: Rufus-scheduler wrapper to run recurring jobs
168
- email:
140
+ email:
141
+ - merkushin.m.s@gmail.com
169
142
  executables:
170
143
  - schked
171
144
  extensions: []
172
145
  extra_rdoc_files: []
173
146
  files:
174
- - Rakefile
147
+ - LICENSE.txt
148
+ - README.md
175
149
  - exe/schked
176
150
  - lib/schked.rb
177
151
  - lib/schked/cli.rb
@@ -179,27 +153,28 @@ files:
179
153
  - lib/schked/railtie.rb
180
154
  - lib/schked/version.rb
181
155
  - lib/schked/worker.rb
182
- homepage:
183
- licenses: []
184
- metadata: {}
185
- post_install_message:
156
+ homepage: https://github.com/bibendi/schked
157
+ licenses:
158
+ - MIT
159
+ metadata:
160
+ allowed_push_host: https://rubygems.org
161
+ post_install_message:
186
162
  rdoc_options: []
187
163
  require_paths:
188
164
  - lib
189
165
  required_ruby_version: !ruby/object:Gem::Requirement
190
166
  requirements:
191
- - - ">="
167
+ - - ">"
192
168
  - !ruby/object:Gem::Version
193
- version: '0'
169
+ version: '2.5'
194
170
  required_rubygems_version: !ruby/object:Gem::Requirement
195
171
  requirements:
196
172
  - - ">="
197
173
  - !ruby/object:Gem::Version
198
174
  version: '0'
199
175
  requirements: []
200
- rubyforge_project:
201
- rubygems_version: 2.7.6
202
- signing_key:
176
+ rubygems_version: 3.2.32
177
+ signing_key:
203
178
  specification_version: 4
204
179
  summary: Ruby Scheduler
205
180
  test_files: []
data/Rakefile DELETED
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"