Class: HeadMusic::Content::Credits
- Inherits:
-
Object
- Object
- HeadMusic::Content::Credits
- Includes:
- Enumerable, ValueEquality
- Defined in:
- lib/head_music/content/credits.rb
Overview
The credits attaching at one level — work, project, or publication — and the single place the level constraint is enforced.
Constant Summary collapse
Instance Attribute Summary collapse
-
#credits ⇒ Object
readonly
Returns the value of attribute credits.
-
#level ⇒ Object
readonly
Returns the value of attribute level.
Class Method Summary collapse
Instance Method Summary collapse
-
#==(other) ⇒ Object
(also: #eql?)
included
from ValueEquality
-
#add(person, role) ⇒ Object
-
#each ⇒ Object
-
#empty? ⇒ Boolean
-
#ensure_credit(credit) ⇒ Object
private
-
#for(role) ⇒ Object
-
#hash ⇒ Object
included
from ValueEquality
-
#initialize(level, credits = []) ⇒ Credits
constructor
A new instance of Credits.
-
#names(role) ⇒ Object
-
#size ⇒ Object
-
#to_h ⇒ Object
-
#validate_level(credit) ⇒ Object
private
Constructor Details
#initialize(level, credits = []) ⇒ Credits
Returns a new instance of Credits.
20 21 22 23 24 25 26 |
# File 'lib/head_music/content/credits.rb', line 20 def initialize(level, credits = []) @level = level&.to_sym raise ArgumentError, "unknown credit level: #{level.inspect}" unless LEVELS.include?(@level) @credits = Array(credits).map { |credit| ensure_credit(credit) }.freeze freeze end |
Instance Attribute Details
#credits ⇒ Object (readonly)
Returns the value of attribute credits.
16 17 18 |
# File 'lib/head_music/content/credits.rb', line 16 def credits @credits end |
#level ⇒ Object (readonly)
Returns the value of attribute level.
16 17 18 |
# File 'lib/head_music/content/credits.rb', line 16 def level @level end |
Class Method Details
.from_h(array, level:) ⇒ Object
12 13 14 |
# File 'lib/head_music/content/credits.rb', line 12 def self.from_h(array, level:) new(level, Array(array)) end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql? Originally defined in module ValueEquality
#add(person, role) ⇒ Object
32 33 34 |
# File 'lib/head_music/content/credits.rb', line 32 def add(person, role) self.class.new(level, credits + [HeadMusic::Content::Credit.new(person: person, role: role)]) end |
#each ⇒ Object
28 29 30 |
# File 'lib/head_music/content/credits.rb', line 28 def each(&) credits.each(&) end |
#empty? ⇒ Boolean
45 46 47 |
# File 'lib/head_music/content/credits.rb', line 45 def empty? credits.empty? end |
#ensure_credit(credit) ⇒ Object (private)
59 60 61 62 63 |
# File 'lib/head_music/content/credits.rb', line 59 def ensure_credit(credit) credit = HeadMusic::Content::Credit.from_h(credit) if credit.is_a?(Hash) validate_level(credit) credit end |
#for(role) ⇒ Object
36 37 38 39 |
# File 'lib/head_music/content/credits.rb', line 36 def for(role) wanted = HeadMusic::Content::Role.get(role) credits.select { |credit| credit.role == wanted } end |
#hash ⇒ Object Originally defined in module ValueEquality
#names(role) ⇒ Object
41 42 43 |
# File 'lib/head_music/content/credits.rb', line 41 def names(role) self.for(role).map { |credit| credit.person.full_name } end |
#size ⇒ Object
49 50 51 |
# File 'lib/head_music/content/credits.rb', line 49 def size credits.size end |
#to_h ⇒ Object
53 54 55 |
# File 'lib/head_music/content/credits.rb', line 53 def to_h credits.map(&:to_h) end |
#validate_level(credit) ⇒ Object (private)
65 66 67 68 69 |
# File 'lib/head_music/content/credits.rb', line 65 def validate_level(credit) return if credit.role.level == level raise ArgumentError, "#{credit.role.key} is a #{credit.role.level} role, not a #{level} role" end |