pads 1.0.0 → 1.1.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
  SHA256:
3
- metadata.gz: ef83cd4cd517c8201f18b8208a6adb8ca42d5dadef3e810c5007822662768b1f
4
- data.tar.gz: 77a457197b5c98ec963a95b2f62a6b9e1e59a2d69cdfd268112279e280248df5
3
+ metadata.gz: 942bd276399a7af1bf8ecb7a833f8bc9cb936051eaf0e3c656a026921dd8b1fe
4
+ data.tar.gz: 9e50d4235e2f9e419a124d9826f599b41090f1a48b8aeb00824cb2cb7e4ffb59
5
5
  SHA512:
6
- metadata.gz: 48cd6de1372be26d55b682c4de3ad1119c6855b588190f05ea1c9ce4b34412a15ccc851c760e8e8e388a5dd786f596b93e21bac9975f0c9011bc9d33e166101d
7
- data.tar.gz: 98939e84ce761264920b1a039ff62dd50fd31ee8a2c497b55467ede72a505f1a7ea7a163d6a181e6b2f005c956e83637c25d8ad890dc792ea42df1150cd72d20
6
+ metadata.gz: 329b4c43fac33e81d1fdbc35932212e7c68e37e58d426de0b54460b578bbc0bfa5b37bef99ac39881bd29d72f9b8cab6a5b1a78b2b9024776c440aa515b78678
7
+ data.tar.gz: 9a246144993e02bfc6bb3155603ae28b4cc1156fc5f16509db2e4ac22acb807612644432e364f0d70bcb78ef7bd887bcfd8e49dbb0dd8acc88939141026d81ca
data/lib/pads/pad.rb CHANGED
@@ -31,10 +31,15 @@ module Pads
31
31
  new_view
32
32
  end
33
33
 
34
- def pop_view
35
- raise 'You cannot pop the top level view' if @view_stack.one?
34
+ def pop_view(view = self.view)
35
+ index = @view_stack.index(view)
36
36
 
37
- change_view { @view_stack.shift }
37
+ raise ArgumentError, 'The given view is not part of the stack' if index.nil?
38
+ raise ArgumentError, 'You cannot pop the top level view' if view == @view_stack.last
39
+
40
+ indexes = 0..index
41
+ @view_stack[indexes].each &:cancel_beats
42
+ change_view { @view_stack.slice! indexes }
38
43
  end
39
44
 
40
45
  def with_view(new_view = PadView.new)
@@ -42,7 +47,7 @@ module Pads
42
47
  push_view new_view
43
48
  yield new_view
44
49
  ensure
45
- pop_view
50
+ pop_view new_view
46
51
  end
47
52
 
48
53
  def bind_events(source_dispatcher)
@@ -63,6 +68,19 @@ module Pads
63
68
 
64
69
  private
65
70
 
71
+ def method_missing(symbol, *args, &block)
72
+ view = self.view
73
+ if view.respond_to? symbol
74
+ view.__send__ symbol, *args, &block
75
+ else
76
+ super
77
+ end
78
+ end
79
+
80
+ def respond_to_missing?(symbol, *)
81
+ view.respond_to?(symbol) or super
82
+ end
83
+
66
84
  def change_view
67
85
  view&.delete_observer self
68
86
  yield
@@ -63,6 +63,8 @@ module Pads
63
63
  end
64
64
  end
65
65
 
66
+ alias << push
67
+
66
68
  # @return [Array<Pad, PadGroup>]
67
69
  def members
68
70
  @members.dup
data/lib/pads/pad_view.rb CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'pads/observable_pad_state'
4
4
 
5
+ require 'set'
6
+
5
7
  module Pads
6
8
  # Represents a stackable view of a pad
7
9
  class PadView < ObservablePadState
@@ -16,6 +18,7 @@ module Pads
16
18
 
17
19
  @events = Events::Dispatcher.new
18
20
  @button_handlers = []
21
+ @beats = Set.new.compare_by_identity
19
22
 
20
23
  @events.on :button_clicked do |event|
21
24
  @button_handlers[event.index]&.call
@@ -40,5 +43,22 @@ module Pads
40
43
  @button_handlers << handler
41
44
  self.buttons += [label]
42
45
  end
