# encoding: utf-8 module Punchblock module Component class Record < ComponentNode register :record, :record VALID_DIRECTIONS = [:duplex, :send, :recv].freeze # @return [String] the codec to use for recording attribute :format # @return [Integer] Controls how long the recognizer should wait after the end of the prompt for the caller to speak before sending a Recorder event. attribute :initial_timeout, Integer # @return [Integer] Controls the length of a period of silence after callers have spoken to conclude they finished. attribute :final_timeout, Integer # @return [Integer] Indicates the maximum duration for the recording. attribute :max_duration, Integer # @return [true, false] Indicates whether record will be preceded with a beep. attribute :start_beep, Boolean # @return [true, false] Indicates whether record will be followed by a beep. attribute :stop_beep, Boolean # @return [true, false] Whether subsequent record will start in PAUSE mode. attribute :start_paused, Boolean # @return [Symbol] the direction of media to be recorded. attribute :direction, Symbol def direction=(direction) if direction && !VALID_DIRECTIONS.include?(direction.to_sym) raise ArgumentError, "Invalid Direction (#{direction}), use: #{VALID_DIRECTIONS*' '}" end super end # @return [true, false] wether to mix audio down or not attribute :mix, Boolean def rayo_attributes { 'format' => format, 'initial-timeout' => initial_timeout, 'final-timeout' => final_timeout, 'max-duration' => max_duration, 'start-beep' => start_beep, 'stop-beep' => stop_beep, 'start-paused' => start_paused, 'direction' => direction, 'mix' => mix } end state_machine :state do event :paused do transition :executing => :paused end event :resumed do transition :paused => :executing end end # Pauses a running Record # # @return [Command::Record::Pause] an Rayo pause message for the current Record # # @example # record_obj.pause_action.to_xml # # returns: # def pause_action Pause.new :component_id => component_id, :target_call_id => target_call_id end ## # Sends an Rayo pause message for the current Record # def pause! raise InvalidActionError, "Cannot pause a Record that is not executing" unless executing? pause_action.tap do |action| result = write_action action paused! if result end end ## # Create an Rayo resume message for the current Record # # @return [Command::Record::Resume] an Rayo resume message # # @example # record_obj.resume_action.to_xml # # returns: # def resume_action Resume.new :component_id => component_id, :target_call_id => target_call_id end ## # Sends an Rayo resume message for the current Record # def resume! raise InvalidActionError, "Cannot resume a Record that is not paused." unless paused? resume_action.tap do |action| result = write_action action resumed! if result end end ## # Directly returns the recording for the component # @return [Punchblock::Component::Record::Recording] The recording object # def recording complete_event.recording end ## # Directly returns the recording URI for the component # @return [String] The recording URI # def recording_uri recording.uri end class Pause < CommandNode # :nodoc: register :pause, :record end class Resume < CommandNode # :nodoc: register :resume, :record end class Recording < Event register :recording, :record_complete attribute :uri attribute :duration, Integer attribute :size, Integer end class Complete class MaxDuration < Event::Complete::Reason register :'max-duration', :record_complete end class InitialTimeout < Event::Complete::Reason register :'initial-timeout', :record_complete end class FinalTimeout < Event::Complete::Reason register :'final-timeout', :record_complete end end end end end