Sha256: 492a6f36a1e67bab03871085acbfdd07041b036e0de6403f864e7faae5ba8045

Contents?: true

Size: 1005 Bytes

Versions: 3

Compression:

Stored size: 1005 Bytes

Contents

require 'pina/models/uploaded_document'
require 'active_support/inflector'
require 'active_support/core_ext/hash/keys'

module Pina
  module Models
    class DocumentPairing
      include Virtus.model

      attribute :uploaded_document, ::Pina::Models::UploadedDocument

      attribute :document_pairable_type
      attribute :document_pairable_id

      attribute :created_at, DateTime

      def initialize(attributes = {}, *args)
        extend(Virtus.model)

        document_type = attributes.symbolize_keys[:document_pairable_type]
        document_pairable_attribute(document_type)

        super
      end

      private

      def document_pairable_attribute(document_type)
        return unless document_type

        attribute(:document_pairable, document_klass(document_type))
      end

      def document_klass(document_type)
        model = document_type.camelize
        return unless Pina::Models.const_defined?(model)

        Pina::Models.const_get(model)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pina-0.15.0 lib/pina/models/document_pairing.rb
pina-0.14.4 lib/pina/models/document_pairing.rb
pina-0.14.3 lib/pina/models/document_pairing.rb