ztimer 0.3.2 → 0.4.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
  SHA1:
3
- metadata.gz: fdee2ef44fd94f88c72edc70f8187fc8c613c548
4
- data.tar.gz: 21e2b4829c19da9a68cc84b6b081eaf7b70f355e
3
+ metadata.gz: 6f141e0e904b09ba4e9479dfaa3a0ec47ed48ee3
4
+ data.tar.gz: 6c3ecec2bac2dd388b4eee8154187f14836cae22
5
5
  SHA512:
6
- metadata.gz: b6356a4042bf13560ef8785464c896fd789bf410f5c3134658fa7c4374107f6624b51d4d0925954ce0fc1f8f1059caf486cf058057cb406270a8bdd22f2098d0
7
- data.tar.gz: d1e4707c13e5d0927c5f460d462cb073a8727c4c74002fcf3ad5c9e0ff7c93e7b41dc7bc114068e268d341a45a9d6847d5ae802e8cb0ded0893e4948fc1e505f
6
+ metadata.gz: cc01e57fc11a70e3927f5643f0c639654d75c6f1bcea8aa6a56ca3f185a22476177430e1cc3098020c129900b8b516c3760aebf52edbaf57b8e72149139abf66
7
+ data.tar.gz: 017113396491866580b63ae0242ffbe2085427b1c55e2c45dfc0a5233f11b5f08e015c0e0006a931b39ac49536e564d72018ef148ca3594a78c37c7181f3521f
data/README.md CHANGED
@@ -27,10 +27,19 @@ is illustrated below:
27
27
  ```ruby
28
28
  require 'ztimer'
29
29
 
30
- delay = 5000 # milliseconds
30
+ delay = 1000 # milliseconds
31
31
  Ztimer.after(delay) do
32
32
  puts "Doing something useful..."
33
33
  end
34
+
35
+ # Recurrent jobs
36
+ job = Ztimer.every(delay) do # execute the block every second
37
+ puts "Executing a recurrent job..."
38
+ end
39
+
40
+ sleep 10 # wait for 10 seconds (10 executions)
41
+ job.cancel! # cancel the recurrent job
42
+
34
43
  ```
35
44
 
36
45
  By default **Ztimer** will run at maximum 20 notifications concurrently, so that if you have 100 notifications to be
data/lib/ztimer.rb CHANGED
@@ -22,7 +22,17 @@ module Ztimer
22
22
  def after(milliseconds, &callback)
23
23
  enqueued_at = @metric.utc_microseconds
24
24
  expires_at = enqueued_at + milliseconds * 1000
25
- slot = Slot.new(enqueued_at, expires_at, &callback)
25
+ slot = Slot.new(enqueued_at, expires_at, -1, &callback)
26
+
27
+ add(slot)
28
+
29
+ return slot
30
+ end
31
+
32
+ def every(milliseconds, &callback)
33
+ enqueued_at = @metric.utc_microseconds
34
+ expires_at = enqueued_at + milliseconds * 1000
35
+ slot = Slot.new(enqueued_at, expires_at, milliseconds * 1000, &callback)
26
36
 
27
37
  add(slot)
28
38
 
data/lib/ztimer/slot.rb CHANGED
@@ -1,18 +1,29 @@
1
1
 
2
2
  module Ztimer
3
3
  class Slot
4
- attr_reader :enqueued_at, :expires_at, :callback
4
+ attr_reader :enqueued_at, :expires_at, :recurrency, :callback
5
5
  attr_accessor :started_at, :executed_at
6
6
 
7
- def initialize(enqueued_at, expires_at, &callback)
7
+ def initialize(enqueued_at, expires_at,recurrency = -1, &callback)
8
8
  @enqueued_at = enqueued_at
9
9
  @expires_at = expires_at
10
+ @recurrency = recurrency
10
11
  @callback = callback
11
12
  @started_at = nil
12
13
  @executed_at = nil
13
14
  @canceled = false
14
15
  end
15
16
 
17
+ def recurrent?
18
+ return @recurrency > 0
19
+ end
20
+
21
+ def reset!
22
+ if recurrent?
23
+ @expires_at += recurrency
24
+ end
25
+ end
26
+
16
27
  def canceled?
17
28
  return @canceled
18
29
  end
@@ -1,3 +1,3 @@
1
1
  module Ztimer
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -66,7 +66,13 @@ module Ztimer
66
66
  if slot && (slot.expires_at < @metric.utc_microseconds)
67
67
  @slots.shift
68
68
  slot.started_at = @metric.utc_microseconds
69
- execute(slot) unless slot.canceled?
69
+ unless slot.canceled?
70
+ execute(slot)
71
+ if slot.recurrent?
72
+ slot.reset!
73
+ @slots << slot
74
+ end
75
+ end
70
76
  else
71
77
  slot = nil
72
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ztimer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Groza Sergiu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-23 00:00:00.000000000 Z
11
+ date: 2016-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -123,9 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  requirements: []
125
125
  rubyforge_project:
126
- rubygems_version: 2.4.6
126
+ rubygems_version: 2.4.8
127
127
  signing_key:
128
128
  specification_version: 4
129
129
  summary: An asyncrhonous timer
130
130
  test_files: []
131
- has_rdoc: