module ErpApp module Widgets class Loader class << self def load_compass_ae_widgets(engine) require_widgets_and_helpers(engine.root) load_widget_extensions(engine) end def load_root_widgets require_widgets_and_helpers(Rails.root.to_s) end private def require_widgets_and_helpers(path) widgets = [] widgets_path = File.join(path,"/app/widgets/") widgets = Dir.entries(widgets_path) if File.exists? widgets_path widgets.delete_if{|name| name =~ /^\./} widgets.each do |widget_name| widget_hash = Rails.application.config.erp_app.widgets.find{|item| item[:name] == widget_name} if widget_hash.nil? widget_hash = { :name => widget_name, :path => File.join(widgets_path,widget_name), :view_paths => [File.join(widgets_path,widget_name,'views')], :view_files => [] } Rails.application.config.erp_app.widgets << widget_hash end load File.join(widget_hash[:path],'base.rb') #load helpers if File.exists? File.join(widget_hash[:path],'helpers') load_widget_view_helpers File.join(widget_hash[:path],'helpers','view') if File.directory? File.join(widget_hash[:path],'helpers','view') load_widget_controller_helpers(File.join(widget_hash[:path],'helpers','controller'),widget_hash) if File.directory? File.join(widget_hash[:path],'helpers','controller') end #get all view files for theme generation get_widget_view_files(widget_hash, widget_hash[:view_paths].first) #load any rails root extensions load_root_widget_extensions(widget_hash) end end def load_widget_view_helpers(path) helpers = Dir.entries(path) helpers.delete_if{|name| name =~ /^\./} helpers.each do |helper| load File.join(path,helper) ActionView::Base.send(:include, File.basename(helper, ".rb").classify.constantize) end end def load_widget_controller_helpers(path, widget_hash) helpers = Dir.entries(path) helpers.delete_if{|name| name =~ /^\./} helpers.each do |helper| load File.join(path,helper) "Widgets::#{widget_hash[:name].classify}::Base".constantize.send(:include, File.basename(helper, ".rb").classify.constantize) end end def get_widget_view_files(widget_hash, view_path) file_support = ErpTechSvcs::FileSupport::Base.new file_support.build_tree(view_path)[:children].each do |node| if node[:leaf] view_file = widget_hash[:view_files].find{|item| item[:name] == node[:text]} if view_file.nil? widget_hash[:view_files] << {:name => node[:text], :path => node[:id]} else view_file[:path] = node[:id] end else get_widget_view_files(widget_hash, node[:id]) end end end def load_widget_extensions(engine) widgets_path = File.join(engine.root,"lib",engine.railtie_name,"extensions/widgets") widgets = File.directory?(widgets_path) ? Dir.entries(widgets_path) : [] widgets.delete_if{|name| name =~ /^\./} widgets.each do |widget_name| widget_hash = Rails.application.config.erp_app.widgets.find{|item| item[:name] == widget_name} #load any extensions to existing widgets Dir.glob(File.join(widgets_path,widget_name,"*.rb")).each do |file| load file end #add any additional view paths to widgets if File.directory?(File.join(widgets_path,widget_name,'views')) view_path = File.join(widgets_path,widget_name,'views') widget_hash[:view_paths] << view_path #get all view files for theme generation get_widget_view_files(widget_hash, view_path) end #overwrite with any extensions in rails root load_root_widget_extensions(widget_hash) end end def load_root_widget_extensions(widget_hash) if File.directory?(File.join(Rails.root,"lib/extensions/widgets",widget_hash[:name])) Dir.glob(File.join(Rails.root,"lib/extensions/widgets",widget_hash[:name],"*.rb")).each do |file| load file end #add any additional view paths to widgets if File.directory?(File.join(Rails.root,"lib/extensions/widgets",widget_hash[:name],'views')) view_path = File.join(Rails.root,"lib/extensions/widgets",widget_hash[:name],'views') widget_hash = Rails.application.config.erp_app.widgets.find{|item| item[:name] == widget_hash[:name]} widget_hash[:view_paths] << view_path #get all view files for theme generation get_widget_view_files(widget_hash, view_path) end end#make sure folder exists end end#self end#Loader end#Widgets end#ErpApp