musa-dsl 0.26.6 → 0.26.8

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: 33fe7c69b6b470b2563a5bb631744c7d39c7adb83c21fa612d630b212e63d99b
4
- data.tar.gz: 18bd3611f80fcb47af81c4afc377f827bb18aa60702b491eb8e2d5edb4f70c16
3
+ metadata.gz: a1598e463290a813acd81f7d4c2a380c2b4f904c266505efb1c0c76295a2e891
4
+ data.tar.gz: 7b6c53ec4109d923f6aab5a1c250672b87a0c1bcc275c0e3359e769b01dd9371
5
5
  SHA512:
6
- metadata.gz: 35c3e1131b02666ee0f7db1dc596946a9b472738499b50139aea90fa1ecd468ff900378ce862fe6e9b31958dd94fbd8e1209cb23894a800ec8a1c888acb1cdd0
7
- data.tar.gz: 6b2c952e9388f77ceb296b008ed572420f0621a0d05ebb617cc7254d18b4b5e3cbd9c81dee87b22deecf864d953a99f1cf4353e40b0ce3fb072a67ef93baada1
6
+ metadata.gz: 8178a6d752685d3ae592c1e80374b85cba4f59ffdcc556d358d1f0c9a2787812421a74c6c247b890b80e05bf221ce3b490a60d2201361041419b0ca4e42f93cc
7
+ data.tar.gz: bfd208048b17a2e4f5374eedda0bd5dd5b2d6eb7268a867c63523477da6170f2a7a340d2dca8ab719467c58efd9662fed221118301d3d321c8176cb9785f380b
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
- ruby-version: ['2.7']
14
+ ruby-version: ['2.7.8']
15
15
 
16
16
  steps:
17
17
  - uses: actions/checkout@v2
@@ -32,31 +32,17 @@ jobs:
32
32
  packages: write
33
33
 
34
34
  steps:
35
- - uses: actions/checkout@v2
36
- - name: Set up Ruby 2.7
37
- uses: actions/setup-ruby@v1
35
+ - uses: actions/checkout@v3
36
+ - name: Set up Ruby 2.7.8
37
+ uses: ruby/setup-ruby@v1
38
38
  with:
39
- ruby-version: 2.7.x
40
-
41
- # - name: Publish to GPR
42
- # run: |
43
- # mkdir -p $HOME/.gem
44
- # touch $HOME/.gem/credentials
45
- # chmod 0600 $HOME/.gem/credentials
46
- # printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
47
- # gem build *.gemspec
48
- # gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
49
- # env:
50
- # GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
51
- # OWNER: ${{ github.repository_owner }}
39
+ ruby-version: 2.7.8
52
40
 
53
41
  - name: Publish to RubyGems
54
42
  run: |
55
43
  mkdir -p $HOME/.gem
56
44
  touch $HOME/.gem/credentials
57
45
  chmod 0600 $HOME/.gem/credentials
58
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
46
+ printf -- "---\n:rubygems_api_key: ${{secrets.GEM_HOST_API_KEY}}\n" > $HOME/.gem/credentials
59
47
  gem build *.gemspec
60
48
  gem push *.gem
61
- env:
62
- GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
data/Gemfile CHANGED
@@ -1,3 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+ gem 'rubocop', group: 'development'
5
+ gem 'rubocop', group: 'development'
6
+ gem 'rubocop', group: 'development'
@@ -29,36 +29,36 @@ module Musa
29
29
  @block.parameters
30
30
  end
31
31
 
32
- def call(*value_parameters, **key_parameters)
33
- _call value_parameters, key_parameters
32
+ def call(*value_parameters, **key_parameters, &block)
33
+ _call value_parameters, key_parameters, block
34
34
  end
35
35
 
36
- def _call(value_parameters, key_parameters = {})
36
+ def _call(value_parameters, key_parameters = {}, block = nil)
37
37
  if @on_rescue
38
38
  begin
39
- __call value_parameters, key_parameters
39
+ __call value_parameters, key_parameters, block
40
40
  rescue StandardError, ScriptError => e
41
41
  @on_rescue.call e
42
42
  end
