lib/rev-api/models/order_request.rb in rev-api-1.0.3 vs lib/rev-api/models/order_request.rb in rev-api-1.0.4

- old
+ new

@@ -1,35 +1,48 @@ require 'rev-api/api_serializable' module Rev # OrderRequest is used for constructing order 'spec' in consumer code and passing it into. # It consists of three main elements: :payment, :transcription_options and :notification. - # You can also supply reference number and customer comment + # You can also supply priority, reference number, and customer comment # - # @note http://www.rev.com/api/ordersposttranscription, http://www.rev.com/api/ordersposttranslation + # @note http://www.rev.com/api/ordersposttranscription, http://www.rev.com/api/ordersposttranslation, http://www.rev.com/api/orderspostcaption class OrderRequest < ApiSerializable # see {Rev::Payment} attr_reader :payment # see {Rev::TranscriptionOptions} attr_reader :transcription_options # see {Rev::TranslationOptions} attr_reader :translation_options + + # see {Rev::CaptionOptions} + attr_reader :caption_options # see {Rev::Notification} attr_reader :notification # a reference number for the order meaningful for the client (optional) attr_reader :client_ref # a comment with any special messages about the order (optional) attr_reader :comment + + # a requested priority for the order, defaults to normal (optional) + attr_reader :priority + + # use to correctly set priority + PRIORITY = { + :normal => 'Normal', + :time_insensitivie => 'TimeInsensitivie' + } # @param payment [Payment] payment info # @param fields [Hash] of fields to initialize instance. See instance attributes for available fields. def initialize(payment, fields = {}) + fields = { :priority => PRIORITY[:normal] }.merge(fields) super fields @payment = payment end end @@ -82,27 +95,34 @@ # Credit Card class CreditCard < ApiSerializable attr_reader :number, :expiration_month, :expiration_year, :cardholder, :billing_address, :saved_id end - # Transcription options. This section contains the input media that must be transferred to our servers - # using a POST to /inputs, and are referenced using the URIs returned by that call. We also support external links. - # Following points explain usage of inputs: - # - For each input, you must provide either uri or external_link, but not both. If both or neither is provided, - # error is returned. - # - You should only provide an external_link if it links to page where the media can be found, rather than directly to - # the media file, and that we will not attempt to do anything with the link when the API call is made. - # This is in contrast to when you post to /inputs with a link to a media file - in that case we do download the file. - # So the external_link should only be used when you can't link to the media file directly. - # - The external_link can contain anything you want, but if it's a YouTube link, we will attempt to determine the - # duration of the video on that page. - # We also allow users of the api to specify if translation should be done using our Verbatim option (:verbatim => true) - # and to specify if Time stamps should be included (:timestamps => true). - class TranscriptionOptions < ApiSerializable - # Mandatory, contains list of media to transcribe. Must have at least one element. + # Superclass for the business-line options that handles capture and common validation of inputs. + class InputOptions < ApiSerializable + # Mandatory, contains list of inputs. Must have at least one element. attr_reader :inputs + # @param inputs [Array] list of inputs + # @param info [Hash] of fields to initialize instance. + def initialize(inputs, info = {}) + super info + raise(ArgumentError, "inputs must have at least one element") unless validate_inputs(inputs) + @inputs = inputs + end + + private + + def validate_inputs(inputs) + !inputs.nil? && inputs.length > 0 + end + end + + # Transcription options. This section contains the input media that must be transferred to our servers + # using a POST to /inputs, and are referenced using the URIs returned by that call. We also support external links. + # @see http://www.rev.com/api/ordersposttranscription + class TranscriptionOptions < InputOptions # Optional, should we transcribe the provided files verbatim? If true, # all filler words (i.e. umm, huh) will be included. attr_reader :verbatim # Optional, should we include timestamps? @@ -111,23 +131,20 @@ # @param inputs [Array] list of inputs # @param info [Hash] of fields to initialize instance. May contain: # - :verbatim => true/false # - :timestams => true/false def initialize(inputs, info = {}) - super info - @inputs = inputs + super inputs, info end end # Translation options. This section contains the input media that must be transferred to our # servers using a POST to /inputs, and are referenced using the URIs returned by that call. # For each media, word count must be specified. The language code for the source and desitination # languages must also be specified. - class TranslationOptions < ApiSerializable - # Mandatory, contains list of media to transcribe. Must have at least one element. - attr_reader :inputs - + # @see http://www.rev.com/api/ordersposttranslation + class TranslationOptions < InputOptions # Mandatory, source language code attr_reader :source_language_code # Mandatory, destination language code attr_reader :destination_language_code @@ -136,25 +153,51 @@ # @param info [Hash] of fields to initialize instance. May contain: # - :source_language_code # - :destination_language_code # @note For language codes refer to http://www.loc.gov/standards/iso639-2/php/code_list.php def initialize(inputs, info = {}) - super(info) - @inputs = inputs + super inputs, info end end + + # Caption options. This section contains the input media that must be transferred to our servers + # using a POST to /inputs, and are referenced using the URIs returned by that call. We also support external links. + # @see http://www.rev.com/api/orderspostcaption + class CaptionOptions < InputOptions + # Array of file formats the captions should be delivered as. (Optional, default is SubRip) + attr_reader :output_file_formats + # All supported output file formats + OUTPUT_FILE_FORMATS = { + :subrip => 'SubRip', + :scc => 'Scc', + :ttml => 'Ttml', + :qttext => 'QTtext' + } + + def initialize(inputs, info = {}) + super(inputs, info) + raise(ArgumentError, "invalid format(s)") unless validate_output_formats(info[:output_file_formats]) + end + + private + + def validate_output_formats(formats) + formats.nil? || formats.select{|f| !OUTPUT_FILE_FORMATS.has_value?(f) }.empty? + end + end + # Input for order (aka source file) class Input < ApiSerializable # Mandatory when used with {Rev::OrderRequest::TranslationInfo}, length of document, in words attr_reader :word_length # Length of audio, in minutes (mandatory in case of inability to determine it automatically). - # Used within {Rev::OrderRequest::TranscriptionInfo} + # Used within {Rev::OrderRequest::TranscriptionInfo} and {Rev::OrderRequest::CaptionInfo} attr_reader :audio_length # Mandatory, URI of the media, as returned from the call to POST /inputs. - # :external_link might substitute :uri for Transcription. + # :external_link might substitute :uri for Transcription or Caption. attr_reader :uri # External URL, if sources wasn't POSTed as input (YouTube, Vimeo, Dropbox, etc) attr_reader :external_link end