tmtms_timer 0.1.0 → 0.2.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: 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