Class: Clef::Core::Staff

Inherits:
Object
  • Object
show all
Includes:
Metadata
Defined in:
lib/clef/core/staff.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Metadata

#metadata, #metadata=, #set_metadata, #update_metadata

Constructor Details

#initialize(id, name: nil, clef: Clef.new(:treble)) ⇒ Staff

Returns a new instance of Staff.

Parameters:

  • id (Symbol)
  • name (String, nil) (defaults to: nil)
  • clef (Clef) (defaults to: Clef.new(:treble))

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
21
22
23
# File 'lib/clef/core/staff.rb', line 14

def initialize(id, name: nil, clef: Clef.new(:treble))
  raise ArgumentError, "id must be provided" if id.nil?
  raise ArgumentError, "clef must be a Clef::Core::Clef" unless clef.is_a?(Clef)

  @id = id
  @name = name || id.to_s
  @clef = clef
  @measures = []
  @metadata = {}
end

Instance Attribute Details

#clefObject (readonly)

Returns the value of attribute clef.



8
9
10
# File 'lib/clef/core/staff.rb', line 8

def clef
  @clef
end

#idObject (readonly)

Returns the value of attribute id.



8
9
10
# File 'lib/clef/core/staff.rb', line 8

def id
  @id
end

#key_signatureObject

Returns the value of attribute key_signature.



9
10
11
# File 'lib/clef/core/staff.rb', line 9

def key_signature
  @key_signature
end

#nameObject (readonly)

Returns the value of attribute name.



8
9
10
# File 'lib/clef/core/staff.rb', line 8

def name
  @name
end

#time_signatureObject

Returns the value of attribute time_signature.



9
10
11
# File 'lib/clef/core/staff.rb', line 9

def time_signature
  @time_signature
end

Instance Method Details

#add_measure(measure) ⇒ Staff

Parameters:

Returns:

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
34
35
36
# File 'lib/clef/core/staff.rb', line 27

def add_measure(measure)
  raise ArgumentError, "measure must be a Clef::Core::Measure" unless measure.is_a?(Measure)
  raise ArgumentError, "duplicate measure number: #{measure.number}" if @measures.any? { |item| item.number == measure.number }
  if @measures.any? && measure.number < @measures.last.number
    raise ArgumentError, "measure numbers must be added in ascending order"
  end

  @measures << measure
  self
end

#measuresArray<Measure>

Returns:



39
40
41
# File 'lib/clef/core/staff.rb', line 39

def measures
  @measures.dup.freeze
end