def want(*args, template: nil, &block)
      specification = Want.new

      if template
        specification.fps = template.fps.clone
        specification.references = template.references.clone
      end

      if block
        if block.arity < 1
          specification.instance_eval(&block)
        else
          block[specification]
        end
      end

      @wants << specification

      specification
    end
def want(*args, template: nil, &block)
      specification = Want.new

      if template
        specification.fps = template.fps.clone
        specification.references = template.references.clone
      end

      if block
        if block.arity < 1
          specification.instance_eval(&block)
        else
          block[specification]
        end
      end

      @wants << specification

      specification
    end
Adds a new {Want} specification to your job.

 @example Using a block without a variable (careful: the scope changes!)
   job.want do
     encoding('utf-8')
     file('path/to/my/output.srt')
     fps(23.976)
   end

 @example Using a block and providing a variable
   job.want do |want|
     want.encoding('utf-8')
     want.file('path/to/my/output.srt')
     want.fps((23.976)
   end

 @example Catching the reference and assigning things at any later point
   want = job.want
   want.encoding('utf-8')
   want.file('path/to/my/output.srt')
   want.fps((23.976)

 @example Cloning a previous specification and extending on it
   want2 = job.want(template: want1)
   want2.encoding('ISO-8859-1')
   want2.file('path/to/my/output.ass')

 @param template [Want] optionally you can specify another {Want} as a
   template, from which all properties but the file path are cloned
 @return [Want] a reference to the newly assigned {Want}