Class: Coupdoeil::Hovercard

Inherits:
AbstractController::Base
  • Object
show all
Includes:
AbstractController::Caching, AbstractController::Callbacks, AbstractController::Helpers, AbstractController::Logger, AbstractController::Rendering, AbstractController::Translation, ActionView::Layouts, ActionView::Rendering
Defined in:
app/models/coupdoeil/hovercard.rb,
app/models/coupdoeil/hovercard/setup.rb,
app/models/coupdoeil/hovercard/option.rb,
app/models/coupdoeil/hovercard/registry.rb,
app/models/coupdoeil/hovercard/options_set.rb,
app/models/coupdoeil/hovercard/option/cache.rb,
app/models/coupdoeil/hovercard/option/offset.rb,
app/models/coupdoeil/hovercard/option/loading.rb,
app/models/coupdoeil/hovercard/option/trigger.rb,
app/models/coupdoeil/hovercard/option/animation.rb,
app/models/coupdoeil/hovercard/option/placement.rb,
app/models/coupdoeil/hovercard/option/opening_delay.rb,
app/models/coupdoeil/hovercard/view_context_delegation.rb

Defined Under Namespace

Modules: ViewContextDelegation Classes: Option, OptionsSet, Registry, Setup

Constant Summary collapse

DoubleRenderError =
Class.new(::AbstractController::DoubleRenderError)

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params, cp_view_context) ⇒ Hovercard

Returns a new instance of Hovercard.



84
85
86
87
88
# File 'app/models/coupdoeil/hovercard.rb', line 84

def initialize(params, cp_view_context)
  super()
  @params = params
  @__cp_view_context = cp_view_context
end

Class Attribute Details

.registryObject (readonly)

Returns the value of attribute registry.



46
47
48
# File 'app/models/coupdoeil/hovercard.rb', line 46

def registry
  @registry
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



82
83
84
# File 'app/models/coupdoeil/hovercard.rb', line 82

def params
  @params
end

Class Method Details

.default_optionsObject



57
# File 'app/models/coupdoeil/hovercard.rb', line 57

def default_options(...) = default_options_for(DEFAULT_OPTIONS_KEY, ...)

.default_options_for(*action_names, **option_values) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'app/models/coupdoeil/hovercard.rb', line 59

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

.hovercard_resource_nameObject



48
# File 'app/models/coupdoeil/hovercard.rb', line 48

def hovercard_resource_name = @hovercard_resource_name ||= name.delete_suffix("Hovercard").underscore

.inherited(subclass) ⇒ Object



51
52
53
54
55
# File 'app/models/coupdoeil/hovercard.rb', line 51

def inherited(subclass)
  super
  Coupdoeil::Hovercard.registry.register(subclass.hovercard_resource_name, subclass)
  subclass.instance_variable_set(:@default_options_by_method, @default_options_by_method.dup)
end

.method_missing(method_name, *args) ⇒ Object

Raises:

  • (ArgumentError)


70
71
72
73
74
75
# File 'app/models/coupdoeil/hovercard.rb', line 70

def method_missing(method_name, *args, &)
  return super unless action_methods.include?(method_name.name)
  raise ArgumentError, "expected no arguments" if args.any?

  Setup.new(self).with_type(method_name)
end

.respond_to_missing?(method, include_all = false) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'app/models/coupdoeil/hovercard.rb', line 77

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

.withObject



49
# File 'app/models/coupdoeil/hovercard.rb', line 49

def with(...) = Setup.new(self).with_params(...)

Instance Method Details

#controllerObject



91
# File 'app/models/coupdoeil/hovercard.rb', line 91

def controller = @__cp_view_context.controller

#helpersObject



90
# File 'app/models/coupdoeil/hovercard.rb', line 90

def helpers = @__cp_view_context

#process(method_name) ⇒ Object



108
109
110
111
112
113
114
115
# File 'app/models/coupdoeil/hovercard.rb', line 108

def process(method_name, *)
  benchmark("processed hovercard #{self.class.hovercard_resource_name}/#{method_name}", silence: true) do
    ActiveSupport::Notifications.instrument("render_hovercard.coupdoeil") do
      super
      response_body || render(action_name)
    end
  end
end

#renderObject

Raises:



101
102
103
104
105
106
# File 'app/models/coupdoeil/hovercard.rb', line 101

def render(...)
  return super unless response_body

  raise DoubleRenderError, "Render was called multiple times in this action. \
Also note that render does not terminate execution of the action."
end

#view_contextObject



93
94
95
96
97
98
99
# File 'app/models/coupdoeil/hovercard.rb', line 93

def view_context
  super.tap do |context|
    context.extend ViewContextDelegation
    context.hovercard = self
    context.__cp_view_context = @__cp_view_context
  end
end