module Dome::ControllerClassMethods

Public Instance Methods

exhibit(*names, by: nil) click to toggle source

exhibit(:one) exhibit(:one, :two, by: SomeEx)

# File lib/dome/controller_class_methods.rb, line 69
def exhibit(*names, by: nil)
  names.each do |name|
    klass = by || begin
      class_name = "#{name.to_s.camelize}Exhibit"
      klass = class_name.safe_constantize
      klass || raise(
        Dome::ExhibitClassNotFound,
        "Exhibit class '#{class_name}' for '#{name}' not found."
      )
    end

    define_method name do
      instance_variable_get("@dome_#{name}_exhibit") || begin
        exhibited = klass.new(instance_variable_get("@#{name}"))
        exhibited.instance_variable_set("@view_context", self)
        instance_variable_set("@dome_#{name}_exhibit", exhibited)
      end
    end
    _helpers.send :define_method, name do
      instance_variable_get("@dome_#{name}_exhibit") || begin
        exhibited = klass.new(instance_variable_get("@#{name}"))
        exhibited.instance_variable_set("@view_context", self)
        instance_variable_set("@dome_#{name}_exhibit", exhibited)
      end
    end
  end
end
exhibit_enum(*names, by: nil) click to toggle source

exhibit_enum(:ones) exhibit_enum(:ones, :twos, by: SomeEx)

# File lib/dome/controller_class_methods.rb, line 99
def exhibit_enum(*names, by: nil)
  names.each do |name|
    klass = by || begin
      class_name = "#{name.to_s.singularize.camelize}Exhibit"
      klass = class_name.safe_constantize
      klass || raise(
        Dome::ExhibitClassNotFound,
        "Exhibit class '#{class_name}' for '#{name}' not found."
      )
    end

    define_method name do
      instance_variable_get("@dome_#{name}_exhibit") || begin
        enum = instance_variable_get("@#{name}").to_a.map do |x|
          exhibited = klass.new(x)
          exhibited.instance_variable_set("@view_context", self)
          exhibited
        end
        instance_variable_set("@dome_#{name}_exhibit", enum)
      end
    end
    _helpers.send :define_method, name do
      instance_variable_get("@dome_#{name}_exhibit") || begin
        enum = instance_variable_get("@#{name}").to_a.map do |x|
          exhibited = klass.new(x)
          exhibited.instance_variable_set("@view_context", self)
          exhibited
        end
        instance_variable_set("@dome_#{name}_exhibit", enum)
      end
    end
  end
end
Also aliased as: exhibit_enums
exhibit_enums(*names, by: nil)
Alias for: exhibit_enum
present(pairs, *vals) click to toggle source

present(pair: [:one, :two], …)

# File lib/dome/controller_class_methods.rb, line 39
def present(pairs, *vals)
  pairs.each do |name, var_names|
    class_name = "#{name.to_s.camelize}Presenter"
    klass = class_name.safe_constantize
    klass || raise(
      Dome::ExhibitClassNotFound,
      "Exhibit class '#{class_name}' for '#{name}' not found."
    )

    define_method name do
      instance_variable_get("@dome_#{name}_presenter") || begin
        things = var_names.map { |x| instance_variable_get("@#{x}") }
        presented = klass.new(*things)
        presented.instance_variable_set("@view_context", self)
        instance_variable_set("@dome_#{name}_presenter", presented)
      end
    end
    _helpers.send :define_method, name do
      instance_variable_get("@dome_#{name}_presenter") || begin
        things = var_names.map { |x| instance_variable_get("@#{x}") }
        presented = klass.new(*things)
        presented.instance_variable_set("@view_context", self)
        instance_variable_set("@dome_#{name}_presenter", presented)
      end
    end
  end
end
view_model(name, &block) click to toggle source

TODO: view_models view_model(:dashboard) { UnitDashboard.new(@meeting) }

# File lib/dome/controller_class_methods.rb, line 12
def view_model(name, &block)
  if block_given?
    define_method name do
      instance_variable_get("@#{name}") || begin
        view_model = self.instance_eval &block
        view_model.instance_variable_set("@view_context", self)
        instance_variable_set("@#{name}", view_model)
      end
    end
    _helpers.send :define_method, name do
      instance_variable_get("@#{name}") || begin
        view_model = self.instance_eval &block
        view_model.instance_variable_set("@view_context", self)
        instance_variable_set("@#{name}", view_model)
      end
    end
  else
    define_method name do
      instance_variable_get("@#{name}")
    end
    _helpers.send :define_method, name do
      instance_variable_get("@#{name}")
    end
  end
end