43
43
  else
44
- __call value_parameters, key_parameters
44
+ __call value_parameters, key_parameters, block
45
45
  end
46
46
  end
47
47
 
48
- private def __call(value_parameters, key_parameters = {})
48
+ private def __call(value_parameters, key_parameters = {}, block = nil)
49
49
  effective_value_parameters, effective_key_parameters = apply(*value_parameters, **key_parameters)
50
50
 
51
51
  if effective_key_parameters.empty?
52
52
  if effective_value_parameters.empty?
53
- @block.call
53
+ @block.call(&block)
54
54
  else
55
- @block.call *effective_value_parameters
55
+ @block.call(*effective_value_parameters, &block)
56
56
  end
57
57
  else
58
58
  if effective_value_parameters.empty?
59
- @block.call **effective_key_parameters
59
+ @block.call(**effective_key_parameters, &block)
60
60
  else
61
- @block.call *effective_value_parameters, **effective_key_parameters
61
+ @block.call(*effective_value_parameters, **effective_key_parameters, &block)
62
62
  end
63
63
  end
64
64
  end
@@ -45,7 +45,7 @@ module Musa::Datasets
45
45
 
46
46
  NaturalKeys = (NaturalKeys +
47
47
  [:duration, # duration of the process (note reproduction, dynamics evolution, etc)
48
- :note_duration, # duration of the note (a staccato note is effectvely shorter than elapsed duration until next note)
48
+ :note_duration, # duration of the note (a staccato note is effectively shorter than elapsed duration until next note)
49
49
  :forward_duration # duration to wait until next event (if 0 means the next event should be executed at the same time than this one)
50
50
  ]).freeze
51
51
 
@@ -109,7 +109,7 @@ module Musa::Datasets
109
109
  r
110
110
  end
111
111
 
112
- def normalize_to_scale(scale, grade, sharps)
112
+ private def normalize_to_scale(scale, grade, sharps)
113
113
  note = scale[grade].sharp(sharps)
114
114
  background = note.background_note
115
115
 
@@ -284,7 +284,7 @@ module Musa
284
284
  freeze
285
285
  end
286
286
 
287
- def_delegators :@kind, :a_tuning
287
+ def_delegators :@kind, :tuning
288
288
 
289
289
  attr_reader :kind, :root_pitch
290
290
 
@@ -15,7 +15,7 @@ grammar Musa::Neumalang::Neumalang::Parser::Grammar::Grammar
15
15
 
16
16
  rule object_expression
17
17
  braced_command |
18
- reference_expression |
18
+ referenced_braced_command |
19
19
  bracketed_expression |
20
20
  use_variable |
21
21
  constant |
@@ -26,8 +26,8 @@ grammar Musa::Neumalang::Neumalang::Parser::Grammar::Grammar
26
26
  vector
27
27
  end
28
28
 
29
- rule reference_expression
30
- (ampersand optional_separation expression) <Musa::Neumalang::Neumalang::Parser::ReferenceExpression>
29
+ rule referenced_braced_command
30
+ (ampersand optional_separation braced_command) <Musa::Neumalang::Neumalang::Parser::ReferencedBracedCommand>
31
31
  end
32
32
 
33
33
  rule variable_assign
@@ -67,7 +67,13 @@ grammar Musa::Neumalang::Neumalang::Parser::Grammar::Grammar
67
67
  end
68
68
 
69
69
  rule parameters
70
- (lpar parameter (comma parameter)* optional_separation rpar) <Musa::Neumalang::Neumalang::Parser::Parameters>
70
+ (lpar parameter? (comma parameter)* optional_separation rpar codeblock?)
71
+ <Musa::Neumalang::Neumalang::Parser::Parameters>
72
+ end
73
+
74
+ rule codeblock
75
+ (ampersand lpar (braced_command | referenced_braced_command | use_variable) rpar)
76
+ <Musa::Neumalang::Neumalang::Parser::Codeblock>
71
77
  end
72
78
 
73
79
  rule parameter
@@ -33,10 +33,10 @@ module Musa
33
33
  end
34
34
  end
35
35
 
