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.
@@ -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
@@ -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
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.7.1
6
+ before_install: gem install bundler -v 2.1.4
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in schedule_handler.gemspec
4
+ gemspec
@@ -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).
@@ -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ライセンス] の条件に基づいてオープンソースとして入手できる.