class Rbexy::Component

Attributes

content_block[R]
view_context[R]

Public Class Methods

component_name() click to toggle source
# File lib/rbexy/component.rb, line 14
def self.component_name
  name.underscore
end
new(view_context, **props) click to toggle source
Calls superclass method
# File lib/rbexy/component.rb, line 22
def initialize(view_context, **props)
  super(
    view_context.lookup_context,
    view_context.assigns,
    view_context.controller
  )

  @view_context = view_context

  setup(**props)
end

Public Instance Methods

call() click to toggle source
# File lib/rbexy/component.rb, line 44
def call
  path = TemplatePath.new(component_name)
  template = view_context.lookup_context.find(path)
  template.render(self, {})
rescue ActionView::Template::Error => error
  error.set_backtrace clean_template_backtrace(error.backtrace)
  raise error
end
compiled_method_container() click to toggle source
# File lib/rbexy/component.rb, line 57
def compiled_method_container
  Rbexy::Component
end
component_name() click to toggle source
# File lib/rbexy/component.rb, line 18
def component_name
  self.class.component_name
end
content() click to toggle source
# File lib/rbexy/component.rb, line 53
def content
  content_block ? content_block.call : ""
end
render(&block) click to toggle source
# File lib/rbexy/component.rb, line 39
def render(&block)
  @content_block = block_given? ? block : nil
  call
end
setup(**props) click to toggle source

Override in your subclass to handle props, setup your component, etc. You can also implement `initialize` but you just need to remember to call super(view_context).

# File lib/rbexy/component.rb, line 37
def setup(**props); end

Private Instance Methods

clean_template_backtrace(backtrace) click to toggle source
# File lib/rbexy/component.rb, line 73
def clean_template_backtrace(backtrace)
  return backtrace if Rbexy.configuration.debug
  BacktraceCleaner.new(backtrace).call
end
method_missing(meth, *args, &block) click to toggle source
Calls superclass method
# File lib/rbexy/component.rb, line 65
def method_missing(meth, *args, &block)
  if view_context.respond_to?(meth)
    view_context.send(meth, *args, &block)
  else
    super
  end
end