tmtms_timer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23aec65ce6dc7f5c2b6d4159d37233880ad036b20279cf72397a0e7418e2142c
4
- data.tar.gz: '009f5abbf0e98ad066ae26bd024ad946d2998a4d31f557859e89d5f65411bfa3'
3
+ metadata.gz: 7df92cefdc4388b0d077292793e1a4753c04a99d8028850d4cd8789af316c86d
4
+ data.tar.gz: dc09b781bb90b0bcd7042cc4864907bfc54e85437641c5b59282638b66d3501e
5
5
  SHA512:
6
- metadata.gz: 10432a3fe57222646eb21f312af33fce7666b4a33e3af78f46ebd3e89e901437ce52bf3e424ca34ca199d628e76a4d90402f1944b0699a2ec5414acec8436f6d
7
- data.tar.gz: a01bd1219031563cbab3169db528686b63f88dfea75a236ec7b08ae52034cea656b12f94a2ad6a994d3457bc6f6ce406e64dee05ee13c6fb67257e499dabf92d
6
+ metadata.gz: bbee610f65aac8c6914181fea649029a7ffafc95bb5aa194ead05f40824bd82cebef53408fa82edef2545d51e3b5567ac1d4c11c2faf42efc45fa1aed2a20a24
7
+ data.tar.gz: 425a26c113c2ada50378a6a8f92f5894e2c75ab1c6cd7e6484811488072cd34f49426125bd35e6e6d3edff13c497506a6abcfadca7f8a405fc6ac994803f9baf
data/CHANGELOG.md CHANGED
@@ -1,4 +1,6 @@
1
- ## [Unreleased]
1
+ ## [0.2.0] - 2022-07-18
2
+
3
+ - set(), at(), cancel() returns Job.
2
4
 
3
5
  ## [0.1.0] - 2022-07-18
4
6
 
data/README.md CHANGED
@@ -32,8 +32,8 @@ sleep
32
32
  To cancel timer:
33
33
 
34
34
  ```ruby
35
- id = timer.set(10){puts "hoge"}
36
- timer.cancel(id)
35
+ job = timer.set(10){puts "hoge"}
36
+ job.cancel
37
37
  ```
38
38
 
39
39
  ## License
data/lib/tmtms/timer.rb CHANGED
@@ -7,41 +7,57 @@ module Tmtms
7
7
  # t.set(1){puts "hoge"}
8
8
  # sleep 5 # puts "hoge" after 1 second.
9
9
  class Timer
10
- Job = Struct.new(:id, :time, :block, keyword_init: true)
10
+ class Job
11
+ attr_reader :time, :block
12
+
13
+ # @param timer [Tmtms::Timer]
14
+ # @param time [Time]
15
+ # @param block [Proc]
16
+ def initialize(timer:, time:, block:)
17
+ @timer, @time, @block = timer, time, block
18
+ end
19
+
20
+ # cancel this job.
21
+ # @return [self]
22
+ def cancel
23
+ @timer.cancel(self)
24
+ end
25
+ end
11
26
 
12
27
  def initialize
13
28
  @rfd, @wfd = IO.pipe
14
29
  @jobs = [] #=> [job, ...]
15
30
  @mutex = Mutex.new
16
- @id = 0
17
31
  do_loop
18
32
  end
19
33
 
20
34
  # execute block after sec seconds.
21
35
  # @param sec [Numeric]
22
- # @return [Integer] timer ID
36
+ # @return [Tmtms::Timer::Job] timer job
23
37
  def set(sec, &block)
24
38
  at(Time.now + sec, &block)
25
39
  end
26
40
 
27
41
  # execute block at the specified time.
28
42
  # @param time [Time]
29
- # @return [Integer] timer ID
43
+ # @return [Tmtms::Timer::Job] timer job
30
44
  def at(time, &block)
31
45
  @mutex.synchronize do
32
- @id += 1
33
- @jobs.push Job.new(id: @id, time: time, block: block)
46
+ job = Job.new(timer: self, time: time, block: block)
47
+ @jobs.push job
34
48
  @jobs.sort_by!(&:time)
49
+ @wfd.syswrite('.')
50
+ return job
35
51
  end
36
- @wfd.syswrite('.')
37
- @id
38
52
  end
39
53
 
40
54
  # cancle the timer.
41
- # @param id [Integer] timer ID
42
- def cancel(id)
55
+ # @param job [Tmtms::Timer::Job] timer job
56
+ # @return [Tmtms::Timer::Job] if the job was available.
57
+ # @return [nil] if the job was not available.
58
+ def cancel(job)
43
59
  @mutex.synchronize do
44
- @jobs.delete_if{|job| job.id == id}
60
+ @jobs.delete(job)
45
61
  end
46
62
  end
47
63
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TmtmsTimer
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmtms_timer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TOMITA Masahiro