Sha256: 190ea15b9379a2915bb08cd4056e3aae7c882861b1807c85faa278c0c71be79d

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

require_relative "associative"

module Administrate
  module Field
    class Polymorphic < BelongsTo
      def self.permitted_attribute(attr, _options = {})
        {attr => %i[type value]}
      end

      def associated_resource_grouped_options
        classes.map do |klass|
          [klass.to_s, candidate_resources_for(klass).map do |resource|
            [display_candidate_resource(resource), resource.to_global_id]
          end]
        end
      end

      def permitted_attribute
        {attribute => %i[type value]}
      end

      def selected_global_id
        data&.to_global_id
      end

      private

      def associated_dashboard(klass = data.class)
        "#{klass.name}Dashboard".constantize.new
      end

      def classes
        klasses = options.fetch(:classes, [])
        klasses.respond_to?(:call) ? klasses.call : klasses
      end

      private

      def order
        @_order ||= options.delete(:order)
      end

      def candidate_resources_for(klass)
        order ? klass.order(order) : klass.all
      end

      def display_candidate_resource(resource)
        associated_dashboard(resource.class).display_resource(resource)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
administrate-1.0.0.beta3 lib/administrate/field/polymorphic.rb
administrate-1.0.0.beta2 lib/administrate/field/polymorphic.rb
administrate-1.0.0.beta1 lib/administrate/field/polymorphic.rb