class Tension::Context

Attributes

action[R]
controller_name[R]

Public Class Methods

new(controller_path) click to toggle source
# File lib/tension/context.rb, line 5
def initialize(controller_path)
  @controller_name = controller_path.camelize

  unless @controller_name.safe_constantize
    @controller_name << "Controller"
  end
end

Public Instance Methods

action_asset(action, type) click to toggle source

Returns the action-level asset for the given action name and type, or nil.

# File lib/tension/context.rb, line 34
def action_asset(action, type)
  Tension::Utils.find_asset( controller: controller.controller_path, action: action, type: type )
end
controller() click to toggle source
# File lib/tension/context.rb, line 13
def controller
  controller_name.constantize
end
controller_asset(type) click to toggle source

Returns the controller-level asset for the given type, or nil.

# File lib/tension/context.rb, line 40
def controller_asset(type)
  Tension::Utils.find_asset( controller: controller.controller_path, type: type )
end
css(action) click to toggle source

Locates the best stylesheet for the given action name. Aliased as, for example, `#index( Tension::CSS )` or `#show(:css)`.

# File lib/tension/context.rb, line 20
def css(action)
  best_asset( action, Tension::CSS )
end
global_asset(type) click to toggle source

Returns the global asset for the given type (application.{css,js}).

# File lib/tension/context.rb, line 46
def global_asset(type)
  Tension::Utils.global_asset(type)
end
has_action?(action_name) click to toggle source
# File lib/tension/context.rb, line 50
def has_action?(action_name)
  controller.action_methods.include?(action_name)
end
js(action) click to toggle source

Locates the best JavaScript for the given action name. Aliased as, for example, `#index( Tension::JS )` or `#show(:js)`.

# File lib/tension/context.rb, line 27
def js(action)
  best_asset( action, Tension::JS )
end
shared_assets() click to toggle source
# File lib/tension/context.rb, line 54
def shared_assets
  klass = controller

  while true
    break {} if klass == ActionController::Base

    assets = Tension.environment.controllers[ klass.name.underscore ]
    break assets if assets.present?

    klass = klass.superclass
  end
end

Private Instance Methods

best_asset(action, type) click to toggle source

Locates the best asset for the given action name and type.

# File lib/tension/context.rb, line 72
def best_asset(action, type)
  action_asset(action, type) || controller_asset(type)
end
method_missing(method_sym, *args) click to toggle source
Calls superclass method
# File lib/tension/context.rb, line 76
def method_missing(method_sym, *args)
  action = method_sym.to_s
  type   = args.first

  if has_action?(action)
    best_asset(action, type)
  else
    super
  end
end