46
+
47
+ def beat(delay, delay_first: false)
48
+ Thread.new do
49
+ thread = Thread.current
50
+ @beats << thread
51
+ while @beats.include? thread
52
+ yield self unless delay_first
53
+ delay_first = false
54
+ sleep delay
55
+ end
56
+ end
57
+ end
58
+
59
+ def cancel_beats
60
+ @beats.clear
61
+ self
62
+ end
43
63
  end
44
64
  end
data/lib/pads/provider.rb CHANGED
@@ -24,6 +24,8 @@ module Pads
24
24
  @root.push(*args, &block)
25
25
  end
26
26
 
27
+ alias << push
28
+
27
29
  def wait
28
30
  @client.wait
29
31
  end
data/lib/pads/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pads
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/pads.rb CHANGED
@@ -7,9 +7,17 @@ require 'pads/live_array'
7
7
 
8
8
  # Provide pads to the Pads macOS app.
9
9
  module Pads
10
- def self.provide(*args)
10
+ def self.run(*args, &block)
11
+ loop do
12
+ run! *args, &block
13
+ rescue Errno::ECONNREFUSED
14
+ sleep 1
15
+ end
16
+ end
17
+
18
+ def self.run!(*args)
11
19
  provider = Provider.new(*args)
12
- yield provider
20
+ Thread.new { yield provider }
13
21
  provider.wait
14
22
  end
15
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pads
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil E. Pearson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-26 00:00:00.000000000 Z
11
+ date: 2022-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: interop
@@ -36,7 +36,6 @@ files:
36
36
  - ".ruby-version"
37
37
  - CODE_OF_CONDUCT.md
38
38
  - Gemfile
39
- - Gemfile.lock
40
39
  - LICENSE.txt
41
40
  - README.md
42
41
  - Rakefile
@@ -87,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
86
  - !ruby/object:Gem::Version
88
87
  version: '0'
89
88
  requirements: []
90
- rubygems_version: 3.3.7
89
+ rubygems_version: 3.0.9
91
90
  signing_key:
92
91
  specification_version: 4
93
92
  summary: Ruby client for the Pads macOS app
data/Gemfile.lock DELETED
@@ -1,66 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- pads (1.0.0)
5
- interop (~> 0.3.1)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- ast (2.4.2)
11
- diff-lcs (1.5.0)
12
- interop (0.3.1)
13
- parallel (1.21.0)
14
- parser (3.1.1.0)
15
- ast (~> 2.4.1)
16
- rainbow (3.1.1)
17
- rake (13.0.6)
18
- regexp_parser (2.2.1)
19
- rexml (3.2.5)
20
- rspec (3.11.0)
21
- rspec-core (~> 3.11.0)
22
- rspec-expectations (~> 3.11.0)
23
- rspec-mocks (~> 3.11.0)
24
- rspec-core (3.11.0)
25
- rspec-support (~> 3.11.0)
26
- rspec-expectations (3.11.0)
27
- diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.11.0)
29
- rspec-mocks (3.11.0)
30
- diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.11.0)
32
- rspec-support (3.11.0)
33
- rubocop (1.25.1)
34
- parallel (~> 1.10)
35
- parser (>= 3.1.0.0)
36
- rainbow (>= 2.2.2, < 4.0)
37
- regexp_parser (>= 1.8, < 3.0)
38
- rexml
39
- rubocop-ast (>= 1.15.1, < 2.0)
40
- ruby-progressbar (~> 1.7)
41
- unicode-display_width (>= 1.4.0, < 3.0)
42
- rubocop-ast (1.16.0)
43
- parser (>= 3.1.1.0)
44
- rubocop-rake (0.6.0)
45
- rubocop (~> 1.0)
46
- rubocop-rspec (2.9.0)
47
- rubocop (~> 1.19)
48
- ruby-progressbar (1.11.0)
49
- unicode-display_width (2.1.0)
50
-
51
- PLATFORMS
52
- x86_64-darwin-19
53
- x86_64-darwin-20
54
- x86_64-darwin-21
55
- x86_64-linux
56
-
57
- DEPENDENCIES
58
- pads!
59
- rake (~> 13.0)
60
- rspec (~> 3.0)
61
- rubocop (~> 1.21)
62
- rubocop-rake
63
- rubocop-rspec
64
-
65
- BUNDLED WITH
66
- 2.3.5