class ErpApp::Widgets::Loader

Public Class Methods

load_compass_ae_widgets(config, engine) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 5
def load_compass_ae_widgets(config, engine)
  ErpBaseErpSvcs.setup_compass_ae_callback(config, engine) do |engine|
    ::ErpApp::Widgets::Loader.require_widgets_and_helpers(engine.root)
    ::ErpApp::Widgets::Loader.load_widget_extensions(engine)
  end
end
load_root_widgets(config) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 12
def load_root_widgets(config)
   ErpBaseErpSvcs.setup_compass_ae_callback(config, nil) do |engine|
     ::ErpApp::Widgets::Loader.require_widgets_and_helpers(Rails.root.to_s)
   end
end
load_widget_extensions(engine) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 49
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].push(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
require_widgets_and_helpers(path) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 18
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 root widget extensions that should override this widget
    load_root_widget_extensions(widget_hash)
  end
end

Private Class Methods

get_widget_view_files(widget_hash, view_path) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 95
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
load_root_widget_extensions(widget_hash) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 111
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].push(view_path)
      #get all view files for theme generation
      get_widget_view_files(widget_hash, view_path)
    end
  end#make sure folder exists
end
load_widget_controller_helpers(path, widget_hash) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 86
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].camelize}::Base".constantize.send(:include, File.basename(helper, ".rb").camelize.constantize)
  end
end
load_widget_view_helpers(path) click to toggle source
# File lib/erp_app/widgets/loader.rb, line 77
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").camelize.constantize)
  end
end