Sha256: 52bc7b9266f77004e4cbbad147b68fd583b34f27d16c653a6eb1bfdf9d4f3454

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 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 ? data.to_global_id : nil
      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-0.20.1 lib/administrate/field/polymorphic.rb
administrate-0.20.0 lib/administrate/field/polymorphic.rb
administrate-0.19.0 lib/administrate/field/polymorphic.rb