time_scheduler 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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ライセンス] の条件に基づいてオープンソースとして入手できる.