36
- module ReferenceExpression
36
+ module ReferencedBracedCommand
37
37
  def value
38
- { kind: :reference,
39
- reference: capture(:expression).value }.extend Musa::Neumas::Neuma
38
+ { kind: :command_reference,
39
+ command: capture(:braced_command).value }.extend Musa::Neumas::Neuma
40
40
  end
41
41
  end
42
42
 
@@ -74,10 +74,21 @@ module Musa
74
74
  {}.tap do |_|
75
75
  _[:value_parameters] = value_parameters unless value_parameters.empty?
76
76
  _[:key_parameters] = key_value_parameters unless key_value_parameters.empty?
77
+
78
+ _[:proc_parameter] = capture(:codeblock).value if capture(:codeblock)
77
79
  end
78
80
  end
79
81
  end
80
82
 
83
+ module Codeblock
84
+ def value
85
+ { codeblock:
86
+ capture(:braced_command)&.value ||
87
+ capture(:referenced_braced_command)&.value ||
88
+ capture(:use_variable)&.value }
89
+ end
90
+ end
91
+
81
92
  module Parameter
82
93
  def value
83
94
  if capture(:key_value_parameter)
@@ -119,7 +119,9 @@ module Musa
119
119
  send output: @connection, content: message&.to_s
120
120
  end
121
121
  else
122
- @logger.warn('REPL') { "trying to print a message in Atom client but the client is not connected. Ignoring message \'#{message} \'." }
122
+ @logger.warn('REPL') do
123
+ "trying to print a message in MusaLCE but the client is not connected. Ignoring message \'#{message} \'."
124
+ end
123
125
  end
124
126
  end
125
127
 
@@ -35,6 +35,7 @@ module Musa
35
35
  class AtModePlayEval < PlayEval
36
36
  def initialize(block_procedure_binder)
37
37
  @block_procedure_binder = block_procedure_binder
38
+ super()
38
39
  end
39
40
 
40
41
  def run_operation(element)
@@ -42,20 +43,22 @@ module Musa
42
43
 
43
44
  if element.is_a? Hash
44
45
  value = {
45
- current_operation: :block,
46
- current_block: @block_procedure_binder,
47
- current_parameter: element,
48
- continue_operation: :at,
49
- continue_parameter: element[:at]
46
+ current_operation: :block,
47
+ current_block: @block_procedure_binder,
48
+ current_parameter: element,
49
+ continue_operation: :at,
50
+ continue_parameter: element[:at]
50
51
  }
51
52
  end
52
53
 
53
54
  value ||= {
54
- current_operation: @block_procedure_binder,
55
- current_parameter: element,
56
- continue_operation: :at,
57
- continue_parameter: position
55
+ current_operation: @block_procedure_binder,
56
+ current_parameter: element,
57
+ continue_operation: :at,
58
+ continue_parameter: position
58
59
  }
60
+
61
+ value
59
62
  end
60
63
  end
61
64
 
@@ -66,6 +69,7 @@ module Musa
66
69
 
67
70
  def initialize(block_procedure_binder)
68
71
  @block_procedure_binder = block_procedure_binder
72
+ super()
69
73
  end
70
74
 
71
75
  def run_operation(element)
@@ -76,30 +80,30 @@ module Musa
76
80
  element = AbsD.to_AbsD(element)
77
81
 
78
82
  value = {
79
- current_operation: :block,
80
- current_block: @block_procedure_binder,
81
- current_parameter: element,
82
- continue_operation: :wait,
83
- continue_parameter: element.forward_duration
83
+ current_operation: :block,
84
+ current_block: @block_procedure_binder,
85
+ current_parameter: element,
86
+ continue_operation: :wait,
87
+ continue_parameter: element.forward_duration
84
88
  }
85
89
  end
86
90
 
87
91
  if element.key? :wait_event
88
92
  value = {
89
- current_operation: :block,
90
- current_block: @block_procedure_binder,
91
- current_parameter: element,
92
- continue_operation: :on,
93
- continue_parameter: element[:wait_event]
93
+ current_operation: :block,
94
+ current_block: @block_procedure_binder,
95
+ current_parameter: element,
96
+ continue_operation: :on,
97
+ continue_parameter: element[:wait_event]
94
98
  }
