tmtms_timer 0.2.0 → 0.3.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: 7df92cefdc4388b0d077292793e1a4753c04a99d8028850d4cd8789af316c86d
4
- data.tar.gz: dc09b781bb90b0bcd7042cc4864907bfc54e85437641c5b59282638b66d3501e
3
+ metadata.gz: e9f3d60079ed5978997a58b2aa0cc2fae5dfeabf8e76cba7536eec4f67397cdf
4
+ data.tar.gz: ff386b2fea04c7da9a3e9e17ef781adaf90dd863089635b9b0ee4e55c585f421
5
5
  SHA512:
6
- metadata.gz: bbee610f65aac8c6914181fea649029a7ffafc95bb5aa194ead05f40824bd82cebef53408fa82edef2545d51e3b5567ac1d4c11c2faf42efc45fa1aed2a20a24
7
- data.tar.gz: 425a26c113c2ada50378a6a8f92f5894e2c75ab1c6cd7e6484811488072cd34f49426125bd35e6e6d3edff13c497506a6abcfadca7f8a405fc6ac994803f9baf
6
+ metadata.gz: f03ffd1613106842d7c6c2b6d82fb0c9045a1e36e93670ce79816cc084656c15b33389c263cbb4ccacab1cb940c90c8c15c43f6b850c8ba4e1735fc28d8e108c
7
+ data.tar.gz: b7793430bc906cc0f0fa5d4c0c291fe1553a49ca689226c2afee1d2780b1b93b3903258e7eb6fb021950570615bb0442732dffac50c8ca873b173e023013ce07
data/.rubocop.yml CHANGED
@@ -18,10 +18,15 @@ Layout/SpaceInsideBlockBraces:
18
18
  Enabled: false
19
19
 
20
20
  Metrics/AbcSize:
21
+ Max: 40
22
+
23
+ Metrics/BlockLength:
24
+ Exclude:
25
+ - 'spec/**/*'
21
26
  Max: 30
22
27
 
23
28
  Metrics/CyclomaticComplexity:
24
- Max: 20
29
+ Max: 30
25
30
 
26
31
  Metrics/MethodLength:
27
32
  Max: 40
@@ -35,6 +40,15 @@ Style/FrozenStringLiteralComment:
35
40
  Style/IfUnlessModifier:
36
41
  Enabled: false
37
42
 
43
+ Style/KeywordParametersOrder:
44
+ Enabled: false
45
+
46
+ Style/Next:
47
+ Enabled: false
48
+
49
+ Style/ParallelAssignment:
50
+ Enabled: false
51
+
38
52
  Style/StringLiterals:
39
53
  Enabled: false
40
54
 
data/lib/tmtms/timer.rb CHANGED
@@ -7,14 +7,16 @@ module Tmtms
7
7
  # t.set(1){puts "hoge"}
8
8
  # sleep 5 # puts "hoge" after 1 second.
9
9
  class Timer
10
+ # Timer job
10
11
  class Job
11
- attr_reader :time, :block
12
+ attr_accessor :time
13
+ attr_reader :repeat, :block
12
14
 
13
15
  # @param timer [Tmtms::Timer]
14
16
  # @param time [Time]
15
17
  # @param block [Proc]
16
- def initialize(timer:, time:, block:)
17
- @timer, @time, @block = timer, time, block
18
+ def initialize(timer:, time:, repeat: nil, block:)
19
+ @timer, @time, @repeat, @block = timer, time, repeat, block
18
20
  end
19
21
 
20
22
  # cancel this job.
@@ -33,17 +35,19 @@ module Tmtms
33
35
 
34
36
  # execute block after sec seconds.
35
37
  # @param sec [Numeric]
38
+ # @param repeat [Numeric] interval seconds
36
39
  # @return [Tmtms::Timer::Job] timer job
37
- def set(sec, &block)
38
- at(Time.now + sec, &block)
40
+ def set(sec, repeat: nil, &block)
41
+ at(Time.now + sec, repeat: repeat, &block)
39
42
  end
40
43
 
41
44
  # execute block at the specified time.
42
45
  # @param time [Time]
46
+ # @param repeat [Numeric] interval seconds
43
47
  # @return [Tmtms::Timer::Job] timer job
44
- def at(time, &block)
48
+ def at(time, repeat: nil, &block)
45
49
  @mutex.synchronize do
46
- job = Job.new(timer: self, time: time, block: block)
50
+ job = Job.new(timer: self, time: time, repeat: repeat, block: block)
47
51
  @jobs.push job
48
52
  @jobs.sort_by!(&:time)
49
53
  @wfd.syswrite('.')
@@ -51,6 +55,13 @@ module Tmtms
51
55
  end
52
56
  end
53
57
 
58
+ # repeat block every sec seconds.
59
+ # @param sec [Numeric] interval seconds
60
+ # @return [Tmtms::Timer::Job] timer job
61
+ def repeat(sec, &block)
62
+ at(Time.now, repeat: sec, &block)
63
+ end
64
+
54
65
  # cancle the timer.
55
66
  # @param job [Tmtms::Timer::Job] timer job
56
67
  # @return [Tmtms::Timer::Job] if the job was available.
@@ -74,11 +85,22 @@ module Tmtms
74
85
  @rfd.sysread(1)
75
86
  end
76
87
  loop do
88
+ job = nil
77
89
  block = @mutex.synchronize do
78
- @jobs.shift.block if @jobs[0] && @jobs[0].time <= Time.now
90
+ if @jobs[0] && @jobs[0].time <= Time.now
91
+ job = @jobs.shift
92
+ job.block
93
+ end
79
94
  end
80
95
  break unless block
81
96
  block.call
97
+ if job.repeat
98
+ @mutex.synchronize do
99
+ job.time = Time.now + job.repeat
100
+ @jobs.push job
101
+ @jobs.sort_by!(&:time)
102
+ end
103
+ end
82
104
  end
83
105
  end
84
106
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TmtmsTimer
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmtms_timer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TOMITA Masahiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-18 00:00:00.000000000 Z
11
+ date: 2022-08-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Timer
14
14
  email: