musa-dsl 0.23.11 → 0.23.13

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/musa-dsl/datasets/gdv.rb +2 -2
  3. data/lib/musa-dsl/datasets/gdvd.rb +2 -1
  4. data/lib/musa-dsl/datasets/helper.rb +1 -1
  5. data/lib/musa-dsl/datasets/score/queriable.rb +43 -42
  6. data/lib/musa-dsl/datasets/score/render.rb +24 -20
  7. data/lib/musa-dsl/datasets/score/to-mxml/to-mxml.rb +120 -122
  8. data/lib/musa-dsl/generative/backboner.rb +2 -2
  9. data/lib/musa-dsl/generative/generative-grammar.rb +2 -0
  10. data/lib/musa-dsl/generative/markov.rb +1 -2
  11. data/lib/musa-dsl/generative/variatio.rb +6 -10
  12. data/lib/musa-dsl/logger/logger.rb +22 -22
  13. data/lib/musa-dsl/matrix/matrix.rb +3 -5
  14. data/lib/musa-dsl/midi/midi-recorder.rb +3 -4
  15. data/lib/musa-dsl/midi/midi-voices.rb +3 -3
  16. data/lib/musa-dsl/music/chords.rb +26 -29
  17. data/lib/musa-dsl/musicxml/builder/direction.rb +2 -2
  18. data/lib/musa-dsl/neumalang/neumalang.rb +25 -67
  19. data/lib/musa-dsl/neumas/array-to-neumas.rb +2 -2
  20. data/lib/musa-dsl/repl/repl.rb +1 -1
  21. data/lib/musa-dsl/sequencer/base-sequencer-implementation-every.rb +8 -8
  22. data/lib/musa-dsl/sequencer/base-sequencer-implementation-move.rb +49 -49
  23. data/lib/musa-dsl/sequencer/base-sequencer-implementation-play-helper.rb +2 -2
  24. data/lib/musa-dsl/sequencer/base-sequencer-implementation-play-timed.rb +2 -2
  25. data/lib/musa-dsl/sequencer/base-sequencer-implementation-play.rb +2 -2
  26. data/lib/musa-dsl/sequencer/base-sequencer-implementation.rb +2 -2
  27. data/lib/musa-dsl/sequencer/base-sequencer-tick-based.rb +4 -3
  28. data/lib/musa-dsl/sequencer/base-sequencer.rb +5 -5
  29. data/lib/musa-dsl/series/array-to-serie.rb +5 -3
  30. data/lib/musa-dsl/series/base-series.rb +2 -2
  31. data/lib/musa-dsl/series/buffer-serie.rb +0 -5
  32. data/lib/musa-dsl/series/main-serie-constructors.rb +6 -4
  33. data/lib/musa-dsl/series/main-serie-operations.rb +2 -2
  34. data/lib/musa-dsl/series/quantizer-serie.rb +46 -50
  35. data/lib/musa-dsl/series/series-composer.rb +6 -5
  36. data/lib/musa-dsl/series/timed-serie.rb +49 -48
  37. data/lib/musa-dsl/transcription/from-gdv-to-midi.rb +5 -7
  38. data/lib/musa-dsl/transcription/from-gdv-to-musicxml.rb +1 -4
  39. data/lib/musa-dsl/transcription/from-gdv.rb +1 -3
  40. data/lib/musa-dsl/transcription/transcription.rb +2 -4
  41. data/lib/musa-dsl/transport/input-midi-clock.rb +7 -4
  42. data/lib/musa-dsl/transport/transport.rb +10 -12
  43. data/lib/musa-dsl.rb +1 -1
  44. data/musa-dsl.gemspec +2 -2
  45. metadata +2 -2
@@ -1,13 +1,13 @@
1
1
  require_relative '../core-ext/smart-proc-binder'
2
2
  require_relative '../core-ext/with'
3
3
 
4
- using Musa::Extension::Arrayfy
5
-
6
4
  # TODO hacer que pueda funcionar en tiempo real? le vas suministrando seeds y le vas diciendo qué opción has elegido (p.ej. para hacer un armonizador en tiempo real)
7
5
  # TODO esto mismo sería aplicable en otros generadores? variatio/darwin? generative-grammar? markov?
8
6
 
9
7
  module Musa
10
8
  module Backboner
9
+ using Musa::Extension::Arrayfy
10
+
11
11
  class Backboner
12
12
  include Musa::Extension::With
13
13
 
@@ -1,5 +1,7 @@
1
1
  module Musa
2
2
  module GenerativeGrammar
3
+ # TODO: refactor & reorganize regarding use of include Musa::GenerativeGrammar problems as default consumption mode (it forces the consumer to have new public methods -P, PN- and class names -OptionElement-)
4
+
3
5
  extend self
4
6
 
5
7
  def N(content = nil, **attributes, &block)
@@ -6,7 +6,6 @@ module Musa
6
6
 
7
7
  module Markov
8
8
  class Markov
9
- include Musa::Extension::SmartProcBinder
10
9
  include Musa::Series::Serie.base
11
10
 
12
11
  def initialize(transitions:, start:, finish: nil, random: nil)
@@ -59,7 +58,7 @@ module Musa
59
58
  r >= accumulated - probability && r < accumulated }[0]
60
59
 
61
60
  when Proc
62
- procedure_binder = @procedure_binders[options] ||= SmartProcBinder.new(options)
61
+ procedure_binder = @procedure_binders[options] ||= Musa::Extension::SmartProcBinder::SmartProcBinder.new(options)
63
62
  @current = procedure_binder.call @history
64
63
  else
65
64
  raise ArgumentError, "Option #{option} is not allowed. Only Array, Hash or Proc are allowed."
@@ -2,16 +2,14 @@ require_relative '../core-ext/smart-proc-binder'
2
2
  require_relative '../core-ext/arrayfy'
3
3
  require_relative '../core-ext/with'
4
4
 
5
- using Musa::Extension::Arrayfy
6
- using Musa::Extension::ExplodeRanges
7
-
8
5
  # TODO: permitir definir un variatio a través de llamadas a métodos y/o atributos, además de a través del block del constructor
9
6
 
10
7
  module Musa
11
8
  module Variatio
12
- class Variatio
13
- include Musa::Extension::SmartProcBinder
9
+ using Musa::Extension::Arrayfy
10
+ using Musa::Extension::ExplodeRanges
14
11
 
12
+ class Variatio
15
13
  def initialize(instance_name, &block)
16
14
  raise ArgumentError, 'instance_name should be a symbol' unless instance_name.is_a?(Symbol)
17
15
  raise ArgumentError, 'block is needed' unless block
@@ -26,8 +24,8 @@ module Musa
26
24
  end
27
25
 
28
26
  def on(**values)
29
- constructor_binder = SmartProcBinder.new @constructor
30
- finalize_binder = SmartProcBinder.new @finalize if @finalize
27
+ constructor_binder = Musa::Extension::SmartProcBinder::SmartProcBinder.new @constructor
28
+ finalize_binder = Musa::Extension::SmartProcBinder::SmartProcBinder.new @finalize if @finalize
31
29
 
32
30
  run_fieldset = @fieldset.clone # TODO: verificar que esto no da problemas
33
31
 
@@ -202,8 +200,6 @@ module Musa
202
200
  private_constant :A2
203
201
 
204
202
  class B
205
- include Musa::Extension::SmartProcBinder
206
-
207
203
  attr_reader :parameter_name, :options, :affected_field_names, :blocks, :inner
208
204
 
209
205
  def initialize(parameter_name, options, affected_field_names, inner, blocks)
@@ -212,7 +208,7 @@ module Musa
212
208
  @affected_field_names = affected_field_names
213
209
  @inner = inner
214
210
 
215
- @procedures = blocks.collect { |proc| SmartProcBinder.new proc }
211
+ @procedures = blocks.collect { |proc| Musa::Extension::SmartProcBinder::SmartProcBinder.new proc }
216
212
  end
217
213
 
218
214
  def run(parameters_with_depth, parent_parameters = nil)
@@ -1,37 +1,37 @@
1
1
  require 'logger'
2
-
3
2
  require_relative '../core-ext/inspect-nice'
4
3
 
4
+ module Musa
5
+ module Logger
6
+ class Logger < ::Logger
7
+ using Musa::Extension::InspectNice
5
8
 
6
- module Musa; module Logger
7
- class Logger < ::Logger
8
- using Musa::Extension::InspectNice
9
-
10
- def initialize(sequencer: nil, position_format: nil)
11
- super STDERR, level: WARN
9
+ def initialize(sequencer: nil, position_format: nil)
10
+ super STDERR, level: WARN
12
11
 
13
- @sequencer = sequencer
14
- @position_format = position_format || 3.3
12
+ @sequencer = sequencer
13
+ @position_format = position_format || 3.3
15
14
 
16
15
 
17
- self.formatter = proc do |severity, time, progname, msg|
18
- level = "[#{severity}] " unless severity == 'DEBUG'
16
+ self.formatter = proc do |severity, time, progname, msg|
17
+ level = "[#{severity}] " unless severity == 'DEBUG'
19
18
 
20
- if msg
21
- position = if @sequencer
22
- integer_digits = @position_format.to_i
23
- decimal_digits = ((@position_format - integer_digits) * 10).round
19
+ if msg
20
+ position = if @sequencer
21
+ integer_digits = @position_format.to_i
22
+ decimal_digits = ((@position_format - integer_digits) * 10).round
24
23
 
25
- "%#{integer_digits + decimal_digits + 1}s: " % ("%.#{decimal_digits}f" % sequencer.position.to_f)
26
- end
24
+ "%#{integer_digits + decimal_digits + 1}s: " % ("%.#{decimal_digits}f" % sequencer.position.to_f)
25
+ end
27
26
 
28
- progname = "[#{progname}]" if progname
27
+ progname = "[#{progname}]" if progname
29
28
 
30
- "#{position}#{level}#{progname}#{' ' if position || level || progname}#{msg}\n"
31
- else
32
- "\n"
29
+ "#{position}#{level}#{progname}#{' ' if position || level || progname}#{msg}\n"
30
+ else
31
+ "\n"
32
+ end
33
33
  end
34
34
  end
35
35
  end
36
36
  end
37
- end; end
37
+ end
@@ -67,8 +67,6 @@ module Musa
67
67
  end
68
68
 
69
69
  refine ::Matrix do
70
- include Musa::Datasets
71
-
72
70
  def to_p(time_dimension:, keep_time: nil)
73
71
  decompose(self.to_a, time_dimension).collect do |points|
74
72
  line = []
@@ -76,7 +74,7 @@ module Musa
76
74
  start_point = points[0]
77
75
  start_time = start_point[time_dimension]
78
76
 
79
- line << start_point.clone.tap { |_| _.delete_at(time_dimension) unless keep_time; _ }.extend(Datasets::V)
77
+ line << start_point.clone.tap { |_| _.delete_at(time_dimension) unless keep_time; _ }.extend(Musa::Datasets::V)
80
78
 
81
79
  (1..points.size-1).each do |i|
82
80
  end_point = points[i]
@@ -84,12 +82,12 @@ module Musa
84
82
  end_time = end_point[time_dimension]
85
83
 
86
84
  line << end_time - start_time
87
- line << end_point.clone.tap { |_| _.delete_at(time_dimension) unless keep_time; _ }.extend(Datasets::V)
85
+ line << end_point.clone.tap { |_| _.delete_at(time_dimension) unless keep_time; _ }.extend(Musa::Datasets::V)
88
86
 
89
87
  start_time = end_time
90
88
  end
91
89
 
92
- line.extend(Datasets::P)
90
+ line.extend(Musa::Datasets::P)
93
91
  end
94
92
  end
95
93
 
@@ -36,8 +36,8 @@ module Musa
36
36
  @messages.each do |m|
37
37
  mm = m.message
38
38
 
39
- if mm.is_a?(MIDIMessage::NoteOn)
40
-
39
+ case mm
40
+ when MIDIMessage::NoteOn
41
41
  if last_note[mm.channel]
42
42
  notes << { position: last_note[mm.channel], channel: mm.channel, pitch: :silence, duration: m.position - last_note[mm.channel] }
43
43
  last_note.delete mm.channel
@@ -50,8 +50,7 @@ module Musa
50
50
 
51
51
  notes << note
52
52
 
53
- elsif mm.is_a?(MIDIMessage::NoteOff)
54
-
53
+ when MIDIMessage::NoteOff
55
54
  note_on[mm.channel] ||= {}
56
55
 
57
56
  note = note_on[mm.channel][mm.note]
@@ -4,11 +4,11 @@ require 'midi-message'
4
4
  require_relative '../core-ext/arrayfy'
5
5
  require_relative '../core-ext/array-explode-ranges'
6
6
 
7
- using Musa::Extension::Arrayfy
8
- using Musa::Extension::ExplodeRanges
9
-
10
7
  module Musa
11
8
  module MIDIVoices
9
+ using Musa::Extension::Arrayfy
10
+ using Musa::Extension::ExplodeRanges
11
+
12
12
  class MIDIVoices
13
13
  attr_accessor :do_log
14
14
 
@@ -1,10 +1,10 @@
1
1
  require_relative 'scales'
2
2
  require_relative 'chord-definition'
3
3
 
4
- using Musa::Extension::Arrayfy
5
-
6
4
  module Musa
7
5
  module Chords
6
+ using Musa::Extension::Arrayfy
7
+
8
8
  class Chord
9
9
  def initialize(name_or_notes_or_pitches = nil, # name | [notes] | [pitches]
10
10
  # definitory
@@ -51,7 +51,7 @@ module Musa
51
51
 
52
52
  allow_chromatic ||= scale.nil?
53
53
 
54
- if root && root.is_a?(Scales::NoteInScale)
54
+ if root&.is_a?(Scales::NoteInScale)
55
55
  root_pitch = root.pitch
56
56
  scale ||= root.scale
57
57
  end
@@ -98,29 +98,27 @@ module Musa
98
98
  # Eval definitory atributes
99
99
  #
100
100
 
101
- if _source.nil?
102
- @notes = compute_notes(name, root_pitch, scale, notes, pitches, features, allow_chromatic)
103
- else
104
- @notes = compute_notes_from_source(_source, name, root_pitch, scale, notes, pitches, features, allow_chromatic)
105
- end
101
+ @notes = if _source.nil?
102
+ compute_notes(name, root_pitch, scale, notes, pitches, features, allow_chromatic)
103
+ else
104
+ compute_notes_from_source(_source, name, root_pitch, scale, notes, pitches, features, allow_chromatic)
105
+ end
106
106
 
107
107
  # Eval adding / droping operations
108
108
  #
109
109
 
110
- if add
111
- add.each do |to_add|
112
- case to_add
113
- when NoteInScale
114
- @notes << to_add
115
- when Numeric # pitch increment
116
- pitch = root_pitch + to_add
117
- @notes << scale.note_of_pitch(pitch) || scale.chromatic.note_of_pitch(pitch)
118
- when Symbol # interval name
119
- pitch = root_pitch + scale.offset_of_interval(to_add)
120
- @notes << scale.note_of_pitch(pitch)
121
- else
122
- raise ArgumentError, "Can't recognize element to add #{to_add}"
123
- end
110
+ add&.each do |to_add|
111
+ case to_add
112
+ when NoteInScale
113
+ @notes << to_add
114
+ when Numeric # pitch increment
115
+ pitch = root_pitch + to_add
116
+ @notes << scale.note_of_pitch(pitch) || scale.chromatic.note_of_pitch(pitch)
117
+ when Symbol # interval name
118
+ pitch = root_pitch + scale.offset_of_interval(to_add)
119
+ @notes << scale.note_of_pitch(pitch)
120
+ else
121
+ raise ArgumentError, "Can't recognize element to add #{to_add}"
124
122
  end
125
123
  end
126
124
 
@@ -167,14 +165,14 @@ module Musa
167
165
 
168
166
  def name(name = nil)
169
167
  if name.nil?
170
- @chord_definition.name if @chord_definition
168
+ @chord_definition&.name
171
169
  else
172
170
  Chord.new(_source: self, name: name)
173
171
  end
174
172
  end
175
173
 
176
174
  def features
177
- @chord_definition.features if @chord_definition
175
+ @chord_definition&.features
178
176
  end
179
177
 
180
178
  def featuring(*values, allow_chromatic: nil, **hash)
@@ -220,18 +218,17 @@ module Musa
220
218
  def as_scale
221
219
  end
222
220
 
223
-
224
221
  def project_on_all(*scales, allow_chromatic: nil)
225
222
  # TODO add match to other chords... what does it means?
226
223
  allow_chromatic ||= false
227
224
 
228
225
  note_sets = {}
229
226
  scales.each do |scale|
230
- if allow_chromatic
231
- note_sets[scale] = @notes.values.flatten(1).collect { |n| n.on(scale) || n.on(scale.chromatic) }
227
+ note_sets[scale] = if allow_chromatic
228
+ @notes.values.flatten(1).collect { |n| n.on(scale) || n.on(scale.chromatic) }
232
229
  else
233
- note_sets[scale] = @notes.values.flatten(1).collect { |n| n.on(scale) }
234
- end
230
+ @notes.values.flatten(1).collect { |n| n.on(scale) }
231
+ end
235
232
  end
236
233
 
237
234
  note_sets_in_scale = note_sets.values.reject { |notes| notes.include?(nil) }
@@ -1,12 +1,12 @@
1
1
  require_relative '../../core-ext/with'
2
2
  require_relative 'helper'
3
3
 
4
- using Musa::Extension::Arrayfy
5
-
6
4
  module Musa
7
5
  module MusicXML
8
6
  module Builder
9
7
  module Internal
8
+ using Musa::Extension::Arrayfy
9
+
10
10
  class Direction
11
11
  extend Musa::Extension::AttributeBuilder
12
12
  include Musa::Extension::With
@@ -11,64 +11,49 @@ module Musa
11
11
  module Grammar; end
12
12
 
13
13
  module Sentences
14
- include Musa::Series
15
- include Musa::Neumas
16
-
17
14
  def value
18
- S(*captures(:expression).collect(&:value)).extend(Neuma::Serie)
15
+ Musa::Series::Constructors.S(*captures(:expression).collect(&:value)).extend(Musa::Neumas::Neuma::Serie)
19
16
  end
20
17
  end
21
18
 
22
19
  module BracketedBarSentences
23
- include Musa::Series
24
- include Musa::Neumas
25
-
26
20
  def value
27
21
  { kind: :parallel,
28
22
  parallel: [{ kind: :serie,
29
23
  serie: S(*capture(:aa).value) }] +
30
- captures(:bb).collect { |c| { kind: :serie, serie: S(*c.value) } }
31
- }.extend(Neuma::Parallel)
24
+ captures(:bb).collect { |c| { kind: :serie, serie: Musa::Series::Constructors.S(*c.value) } }
25
+ }.extend(Musa::Neumas::Neuma::Parallel)
32
26
  end
33
27
  end
34
28
 
35
29
  module BracketedSentences
36
- include Musa::Series
37
- include Musa::Neumas
38
-
39
30
  def value
40
31
  { kind: :serie,
41
- serie: S(*capture(:sentences).value) }.extend Neuma
32
+ serie: Musa::Series::Constructors.S(*capture(:sentences).value) }.extend Musa::Neumas::Neuma
42
33
  end
43
34
  end
44
35
 
45
36
  module ReferenceExpression
46
- include Musa::Neumas
47
-
48
37
  def value
49
38
  { kind: :reference,
50
- reference: capture(:expression).value }.extend Neuma
39
+ reference: capture(:expression).value }.extend Musa::Neumas::Neuma
51
40
  end
52
41
  end
53
42
 
54
43
  module VariableAssign
55
- include Musa::Neumas
56
-
57
44
  def value
58
45
  { kind: :assign_to,
59
46
  assign_to: captures(:use_variable).collect { |c| c.value[:use_variable] },
60
47
  assign_value: capture(:expression).value
61
- }.extend Neuma
48
+ }.extend Musa::Neumas::Neuma
62
49
  end
63
50
  end
64
51
 
65
52
  module Event
66
- include Musa::Neumas
67
-
68
53
  def value
69
54
  { kind: :event,
70
55
  event: capture(:name).value.to_sym
71
- }.merge(capture(:parameters) ? capture(:parameters).value : {}).extend Neuma
56
+ }.merge(capture(:parameters) ? capture(:parameters).value : {}).extend Musa::Neumas::Neuma
72
57
  end
73
58
  end
74
59
 
@@ -104,40 +89,31 @@ module Musa
104
89
  end
105
90
 
106
91
  module BracedCommand
107
- include Musa::Neumas
108
-
109
92
  def value
110
93
  { kind: :command,
111
94
  command: eval("proc { #{capture(:complex_command).value.strip} }")
112
- }.merge(capture(:parameters) ? capture(:parameters).value : {}).extend Neuma
95
+ }.merge(capture(:parameters) ? capture(:parameters).value : {}).extend Musa::Neumas::Neuma
113
96
  end
114
97
  end
115
98
 
116
99
  module CallMethodsExpression
117
- include Musa::Neumas
118
-
119
100
  def value
120
101
  { kind: :call_methods,
121
102
  call_methods: captures(:method_call).collect(&:value),
122
- on: capture(:object_expression).value }.extend Neuma
103
+ on: capture(:object_expression).value }.extend Musa::Neumas::Neuma
123
104
  end
124
105
  end
125
106
 
126
107
  module UseVariable
127
- include Musa::Neumas
128
-
129
108
  def value
130
109
  { kind: :use_variable,
131
- use_variable: "@#{capture(:name).value}".to_sym }.extend Neuma
110
+ use_variable: "@#{capture(:name).value}".to_sym }.extend Musa::Neumas::Neuma
132
111
  end
133
112
  end
134
113
 
135
114
  module NeumaAsAttributes
136
- include Musa::Neumas
137
- include Musa::Datasets
138
-
139
115
  def value
140
- h = {}.extend GDVd
116
+ h = {}.extend Musa::Datasets::GDVd
141
117
 
142
118
  capture(:grade)&.value&.tap { |_| h.merge! _ if _ }
143
119
  capture(:octave)&.value&.tap { |_| h.merge! _ if _ }
@@ -147,46 +123,35 @@ module Musa
147
123
  h[:modifiers] = {} unless captures(:modifiers).empty?
148
124
  captures(:modifiers).collect(&:value).each { |_| h[:modifiers].merge! _ if _ }
149
125
 
150
- { kind: :gdvd, gdvd: h }.extend Neuma
126
+ { kind: :gdvd, gdvd: h }.extend Musa::Neumas::Neuma
151
127
  end
152
128
  end
153
129
 
154
130
  module PackedVector
155
- include Musa::Neumas
156
-
157
131
  def value
