module Narrative::Scene

Public Class Methods

new(data) click to toggle source
# File lib/narrative/scene.rb, line 26
def initialize(data)
  validate!(data)

  @actors = cast!(data)
end

Public Instance Methods

perform(&block) click to toggle source
# File lib/narrative/scene.rb, line 32
def perform(&block)
  block.call principal
end

Private Instance Methods

cast!(data) click to toggle source
# File lib/narrative/scene.rb, line 44
def cast!(data)
  roles.each_with_object({}) do |role_definition, memo|
    memo[role_definition.name] = role_definition.cast!(data)
  end
end
validate!(data) click to toggle source
# File lib/narrative/scene.rb, line 38
def validate!(data)
  raise 'principal definition is required' unless self.class.method_defined?(:principal)
  raise 'data and role definition did not same' if data.keys.to_set != roles.map(&:name).to_set
  raise 'data did not allow to contain nil' if data.values.include?(nil)
end