module OrbitApp module Module module SideBarRegisition Version = "0.1" module ClassMethods @@side_bars = [] def add(var) @@side_bars << var end def find_by_key(key) @@side_bars.each{|t| return t if t.name == key } return nil end def all return @@side_bars end end extend ClassMethods def self.included( other ) other.extend( ClassMethods ) end class SideBar # include ApplicationHelper # include AdminHelper include SideBarRenderer # def is_admin? # binding.pry # end # def is_manager? # binding.pry # end def initialize( &block) name = '' @head_label = name @context_links = [] @available_for = [] @active_for_controllers = [] @active_for_object_auth = [] @active_for_app_auth = [] @head_link = "" @app_base_path = '' block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? end def module_app_key=(var) @module_app_title = var @module_app = ModuleApp.where(:title=>var).desc(:create_date).first @module_app_key = @module_app.key end def head_label_i18n(var,optoins =nil) @head_label = var @icon_class = optoins[:icon_class] end def available_for(var) @available_for = var end def active_for_controllers(var) @active_for_controllers = var end def active_for_object_auth(var) @active_for_object_auth = var end def head_link_path(var) @head_link = var end def context_link(*var) new_context_link = ContextLink.new(*var) @context_links << new_context_link end def finalize! set_controllers_scope set_default_active_app_auth @context_links.each do |t| t.set_module_app = @module_app t.finalize! end end protected def set_default_active_app_auth @active_for_app_auth = @module_app.title end def set_controllers_scope var = @active_for_controllers @active_for_controllers = [] var[:private].each do |controller| @active_for_controllers << "panel/#{@module_app_key}/back_end/"+controller end unless var[:private].nil? var[:public].each do |controller| @active_for_controllers << controller end unless var[:public].nil? end end class ContextLink include ContextLinkRenderer attr_reader :label_i18n,:available_for,:priority,:path,:active_for_action def initialize(label_i18n="NoNameLink",options={}) @label_i18n = label_i18n @available_for = options[:available_for] @priority = options[:priority] || 0 @path = options[:link_path] || "" @active_for_action = options[:active_for_action] || [] @active_for_object_auth = options[:active_for_object_auth] || [] @active_for_app_auth = options[:active_for_app_auth] || [] end def active? active_for_action? || active_for_app_auth? || active_for_ob_auths? end def active_for_action? @active_for_action[controller] == action end def set_module_app=(var) @module_app = var @module_app_key = var.key end def finalize! set_active_actions end protected def set_active_actions controller_action_hash = @active_for_action @active_for_action = Hash[controller_action_hash.map{|controller,action| ["panel/#{@module_app_key}/back_end/"+controller.to_s,action.to_s]}] end end end end end