95
99
  end
96
100
  end
97
101
 
98
102
  value ||= {
99
- current_operation: :block,
100
- current_block: @block_procedure_binder,
101
- current_parameter: element,
102
- continue_operation: :now
103
+ current_operation: :block,
104
+ current_block: @block_procedure_binder,
105
+ current_parameter: element,
106
+ continue_operation: :now
103
107
  }
104
108
 
105
109
  value
@@ -115,8 +119,8 @@ module Musa
115
119
 
116
120
  @@id = 0
117
121
 
118
- attr_reader :neumalang_context
119
- attr_reader :block_procedure_binder
122
+ attr_reader :neumalang_context,
123
+ :block_procedure_binder
120
124
 
121
125
  def initialize(block_procedure_binder, decoder, nl_context, parent: nil)
122
126
  @id = @@id += 1
@@ -127,6 +131,8 @@ module Musa
127
131
  @nl_context = nl_context
128
132
 
129
133
  @nl_context ||= Object.new
134
+
135
+ super()
130
136
  end
131
137
 
132
138
  def subcontext
@@ -138,17 +144,17 @@ module Musa
138
144
  AbsD.to_AbsD(element)
139
145
  else
140
146
  case element[:kind]
141
- when :serie then eval_serie element[:serie]
142
- when :parallel then eval_parallel element[:parallel]
143
- when :assign_to then eval_assign_to element[:assign_to], element[:assign_value]
144
- when :use_variable then eval_use_variable element[:use_variable]
145
- when :command then eval_command element[:command], element[:value_parameters], element[:key_parameters]
146
- when :value then eval_value element[:value]
147
- when :gdvd then eval_gdvd element[:gdvd]
148
- when :p then eval_p element[:p]
149
- when :call_methods then eval_call_methods element[:on], element[:call_methods]
150
- when :reference then eval_reference element[:reference]
151
- when :event then element
147
+ when :serie then eval_serie element[:serie]
148
+ when :parallel then eval_parallel element[:parallel]
149
+ when :assign_to then eval_assign_to element[:assign_to], element[:assign_value]
150
+ when :use_variable then eval_use_variable element[:use_variable]
151
+ when :command then eval_command element[:command], element[:value_parameters], element[:key_parameters]
152
+ when :value then eval_value element[:value]
153
+ when :gdvd then eval_gdvd element[:gdvd]
154
+ when :p then eval_p element[:p]
155
+ when :call_methods then eval_call_methods element[:on], element[:call_methods]
156
+ when :command_reference then eval_command_reference element[:command]
157
+ when :event then element
152
158
  else
153
159
  raise ArgumentError, "eval_element: don't know how to process #{element}"
154
160
  end
@@ -197,10 +203,10 @@ module Musa
197
203
 
198
204
  def eval_command(block, value_parameters, key_parameters)
199
205
  _value_parameters = value_parameters ? value_parameters.collect { |e| subcontext.eval_element(e) } : []
200
- _key_parameters = key_parameters ? key_parameters.collect { |k, e| [k, subcontext.eval_element(e)] }.to_h : {}
206
+ _key_parameters = key_parameters ? key_parameters.transform_values { |e| subcontext.eval_element(e) } : {}
201
207
 
202
- # used instance_exec because the code on block comes from a neumalang source, so the correct execution context is the neumalang context
203
- # (no other context has any sense)
208
+ # used instance_exec because the code on block comes from a neumalang source, so the correct
209
+ # execution context is the neumalang context (no other context has any sense)
204
210
  #
205
211
  @nl_context.instance_exec *_value_parameters, **_key_parameters, &block
206
212
  end
@@ -211,38 +217,43 @@ module Musa
211
217
  value = play_eval.eval_element on
212
218
 
213
219
  if value.is_a? Parallel
