class MenuBlock::MenuItem
Attributes
default[R]
default?[R]
match_params[R]
name[R]
route_block[R]
Public Class Methods
new(context, name, default: false, match_params: {}, &route_block)
click to toggle source
# File lib/components/menu_block.rb, line 67 def initialize(context, name, default: false, match_params: {}, &route_block) @context = context @name = name @route_block = route_block @default = default @match_params = match_params end
Public Instance Methods
active?()
click to toggle source
# File lib/components/menu_block.rb, line 79 def active? matches = [] # Set default match_params. For example: This is the default matcher for :controller if :controller isn't specified match_params[:controller] ||= recognized_route[:controller] # Make sure everything in match_params is contained in params. match_params.each do |key,val| # This will handle arrays, strings, numbers, etc. params should always return a string or nil. matches << Array(val).compact.map(&:to_s).include?(params[key]) end # Loop through query parameters to make sure they match ::Rack::Utils.parse_query(URI.parse(route).query).each do |param, val| matches << (params[param] == val) end matches.all? end
route()
click to toggle source
# File lib/components/menu_block.rb, line 75 def route @route ||= route_block.call end
Private Instance Methods
params()
click to toggle source
# File lib/components/menu_block.rb, line 105 def params @context.params end
recognized_route()
click to toggle source
# File lib/components/menu_block.rb, line 109 def recognized_route @recognized_route ||= ( recognizable_path = without_script_name { route_block.call } Rails.application.routes.recognize_path(recognizable_path) ) end
request()
click to toggle source
# File lib/components/menu_block.rb, line 101 def request @context.request end
without_script_name(&block)
click to toggle source
The router won't recognize routes with a script_name So we need to temporarily set the script_name to nil so we can generate a path the router will like.
# File lib/components/menu_block.rb, line 119 def without_script_name(&block) script_name = request.script_name request.script_name = nil val = block.call request.script_name = script_name val end