158
- { kind: :packed_v, packed_v: capture(:raw_packed_vector).value }.extend(Neuma)
132
+ { kind: :packed_v, packed_v: capture(:raw_packed_vector).value }.extend(Musa::Neumas::Neuma)
159
133
  end
160
134
  end
161
135
 
162
136
  module RawPackedVector
163
- include Musa::Datasets
164
-
165
137
  def value
166
- captures(:key_value).collect(&:value).to_h.extend(PackedV)
138
+ captures(:key_value).collect(&:value).to_h.extend(Musa::Datasets::PackedV)
167
139
  end
168
140
  end
169
141
 
170
142
  module Vector
171
- include Musa::Neumas
172
-
173
143
  def value
174
- { kind: :v, v: capture(:raw_vector).value }.extend(Neuma)
144
+ { kind: :v, v: capture(:raw_vector).value }.extend(Musa::Neumas::Neuma)
175
145
  end
176
146
  end
177
147
 
178
148
  module RawVector
179
- include Musa::Datasets
180
-
181
149
  def value
182
- captures(:raw_number).collect(&:value).extend(V)
150
+ captures(:raw_number).collect(&:value).extend(Musa::Datasets::V)
183
151
  end
184
152
  end
185
153
 
186
154
  module ProcessOfVectors
187
- include Musa::Datasets
188
- include Musa::Neumas
189
-
190
155
  def value
191
156
  durations_rest = []
192
157
  i = 0
@@ -198,8 +163,8 @@ module Musa
198
163
  i += 1
199
164
  end
200
165
 
201
- p = ([ capture(:first).value ] + durations_rest).extend(P)
202
- { kind: :p, p: p }.extend(Neuma)
166
+ p = ([ capture(:first).value ] + durations_rest).extend(Musa::Datasets::P)
167
+ { kind: :p, p: p }.extend(Musa::Neumas::Neuma)
203
168
  end
204
169
  end
205
170
 
@@ -326,39 +291,31 @@ module Musa
326
291
  end
327
292
 
328
293
  module Symbol
329
- include Musa::Neumas
330
-
331
294
  def value
332
295
  { kind: :value,
333
- value: capture(:name).value.to_sym }.extend Neuma
296
+ value: capture(:name).value.to_sym }.extend Musa::Neumas::Neuma
334
297
  end
335
298
  end
336
299
 
337
300
  module String
338
- include Musa::Neumas
339
-
340
301
  def value
341
302
  { kind: :value,
342
- value: capture(:everything_except_double_quote).value }.extend Neuma
303
+ value: capture(:everything_except_double_quote).value }.extend Musa::Neumas::Neuma
343
304
  end
344
305
  end
345
306
 
346
307
  module Number
347
- include Musa::Neumas
348
-
349
308
  def value
350
309
  { kind: :value,
351
- value: capture(:raw_number).value }.extend Neuma
310
+ value: capture(:raw_number).value }.extend Musa::Neumas::Neuma
352
311
  end
353
312
  end
354
313
 
355
314
  module Special
356
- include Musa::Neumas
357
-
358
315
  def value
359
316
  v = captures(0)
360
317
  { kind: :value,
361
- value: v == 'nil' ? nil : (v == 'true' ? true : false) }.extend Neuma
318
+ value: v == 'nil' ? nil : (v == 'true' ? true : false) }.extend Musa::Neumas::Neuma
362
319
  end
363
320
  end
364
321
  end
@@ -366,10 +323,11 @@ module Musa
366
323
  extend self
367
324
 
368
325
  def parse(string_or_file, decode_with: nil, debug: nil)
369
- if string_or_file.is_a? String
326
+ case string_or_file
327
+ when String
370
328
  match = Parser::Grammar::Grammar.parse string_or_file
371
329
 
372
- elsif string_or_file.is_a? File
330
+ when File
373
331
  match = Parser::Grammar::Grammar.parse string_or_file.read
374
332
 
375
333
  else