214
- value.collect do |_value|
215
- call_methods.each do |methd|
216
- value_parameters = methd[:value_parameters] ? methd[:value_parameters].collect { |e| play_eval.subcontext.eval_element(e) } : []
217
- key_parameters = methd[:key_parameters] ? methd[:key_parameters].collect { |k, e| [k, play_eval.subcontext.eval_element(e)] }.to_h : {}
218
-
219
- _value = _value.send methd[:method], *value_parameters, **key_parameters
220
- end
221
-
222
- _value
223
- end.extend Parallel
220
+ value.collect { |_value| eval_methods(play_eval, _value, call_methods) }.extend Parallel
224
221
  else
225
- call_methods.each do |methd|
226
- value_parameters = methd[:value_parameters] ? methd[:value_parameters].collect { |e| play_eval.subcontext.eval_element(e) } : []
227
- key_parameters = methd[:key_parameters] ? methd[:key_parameters].collect { |k, e| [k, play_eval.subcontext.eval_element(e)] }.to_h : {}
222
+ eval_methods(play_eval, value, call_methods)
223
+ end
224
+ end
228
225
 
229
- value = value.send methd[:method], *value_parameters, **key_parameters
230
- end
226
+ def eval_methods(play_eval, value, methods)
227
+ methods.each do |methd|
228
+ value_parameters = methd[:value_parameters]&.collect { |e| play_eval.subcontext.eval_element(e) } || []
229
+ key_parameters = methd[:key_parameters]&.transform_values { |e| play_eval.subcontext.eval_element(e) } || {}
230
+ proc_parameter = eval_proc_parameter(methd[:proc_parameter][:codeblock]) if methd[:proc_parameter]
231
231
 
232
- value
232
+ value = value.send methd[:method], *value_parameters, **key_parameters, &proc_parameter
233
233
  end
234
+
235
+ value
236
+ end
237
+
238
+ def eval_command_reference(element)
239
+ element[:command]
234
240
  end
235
241
 
236
- def eval_reference(element)
237
- if element.is_a?(Hash) && element.key?(:kind)
242
+ def eval_proc_parameter(element)
243
+ case element
244
+ when Proc
245
+ element
246
+ when nil
247
+ nil
248
+ else
238
249
  case element[:kind]
250
+ when :use_variable
251
+ eval_proc_parameter(eval_use_variable(element[:use_variable]))
252
+ when :command_reference
253
+ eval_proc_parameter(element[:command])
239
254
  when :command
240
255
  element[:command]
241
- else
242
- raise ArgumentError, "eval_reference(&): don't know how to process element #{element}"
243
256
  end
244
- else
245
- raise ArgumentError, "eval_reference(&): don't know how to process element #{element}"
246
257
  end
247
258
  end
248
259
 
@@ -264,7 +275,7 @@ module Musa
264
275
 
265
276
  when Parallel
266
277
  { current_operation: :parallel_play,
267
- current_parameter: element.instance.tap { |e| e.each(&:restart) } }
278
+ current_parameter: element.tap { |e| e.each(&:restart) } }
268
279
 
269
280
  when Array
