class Roda::RodaPlugins::Components::ComponentRequest

Attributes

app[R]
cache[R]
component_class[R]
component_name[R]
component_opts[R]

Public Class Methods

new(app, component_class, component_name, opts = {}) click to toggle source
# File lib/roda/plugins/components.rb, line 98
def initialize app, component_class, component_name, opts = {}, block
  @app             = app
  @component_class = component_class
  @component_name  = component_name
  @component_opts  = opts
  @cache           = Roda::RodaCache.new
  @_block          = block
end

Public Instance Methods

block() click to toggle source
# File lib/roda/plugins/components.rb, line 173
def block
  @_block
end
display(&block) click to toggle source
# File lib/roda/plugins/components.rb, line 115
def display &block
  on 'display', &block
end
dom() click to toggle source
# File lib/roda/plugins/components.rb, line 133
def dom
  cache[:dom] ||= comp_cache[:dom].dup
end
dom_html() click to toggle source
# File lib/roda/plugins/components.rb, line 137
def dom_html
  dom.to_html
end
html() { || ... } click to toggle source
# File lib/roda/plugins/components.rb, line 119
def html &block
  comp_cache[:html_loaded] ||= begin
    comp_cache[:html] ||= yield
    true
  end
end
on(name) { |component_opts || {}| ... } click to toggle source
# File lib/roda/plugins/components.rb, line 107
def on name, &block
  name = name.to_s

  if name == component_opts[:call].to_s
    throw :halt, yield(component_opts[:locals] || {})
  end
end
set_tmpl(name, value, keep = false) click to toggle source
# File lib/roda/plugins/components.rb, line 145
def set_tmpl name, value, keep = false
  comp_tmpl[name] = value
  value.remove unless keep
end
setup(&block) click to toggle source
# File lib/roda/plugins/components.rb, line 126
def setup &block
  comp_cache[:ran_setup] ||= begin
    block.call comp_dom, comp_tmpl
    true
  end
end
tmpl(name) click to toggle source
# File lib/roda/plugins/components.rb, line 141
def tmpl name
  (cache[:tmpl] ||= {}).fetch(name){ comp_tmpl.fetch(name).dup }
end
trigger(event, opts = {}) click to toggle source
# File lib/roda/plugins/components.rb, line 154
def trigger event, opts = {}
  event = event.to_s

  if opts.key?(:for)
    name = opts.delete(:for).to_s
  else
    name = component_name
  end

  if events = class_cache[:events][name]
    (events[event] || []).each do |e|
      if component_opts[:call] != e[:call]
        e_opts = opts.dup.merge({call: e[:call]})
        app.component e[:component], e_opts
      end
    end
  end
end
trigger_events() click to toggle source
# File lib/roda/plugins/components.rb, line 150
def trigger_events
  trigger component_opts.dup.delete(:call), component_opts
end

Private Instance Methods

class_cache() click to toggle source
# File lib/roda/plugins/components.rb, line 187
def class_cache
  component_class.send(:cache)
end
comp_cache()
Alias for: component_cache
comp_dom() click to toggle source
# File lib/roda/plugins/components.rb, line 179
def comp_dom
  comp_cache[:dom] ||= Nokogiri::HTML(comp_cache[:html])
end
comp_tmpl() click to toggle source
# File lib/roda/plugins/components.rb, line 183
def comp_tmpl
  comp_cache[:tmpl] ||= {}
end
component_cache() click to toggle source
# File lib/roda/plugins/components.rb, line 191
def component_cache
  class_cache["#{component_name}_cache"] ||= {}
end
Also aliased as: comp_cache