orbit-basic/lib/orbit_app/module/side_bar.rb

151 lines
4.2 KiB
Ruby

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