lounger 0.2.0 → 0.3.4

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
- SHA1:
3
- metadata.gz: 2f572c4da7be5b5c1b915afb600078b1c12735b6
4
- data.tar.gz: 56d0fe7aa98d512c2fb0c9dd6e105002811d1735
2
+ SHA256:
3
+ metadata.gz: 2f68fdc6654fca34e8985ed2f60cb76dcf5e08bd6d30fc164915debb01a73275
4
+ data.tar.gz: 5c5b902147bcf40b3d8b3d316f055cb4ddd0b6588be3801d42a3f25e44c0e90b
5
5
  SHA512:
6
- metadata.gz: f0af08df01820670c9b69a3bd08c8df9192534adbdfc4a36808a8834120599cc87c706e7c6e1cb85b259aa71f62d4ae63578dfdeefffad96dca96fa5a26e0043
7
- data.tar.gz: 79bc106a9c71ac210d0a3abe09c8e0effc3b5aad92c28fdcc3c296fe06a0aa19ececf507950601ee19b92fba73fdc3bd1cb73b203a9fc285288d6edd1e26d535
6
+ metadata.gz: d2055798672712fee16e6f9550b433b4395f1d448d86d822d68f039393d4b9dbd64143b90443fc6de187648f7e826fae8a68c74fe7595081510794ec5d33d76d
7
+ data.tar.gz: 0d893675cce811c0fa85de875a1d395aa1e4eea9b3d4169f0849e8d4b8d18c656da68e0091bdf945c35d2f86efb42890180290980a0ab8c2a12bf8f5bda446fb
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Lounger
2
- VERSION = "0.2.0"
4
+ VERSION = '0.3.4'
3
5
  end
data/lib/lounger.rb CHANGED
@@ -1,29 +1,61 @@
1
- require "lounger/version"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'lounger/version'
4
+
5
+ # The Lounger class is the main class which will allow to handle traps
6
+ # in simple way.
3
7
  class Lounger
4
- SIGNALS = ["INT", "TERM", "EXIT", "USR1", "QUIT"]
8
+ SIGNALS = %w[INT TERM EXIT USR1 QUIT].freeze
5
9
 
6
10
  def initialize(include_signals: [], exclude_signals: [])
7
- @lock = Mutex.new
8
- @condition = ConditionVariable.new
11
+ @lock = Mutex.new
12
+ @condition = ConditionVariable.new
13
+ @pending_signals = 0
14
+ @buffer = []
15
+ @idle = false
16
+
17
+ (SIGNALS + include_signals - exclude_signals).each do |s|
18
+ Signal.trap(s) { @condition.signal }
19
+ end
20
+ end
9
21
 
10
- (SIGNALS + include_signals - exclude_signals).each do |signal|
11
- Signal.trap(signal) { wakeup! }
22
+ def idle(ignore_pending: false)
23
+ result = nil
24
+ @lock.synchronize do
25
+ @pending_signals = 0 if ignore_pending
26
+ @idle = true
27
+
28
+ if @pending_signals.positive?
29
+ @pending_signals -= 1
30
+ else
31
+ @condition.wait(@lock)
32
+ @pending_signals -= 1
33
+ end
34
+
35
+ @idle = false
36
+ result = @buffer.shift
12
37
  end
38
+
39
+ result
13
40
  end
14
41
 
15
- def idle
16
- @lock.synchronize { @condition.wait(@lock) }
42
+ def idle?
43
+ @idle
17
44
  end
18
45
 
19
- def wakeup!
20
- @condition.signal
46
+ def wakeup!(value = nil)
47
+ @lock.synchronize do
48
+ @pending_signals += 1
49
+ @buffer << value
50
+ @condition.signal
51
+ end
21
52
  end
22
53
 
23
54
  def self.idle
24
55
  Lounger.new.idle
25
56
  end
26
57
 
58
+ alias_method :waiting?, :idle?
27
59
  alias_method :wait, :idle
28
60
  alias_method :signal, :wakeup!
29
- end
61
+ end
data/lounger.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.11"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec", "~> 3.0"
22
+ spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.33'
23
+ spec.add_development_dependency 'rake', '~> 13.0', '>= 12.3.3'
24
+ spec.add_development_dependency 'rspec', '~> 3.0'
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lounger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.4
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-02-23 00:00:00.000000000 Z
11
+ date: 2024-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '2.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.2.33
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.11'
29
+ version: '2.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.2.33
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '10.0'
39
+ version: '13.0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 12.3.3
34
43
  type: :development
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - "~>"
39
48
  - !ruby/object:Gem::Version
40
- version: '10.0'
49
+ version: '13.0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 12.3.3
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: rspec
43
55
  requirement: !ruby/object:Gem::Requirement
@@ -91,10 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
103
  - !ruby/object:Gem::Version
92
104
  version: '0'
93
105
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.4.6
106
+ rubygems_version: 3.4.10
96
107
  signing_key:
97
108
  specification_version: 4
98
109
  summary: A simple Ruby gem for current thread idling
99
110
  test_files: []
100
- has_rdoc: