lounger 0.2.0 → 0.3.4

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
- 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: