Sha256: d7cf73c980a488bbcff606025033e0071de847be5316aefa4c3901ae107387c7

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

require 'active_support'
require 'active_encode/callbacks'

module ActiveEncode
  module Core
    extend ActiveSupport::Concern

    included do
      # Encode Identifier
      attr_accessor :id

      # Encode input
      # @return ActiveEncode::Input
      attr_accessor :input

      # Encode output(s)
      # @return Array[ActiveEncode::Output]
      attr_accessor :output

      # Encode options
      attr_accessor :options

      attr_accessor :current_operations
      attr_accessor :percent_complete
    end

    module ClassMethods
      def default_options(_input_url)
        {}
      end

      def create(input_url, options = {})
        object = new(input_url, options)
        object.create!
      end

      def find(id)
        raise ArgumentError, 'id cannot be nil' unless id
        encode = new(nil)
        encode.run_callbacks :find do
          encode.send(:merge!, engine_adapter.find(id))
        end
      end
    end

    def initialize(input_url, options = nil)
      @input = Input.new.tap{ |input| input.url = input_url }
      @options = self.class.default_options(input_url).merge(Hash(options))
    end

    def create!
      run_callbacks :create do
        merge!(self.class.engine_adapter.create(self.input.url, self.options))
      end
    end

    def cancel!
      run_callbacks :cancel do
        merge!(self.class.engine_adapter.cancel(self.id))
      end
    end

    def reload
      run_callbacks :reload do
        merge!(self.class.engine_adapter.find(id))
      end
    end

    def created?
      !id.nil?
    end

    protected

      def merge!(encode)
        @id = encode.id
        @input = encode.input
        @output = encode.output
        @options = encode.options
        @state = encode.state
        @errors = encode.errors
        @created_at = encode.created_at
        @updated_at = encode.updated_at
        @current_operations = encode.current_operations
        @percent_complete = encode.percent_complete

        self
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
active_encode-0.5.0 lib/active_encode/core.rb
active_encode-0.4.1 lib/active_encode/core.rb
active_encode-0.4 lib/active_encode/core.rb