time_scheduler 1.0.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 +7 -0
- data/.gitignore +23 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/README.adoc +200 -0
- data/README.ja.adoc +199 -0
- data/Rakefile +96 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/time_scheduler.rb +4 -0
- data/lib/time_scheduler/event.rb +84 -0
- data/lib/time_scheduler/scheduler.rb +226 -0
- data/lib/time_scheduler/version.rb +3 -0
- data/sample/base_1.rb +11 -0
- data/sample/base_2.rb +12 -0
- data/sample/base_3.rb +10 -0
- data/sample/base_4.rb +14 -0
- data/sample/base_5.rb +25 -0
- data/sample/base_6.rb +24 -0
- data/sample/base_7.rb +20 -0
- data/sample/base_8.rb +27 -0
- data/sample/base_9.rb +29 -0
- data/sample/base_a.rb +31 -0
- data/sample/base_b.rb +17 -0
- data/sample/base_c.rb +24 -0
- data/sample/base_d.rb +21 -0
- data/sample/base_e.rb +25 -0
- data/sample/base_f.rb +21 -0
- data/sample/base_g.rb +36 -0
- data/time_scheduler.gemspec +28 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4a0c224d56eceb03eb15fcded9eb2780b71cf16cdecdf45d578b39c5f53bfed0
|
4
|
+
data.tar.gz: 07edc8b9301dc8e3ac27fed5d8015c548fb884800b7d292db3f815cfbd92d2d3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 19a5f1d79e7a42779255271f06f7fe64e9ac938e1a3aa9344968de957ae9b9cb488fa07d5b35d4ea50f6ba56ef3776fcabf431abdc8f9deacd012e3a2c5ad7e4
|
7
|
+
data.tar.gz: fd75200695a4d318653261a3e45907b93d48f8c86f7a85fa3ca424a4dcfd7f3d0e0a45b54a4034d399f77189161f7b0418ce70b37380492a7e52e3fb5d15a401
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/Gemfile.lock
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
10
|
+
*.bundle
|
11
|
+
*.so
|
12
|
+
*.o
|
13
|
+
*.a
|
14
|
+
mkmf.log
|
15
|
+
/vendor/
|
16
|
+
*.pid
|
17
|
+
*.log
|
18
|
+
*.log.*
|
19
|
+
/var/
|
20
|
+
/log/
|
21
|
+
*.swp
|
22
|
+
/.rspec_status
|
23
|
+
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.adoc
ADDED
@@ -0,0 +1,200 @@
|
|
1
|
+
= TimeScheduler
|
2
|
+
|
3
|
+
TimeScheduler is yet another library for single/periodical event scheduler.
|
4
|
+
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
[source,ruby]
|
10
|
+
----
|
11
|
+
gem 'time_scheduler'
|
12
|
+
----
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle install
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install time_scheduler
|
21
|
+
or
|
22
|
+
$ gem install -l time_scheduler-x.x.x.gem
|
23
|
+
|
24
|
+
== Usage
|
25
|
+
|
26
|
+
=== Example 1
|
27
|
+
|
28
|
+
[source,ruby]
|
29
|
+
----
|
30
|
+
require "time_scheduler"
|
31
|
+
|
32
|
+
Scheduler = TimeScheduler.new
|
33
|
+
|
34
|
+
Signal.trap( :INT ) do
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
|
38
|
+
goal = Time.now + 5
|
39
|
+
while time = Scheduler.wait( sec: "*" )
|
40
|
+
p time
|
41
|
+
break if time > goal
|
42
|
+
end
|
43
|
+
|
44
|
+
goal = Time.now + 5
|
45
|
+
Scheduler.wait( :check, sec: "*" ) do |time|
|
46
|
+
p time
|
47
|
+
Scheduler.cancel( :check ) if time > goal
|
48
|
+
end
|
49
|
+
|
50
|
+
sleep 10
|
51
|
+
----
|
52
|
+
|
53
|
+
=== Example 2
|
54
|
+
|
55
|
+
[source,ruby]
|
56
|
+
----
|
57
|
+
require "time_scheduler"
|
58
|
+
|
59
|
+
Scheduler = TimeScheduler.new
|
60
|
+
|
61
|
+
Signal.trap( :INT ) do
|
62
|
+
exit
|
63
|
+
end
|
64
|
+
|
65
|
+
Scheduler.wait( sec: "*/5" ) do |time|
|
66
|
+
p [time, :sec5]
|
67
|
+
end
|
68
|
+
|
69
|
+
Scheduler.wait( cron: "*/2 * * * *" ) do |time|
|
70
|
+
p [time, :cron]
|
71
|
+
end
|
72
|
+
|
73
|
+
Scheduler.wait( at: Time.now + 30 ) do |time|
|
74
|
+
p [time, :quit]
|
75
|
+
exit
|
76
|
+
end
|
77
|
+
|
78
|
+
sleep
|
79
|
+
----
|
80
|
+
|
81
|
+
== Reference
|
82
|
+
|
83
|
+
=== Create a new TimeScheduler.
|
84
|
+
|
85
|
+
[source,ruby]
|
86
|
+
----
|
87
|
+
TimeScheduler.new
|
88
|
+
----
|
89
|
+
|
90
|
+
* Result:
|
91
|
+
** TimeScheduler object.
|
92
|
+
|
93
|
+
* Parameter:
|
94
|
+
** None.
|
95
|
+
|
96
|
+
=== Schedule event.
|
97
|
+
|
98
|
+
[source,ruby]
|
99
|
+
----
|
100
|
+
TimeScheduler=wait( topic = Time.now.iso8601(6),
|
101
|
+
at: nil, cron: nil, year: nil, month: nil, day: nil, wday: nil, hour: nil, min: nil, sec: 0, msec: nil,
|
102
|
+
&block )
|
103
|
+
----
|
104
|
+
|
105
|
+
* Result:
|
106
|
+
** with block:
|
107
|
+
*** topic string.
|
108
|
+
** without block:
|
109
|
+
*** event time.
|
110
|
+
|
111
|
+
* Parameter:
|
112
|
+
** topic: topic for setup/reset operation. (default: nil)
|
113
|
+
** at: time. Time or String object. (default: nil)
|
114
|
+
** cron: set of min, hour, day, month, wday pattern. (default: nil)
|
115
|
+
** year: year. unlimited range is denied. (default: nil)
|
116
|
+
** month: month. 1..12, jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec. (default: nil)
|
117
|
+
** day: day of month. 1..31. (default: nil)
|
118
|
+
** wday: day of week. 0..7, sun, mon, tue, wed, thr, fri, sat. (default: nil)
|
119
|
+
** hour: minute. 0..23. (default: nil)
|
120
|
+
** min: minute. 0..59. (default: nil)
|
121
|
+
** sec: second. 0..59. (default: 0)
|
122
|
+
** msec: millisecond. 0..999. (default: nil), If msec is assigned, then other parameters are ignored.
|
123
|
+
In detail, it can use "*" as wildcard.
|
124
|
+
|
125
|
+
=== Get event topics.
|
126
|
+
|
127
|
+
[source,ruby]
|
128
|
+
----
|
129
|
+
TimeScheduler#topics
|
130
|
+
----
|
131
|
+
|
132
|
+
* Result:
|
133
|
+
** array of topics.
|
134
|
+
|
135
|
+
* Parameter:
|
136
|
+
** none.
|
137
|
+
|
138
|
+
=== Cancel event.
|
139
|
+
|
140
|
+
[source,ruby]
|
141
|
+
----
|
142
|
+
TimeScheduler#cancel( *topics )
|
143
|
+
----
|
144
|
+
|
145
|
+
* Result:
|
146
|
+
** nil.
|
147
|
+
|
148
|
+
* Parameter:
|
149
|
+
** topic: topic for stop operation.
|
150
|
+
|
151
|
+
=== Check activity.
|
152
|
+
|
153
|
+
[source,ruby]
|
154
|
+
----
|
155
|
+
TimeScheduler#active?
|
156
|
+
----
|
157
|
+
|
158
|
+
* Result:
|
159
|
+
** false/true.
|
160
|
+
|
161
|
+
* Parameter:
|
162
|
+
** none.
|
163
|
+
|
164
|
+
=== Suspend all events.
|
165
|
+
|
166
|
+
[source,ruby]
|
167
|
+
----
|
168
|
+
TimeScheduler#suspend
|
169
|
+
----
|
170
|
+
|
171
|
+
* Result:
|
172
|
+
** nil.
|
173
|
+
|
174
|
+
* Parameter:
|
175
|
+
** none.
|
176
|
+
|
177
|
+
=== Resume all events.
|
178
|
+
|
179
|
+
[source,ruby]
|
180
|
+
----
|
181
|
+
TimeScheduler#resume
|
182
|
+
----
|
183
|
+
|
184
|
+
* Result:
|
185
|
+
** nil.
|
186
|
+
|
187
|
+
* Parameter:
|
188
|
+
** none.
|
189
|
+
|
190
|
+
== Caution
|
191
|
+
|
192
|
+
Because it is calculated in local time, it does not work as expected when switching to daylight saving time.
|
193
|
+
|
194
|
+
== Contributing
|
195
|
+
|
196
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/arimay/time_scheduler.
|
197
|
+
|
198
|
+
== License
|
199
|
+
|
200
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/README.ja.adoc
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
= TimeScheduler
|
2
|
+
|
3
|
+
TimeScheduler は一度の/周期的なイベントスケジューラのライブラリのひとつ。
|
4
|
+
|
5
|
+
== 導入
|
6
|
+
|
7
|
+
アプリの Gemfile にこの行を追加
|
8
|
+
|
9
|
+
[source,ruby]
|
10
|
+
----
|
11
|
+
gem 'time_scheduler'
|
12
|
+
----
|
13
|
+
|
14
|
+
それから実行
|
15
|
+
|
16
|
+
$ bundle install
|
17
|
+
|
18
|
+
または次のように手動で導入
|
19
|
+
|
20
|
+
$ gem install time_scheduler
|
21
|
+
or
|
22
|
+
$ gem install -l time_scheduler-x.x.x.gem
|
23
|
+
|
24
|
+
== 使い方
|
25
|
+
|
26
|
+
=== Example 1
|
27
|
+
|
28
|
+
[source,ruby]
|
29
|
+
----
|
30
|
+
require "time_scheduler"
|
31
|
+
|
32
|
+
Scheduler = TimeScheduler.new
|
33
|
+
|
34
|
+
Signal.trap( :INT ) do
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
|
38
|
+
goal = Time.now + 5
|
39
|
+
while time = Scheduler.wait( sec: "*" )
|
40
|
+
p time
|
41
|
+
break if time > goal
|
42
|
+
end
|
43
|
+
|
44
|
+
goal = Time.now + 5
|
45
|
+
Scheduler.wait( :check, sec: "*" ) do |time|
|
46
|
+
p time
|
47
|
+
Scheduler.cancel( :check ) if time > goal
|
48
|
+
end
|
49
|
+
|
50
|
+
sleep 10
|
51
|
+
----
|
52
|
+
|
53
|
+
=== Example 2
|
54
|
+
|
55
|
+
[source,ruby]
|
56
|
+
----
|
57
|
+
require "time_scheduler"
|
58
|
+
|
59
|
+
Scheduler = TimeScheduler.new
|
60
|
+
|
61
|
+
Signal.trap( :INT ) do
|
62
|
+
exit
|
63
|
+
end
|
64
|
+
|
65
|
+
Scheduler.wait( sec: "*/5" ) do |time|
|
66
|
+
p [time, :sec5]
|
67
|
+
end
|
68
|
+
|
69
|
+
Scheduler.wait( cron: "*/2 * * * *" ) do |time|
|
70
|
+
p [time, :cron]
|
71
|
+
end
|
72
|
+
|
73
|
+
Scheduler.wait( at: Time.now + 30 ) do |time|
|
74
|
+
p [time, :quit]
|
75
|
+
exit
|
76
|
+
end
|
77
|
+
|
78
|
+
sleep
|
79
|
+
----
|
80
|
+
|
81
|
+
== リファレンス
|
82
|
+
|
83
|
+
=== 新たな TimeScheduler を作成する.
|
84
|
+
|
85
|
+
[source,ruby]
|
86
|
+
----
|
87
|
+
TimeScheduler.new
|
88
|
+
----
|
89
|
+
|
90
|
+
* Result:
|
91
|
+
** TimeScheduler オブジェクト.
|
92
|
+
|
93
|
+
* Parameter:
|
94
|
+
** なし.
|
95
|
+
|
96
|
+
=== イベントを計画する.
|
97
|
+
|
98
|
+
[source,ruby]
|
99
|
+
----
|
100
|
+
TimeScheduler#wait( topic = Time.now.iso8601(6),
|
101
|
+
at: nil, cron: nil, year: nil, month: nil, day: nil, wday: nil, hour: nil, min: nil, sec: 0, msec: nil,
|
102
|
+
&block )
|
103
|
+
----
|
104
|
+
|
105
|
+
* Result:
|
106
|
+
** with block:
|
107
|
+
*** topic string.
|
108
|
+
** without block:
|
109
|
+
*** event time.
|
110
|
+
|
111
|
+
* Parameter:
|
112
|
+
** at: 日時. Time または String オブジェクト. (default: nil)
|
113
|
+
** cron: 分、時、日、月、曜パターンのセット. (default: nil)
|
114
|
+
** year: 年. 範囲制限なしは拒否される. (default: nil)
|
115
|
+
** month: 月. 1..12, jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec. (default: nil)
|
116
|
+
** day: 日. 1..31. (default: nil)
|
117
|
+
** wday: 曜. 0..7, sun, mon, tue, wed, thr, fri, sat. (default: nil)
|
118
|
+
** hour: 時. 0..23. (default: nil)
|
119
|
+
** min: 分. 0..59. (default: nil)
|
120
|
+
** sec: 秒. 0..59. (default: 0)
|
121
|
+
** msec: ミリ秒. 0..999. (default: nil), ミリ秒が指定されたとき, 他のパラメータは無視される.
|
122
|
+
詳細では, ワイルドカードとして "*" を使用できる.
|
123
|
+
|
124
|
+
=== トピック名を得る.
|
125
|
+
|
126
|
+
[source,ruby]
|
127
|
+
----
|
128
|
+
TimeScheduler#topics
|
129
|
+
----
|
130
|
+
|
131
|
+
* Result:
|
132
|
+
** array of topics.
|
133
|
+
|
134
|
+
* Parameter:
|
135
|
+
** なし.
|
136
|
+
|
137
|
+
=== イベントを解除する.
|
138
|
+
|
139
|
+
[source,ruby]
|
140
|
+
----
|
141
|
+
TimeScheduler#cancel( *topics )
|
142
|
+
----
|
143
|
+
|
144
|
+
* Result:
|
145
|
+
** nil.
|
146
|
+
|
147
|
+
* Parameter:
|
148
|
+
** topic: topic for stop operation.
|
149
|
+
|
150
|
+
=== 稼働中か調べる.
|
151
|
+
|
152
|
+
[source,ruby]
|
153
|
+
----
|
154
|
+
TimeScheduler#active?
|
155
|
+
----
|
156
|
+
|
157
|
+
* Result:
|
158
|
+
** false/true.
|
159
|
+
|
160
|
+
* Parameter:
|
161
|
+
** なし.
|
162
|
+
|
163
|
+
=== すべてのイベントを一時停止する.
|
164
|
+
|
165
|
+
[source,ruby]
|
166
|
+
----
|
167
|
+
TimeScheduler#suspend
|
168
|
+
----
|
169
|
+
|
170
|
+
* Result:
|
171
|
+
* nil.
|
172
|
+
|
173
|
+
* Parameter:
|
174
|
+
** なし.
|
175
|
+
|
176
|
+
=== すべてのイベントを再開する.
|
177
|
+
|
178
|
+
[source,ruby]
|
179
|
+
----
|
180
|
+
TimeScheduler#resume
|
181
|
+
----
|
182
|
+
|
183
|
+
* Result:
|
184
|
+
** nil.
|
185
|
+
|
186
|
+
* Parameter:
|
187
|
+
** なし.
|
188
|
+
|
189
|
+
== 注意
|
190
|
+
|
191
|
+
地域時刻で計算しているため、夏時間の切り替わりにおいて期待しない挙動となる.
|
192
|
+
|
193
|
+
== 貢献
|
194
|
+
|
195
|
+
不具合報告とプルリクエストは GitHub https://github.com/arimay/time_cursor まで.
|
196
|
+
|
197
|
+
== ライセンス
|
198
|
+
|
199
|
+
この Gem は、 http://opensource.org/licenses/MIT[MITライセンス] の条件に基づいてオープンソースとして入手できる.
|