class Coupdoeil::Popover
def controller = @__cp_view_context.controller
def controller = @__cp_view_context.controller
def default_options(...) = default_options_for(DEFAULT_OPTIONS_KEY, ...)
def default_options(...) = default_options_for(DEFAULT_OPTIONS_KEY, ...)
def default_options_for(*action_names, **option_values)
def default_options_for(*action_names, **option_values) if option_values.blank? @default_options_by_method[action_names.first] || default_options else action_names.each do |action_name| options = @default_options_by_method[action_name] || default_options @default_options_by_method[action_name] = options.merge(OptionsSet.new(option_values)) end end end
def helpers = @__cp_view_context
def helpers = @__cp_view_context
def inherited(subclass)
def inherited(subclass) super Coupdoeil::Popover.registry.register(subclass.popover_resource_name, subclass) subclass.instance_variable_set(:@default_options_by_method, @default_options_by_method.dup) end
def initialize(params, cp_view_context)
def initialize(params, cp_view_context) super() @params = params @__cp_view_context = cp_view_context end
def method_missing(method_name, *args, &)
def method_missing(method_name, *args, &) return super unless action_methods.include?(method_name.name) action_methods.each do |action_name| define_singleton_method(action_name) { setup_class.new(self).with_type(action_name) } end public_send(method_name) d
def popover_resource_name = @popover_resource_name ||= name.delete_suffix("Popover").underscore
def popover_resource_name = @popover_resource_name ||= name.delete_suffix("Popover").underscore
def process(method_name, *)
def process(method_name, *) benchmark("processed popover #{self.class.popover_resource_name}/#{method_name}", silence: true) do ActiveSupport::Notifications.instrument("render_popover.coupdoeil") do super response_body || render(action_name) end end end
def render(...)
def render(...) return super unless response_body raise DoubleRenderError, "Render was called multiple times in this action. \ note that render does not terminate execution of the action." end
def respond_to_missing?(method, include_all = false)
def respond_to_missing?(method, include_all = false) action_methods.include?(method.name) || super end
def setup_class
def setup_class @setup_class ||= begin setup_klass = Class.new(Setup) action_methods.each do |action_name| setup_klass.define_method(action_name) { with_type(action_name) } end setup_klass end end
def view_context
def view_context super.tap do |context| context.extend ViewContextDelegation context.popover = self context.__cp_view_context = @__cp_view_context end end
def with(...) = setup_class.new(self).with_params(...)
def with(...) = setup_class.new(self).with_params(...)