270
281
  { current_operation: :no_eval_play,
@@ -322,18 +333,15 @@ module Musa
322
333
  run_operation eval_use_variable(element[:use_variable])
323
334
 
324
335
  when :event
325
- value_parameters = element[:value_parameters] ?
326
- element[:value_parameters].collect { |e| subcontext.eval_element(e) } :
327
- []
328
-
329
- key_parameters = element[:key_parameters] ?
330
- element[:key_parameters].collect { |k, e| [k, subcontext.eval_element(e)] }.to_h :
331
- {}
336
+ value_parameters = element[:value_parameters]&.collect { |e| subcontext.eval_element(e) } || []
337
+ key_parameters = element[:key_parameters]&.transform_values { |e| subcontext.eval_element(e) } || {}
338
+ proc_parameter = eval_proc_parameter(element[:proc_parameter][:codeblock]) if element[:proc_parameter]
332
339
 
333
340
  { current_operation: :event,
334
341
  current_event: element[:event],
335
342
  current_value_parameters: value_parameters,
336
343
  current_key_parameters: key_parameters,
344
+ current_proc_parameter: proc_parameter,
337
345
  continue_operation: :now }
338
346
 
339
347
  when :command
@@ -343,7 +351,7 @@ module Musa
343
351
  run_operation eval_call_methods(element[:on], element[:call_methods])
344
352
 
345
353
  when :reference
346
- run_operation eval_reference(element[:reference])
354
+ run_operation eval_command_reference(element[:reference])
347
355
 
348
356
  else
349
357
  raise ArgumentError, "run_operation: don't know how to process #{element}"
@@ -44,6 +44,7 @@ module Musa::Sequencer
44
44
 
45
45
  case operation[:current_operation]
46
46
  when :none
47
+ # do nothing
47
48
  when :block
48
49
  # duplicating parameters as direct object value (operation[:current_parameter])
49
50
  # and key_passed parameters (**operation[:current_parameter])
@@ -55,7 +56,8 @@ module Musa::Sequencer
55
56
  when :event
56
57
  control._launch operation[:current_event],
57
58
  operation[:current_value_parameters],
58
- operation[:current_key_parameters]
59
+ operation[:current_key_parameters],
60
+ operation[:current_proc_parameter]
59
61
 
60
62
  when :play
61
63
  control2 = PlayControl.new control
@@ -102,7 +104,7 @@ module Musa::Sequencer
102
104
 
103
105
  control2.on :sync do
104
106
  counter -= 1
105
- _play serie, control, __play_eval: __play_eval, **mode_args if counter == 0
107
+ _play serie, control, __play_eval: __play_eval, **mode_args if counter.zero?
106
108
  end
107
109
  end
108
110
 
@@ -156,18 +158,18 @@ module Musa::Sequencer
156
158
  def store_continuation(sequencer:, serie:, neumalang_context:, mode:, decoder:, play_eval:, mode_args:)
157
159
  @continuation_sequencer = sequencer
158
160
  @continuation_parameters = {
159
- serie: serie,
160
- control: self,
161
- neumalang_context: neumalang_context,
162
- mode: mode,
163
- decoder: decoder,
164
- play_eval: play_eval,
165
- mode_args: mode_args }
161
+ serie: serie,
162
+ control: self,
163
+ neumalang_context: neumalang_context,
164
+ mode: mode,
165
+ decoder: decoder,
166
+ play_eval: play_eval,
167
+ mode_args: mode_args }
166
168
  end
167
169
 
168
170
  def continue
169
171
  super
170
- @continuation_sequencer.continuation_play(@continuation_parameters) if @continuation_sequencer
172
+ @continuation_sequencer&.continuation_play(@continuation_parameters)
171
173
  end
172
174
 
173
175
  def after(bars = nil, &block)
@@ -18,13 +18,13 @@ module Musa::Sequencer
18
18
  @event_handlers.push command[:parent_control]
19
19
 
20
20
  @tick_mutex.synchronize do
21
- command[:block].call *command[:value_parameters], **command[:key_parameters] if command[:block]
21
+ command[:block]&.call *command[:value_parameters], **command[:key_parameters]
22
22
  end
23
23
 
24
24
  @event_handlers.pop
25
25
  else
26
26
  @tick_mutex.synchronize do
27
- command[:block].call *command[:value_parameters], **command[:key_parameters] if command[:block]
27
+ command[:block]&.call *command[:value_parameters], **command[:key_parameters]
28
28
  end
29
29
  end
30
30
  end
@@ -72,7 +72,7 @@ module Musa::Sequencer
72
72
  key_parameters[:control] = control if block_key_parameters_binder.key?(:control)
73
73
 
74
74
  if at_position == @position
75
- @on_debug_at.each { |c| c.call } if @logger.sev_threshold >= ::Logger::Severity::DEBUG
75
+ @on_debug_at.each(&:call) if @logger.sev_threshold >= ::Logger::Severity::DEBUG
76
76
 
77
77
  begin
78
78
  locked = @tick_mutex.try_lock
@@ -169,24 +169,24 @@ module Musa::Sequencer
169
169
  @handlers[event][name] = { block: Musa::Extension::SmartProcBinder::SmartProcBinder.new(block), only_once: only_once }
170
170
  end
171
171
 
