app/models/coupdoeil/hovercard/setup.rb



# frozen_string_literal: true

module Coupdoeil
  class Hovercard
    class Setup
      attr_reader :klass, :type, :params

      EMPTY_PARAMS = {}.freeze

      def initialize(klass)
        @klass = klass
        @type = nil
        @params = EMPTY_PARAMS
      end

      def default_options = klass.default_options_for(type)
      def identifier = "#{type}@#{klass.hovercard_resource_name}"
      def render_in(view_context) = klass.new(params, view_context).process(type)

      def with_type(type)
        @type = type
        self
      end

      def with_params(**params)
        @params = params
        self
      end

      def method_missing(method_name, *args, &)
        if klass.action_methods.include?(method_name.name)
          raise ArgumentError, "expected no arguments, given #{args.size}" if args.any?
          with_type(method_name)
        else
          super
        end
      end

      def respond_to_missing?(method, include_all = false)
        klass.action_methods.include?(method.name) || super
      end
    end
  end
end