Sha256: 7408da0d8e0eab32e46b6ac3d3b751e6185ce3c162a7a830c44e2e12e7d6b06e

Contents?: true

Size: 1.95 KB

Versions: 9

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true
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(input.url, options))
      end
    end

    def cancel!
      run_callbacks :cancel do
        merge!(self.class.engine_adapter.cancel(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

9 entries across 9 versions & 1 rubygems

Version Path
active_encode-1.2.3 lib/active_encode/core.rb
active_encode-1.2.2 lib/active_encode/core.rb
active_encode-1.2.1 lib/active_encode/core.rb
active_encode-1.2.0 lib/active_encode/core.rb
active_encode-1.1.3 lib/active_encode/core.rb
active_encode-1.1.2 lib/active_encode/core.rb
active_encode-1.1.1 lib/active_encode/core.rb
active_encode-1.1.0 lib/active_encode/core.rb
active_encode-1.0.0 lib/active_encode/core.rb