172
- def launch(event, *value_parameters, **key_parameters)
173
- _launch event, value_parameters, key_parameters
172
+ def launch(event, *value_parameters, **key_parameters, &proc_parameter)
173
+ _launch event, value_parameters, key_parameters, proc_parameter
174
174
  end
175
175
 
176
- def _launch(event, value_parameters = nil, key_parameters = nil)
176
+ def _launch(event, value_parameters = nil, key_parameters = nil, proc_parameter = nil)
177
177
  value_parameters ||= []
178
178
  key_parameters ||= {}
179
179
  processed = false
180
180
 
181
181
  if @handlers.key? event
182
182
  @handlers[event].each do |name, handler|
183
- handler[:block].call *value_parameters, **key_parameters
183
+ handler[:block].call *value_parameters, **key_parameters, &proc_parameter
184
184
  @handlers[event].delete name if handler[:only_once]
185
185
  processed = true
186
186
  end
187
187
  end
188
188
 
189
- @parent._launch event, value_parameters, key_parameters if @parent && !processed
189
+ @parent._launch event, value_parameters, key_parameters, proc_parameter if @parent && !processed
190
190
  end
191
191
 
192
192
  def inspect
@@ -2,8 +2,6 @@ require 'forwardable'
2
2
 
3
3
  require_relative '../core-ext/with'
4
4
 
5
- module TEMP; end
6
-
7
5
  module Musa
8
6
  module Sequencer
9
7
  class Sequencer
@@ -148,7 +148,12 @@ module Musa
148
148
  self.source = serie
149
149
  self.with_sources = with_series || []
150
150
  self.on_restart = on_restart
151
- self.proc = block if block
151
+
152
+ if block
153
+ self.proc = block
154
+ elsif !with_series
155
+ proc { |_| _ }
156
+ end
152
157
 
153
158
  @isolate_values = isolate_values
154
159
 
@@ -278,7 +283,8 @@ module Musa
278
283
  init
279
284
  end
280
285
 
281
- private def _restart
286
+ private :_restart
287
+ def _restart
282
288
  @source.restart
283
289
  if @sources.is_a? Array
284
290
  @sources.each(&:restart)
@@ -287,7 +293,8 @@ module Musa
287
293
  end
288
294
  end
289
295
 
290
- private def _next_value
296
+ private :_next_value
297
+ def _next_value
291
298
  value = nil
292
299
 
293
300
  index_or_key = @source.next_value
data/lib/musa-dsl.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Musa
2
- VERSION = '0.26.6.wip'.freeze
2
+ VERSION = '0.26.8'.freeze
3
3
  end
4
4
 
5
5
  require_relative 'musa-dsl/core-ext'
data/musa-dsl.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'musa-dsl'
3
- s.version = '0.26.6'
4
- s.date = '2022-02-26'
3
+ s.version = '0.26.8'
4
+ s.date = '2023-05-30'
5
5
  s.summary = 'A simple Ruby DSL for making complex music'
6
6
  s.description = 'Musa-DSL: A Ruby framework and DSL for algorithmic sound and musical thinking and composition'
7
7
  s.authors = ['Javier Sánchez Yeste']
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.required_ruby_version = '~> 2.7'
14
14
 
15
- # TODO
15
+ # TODO para sistema de paquetes de MusaDSL
16
16
  #s.metadata = {
17
17
  # "source_code_uri" => "https://",
18
18
  # "homepage_uri" => "",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: musa-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.6
4
+ version: 0.26.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Sánchez Yeste
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-26 00:00:00.000000000 Z
11
+ date: 2023-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -255,7 +255,7 @@ homepage: https://github.com/javier-sy/musa-dsl
255
255
  licenses:
256
256
  - LGPL-3.0
257
257
  metadata: {}
258
- post_install_message:
258
+ post_install_message:
259
259
  rdoc_options: []
260
260
  require_paths:
261
261
  - lib
@@ -271,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
271
  version: '0'
272
272
  requirements: []
273
273
  rubygems_version: 3.1.6
274
- signing_key:
274
+ signing_key:
275
275
  specification_version: 4
276
276
  summary: A simple Ruby DSL for making complex music
277
277
  test_files: []