Sha256: 320e4a812ee6a5e6582b0580891140af0058fd416f276fbad5b5da2a76d745be

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

require 'active_support'

module ActiveEncode
  module Persistence
    extend ActiveSupport::Concern

    included do
      after_find do |encode|
        persist(persistence_model_attributes(encode))
      end

      after_create do |encode|
        persist(persistence_model_attributes(encode))
      end

      after_cancel do |encode|
        persist(persistence_model_attributes(encode))
      end

      after_reload do |encode|
        persist(persistence_model_attributes(encode))
      end
    end

    private

      def persist(encode_attributes)
        model = ActiveEncode::EncodeRecord.find_or_initialize_by(global_id: encode_attributes[:global_id])
        model.update(encode_attributes) # Don't fail if persisting doesn't succeed?
      end

      def persistence_model_attributes(encode)
        {
          global_id: encode.to_global_id.to_s,
          state: encode.state,
          adapter: encode.class.engine_adapter.class.name,
          title: encode.input.url.to_s,
          # Need to ensure that these values come through or else validations will fail
          created_at: encode.created_at,
          updated_at: encode.updated_at,
          raw_object: encode.to_json
        }
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

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