class Alda::Event
The class of elements of Alda::EventList#events
.
Attributes
The Alda::EventContainer
object that contains it. It may be nil
if there is not a container containing it, especially probably when it itself is an Alda::EventContainer
.
The Alda::EventList
object that contains it.
Note that it may not be directly contained, but with an Alda::EventContainer
object in the middle.
Public Instance Methods
Delete itself (or its topmost container if it has) from its parent
. If it is not at its parent
‘s end, raises Alda::OrderError
.
Here is a list of cases where the method is invoked:
-
Using the sequence sugar when operating an
Alda::EventList
. -
Using
Alda::EventContainer#/
to create chords or parts of multiple instruments. -
Using dot accessor of
Alda::Part
. SeeAlda::Part#method_missing
. -
Using the inline lisp sugar. See
Alda::InlineLisp
.
This method needs invoking in these cases because if an event is created using Alda::EventList
sugars (see Alda::EventList#method_missing
), it is automatically pushed to its parent
. However, the cases above requires the event be contained in another object.
The parameter except
specifies an Array
of classes. If parent
is an instance of any of the classes in except
, the method does nothing.
# File lib/alda-rb/event.rb, line 67 def detach_from_parent except = [] event = self event = event.container while event.container if @parent && except.none? { @parent.is_a? _1 } && event != (got = @parent.events.pop) raise Alda::OrderError.new event, got end end
Whether it is an event of the given class (klass
). By default, this is the same as +is_a?(klass)+. It is overridden in Alda::EventContainer
.
# File lib/alda-rb/event.rb, line 82 def is_event_of? klass is_a? klass end
The callback invoked when it is contained in an Alda::EventContainer
. It is overridden in Alda::InlineLisp
and Alda::EventList
. It is called in Alda::EventContainer#on_containing
.
class Alda::Note def on_contained super puts 'a note contained' end end Alda::Score.new { c } # => outputs "a note contained"
# File lib/alda-rb/event.rb, line 30 def on_contained end
Converts to alda code. To be overridden in subclasses.
# File lib/alda-rb/event.rb, line 38 def to_alda_code '' end