class ErpApp::Widgets::Base

Constants

IGNORED_PARAMS

Attributes

div_id[RW]
html[RW]
name[RW]
proxy_controller[RW]
state_name[R]
uuid[RW]
view[RW]
widget_params[RW]

Public Class Methods

new(proxy_controller=nil, name=nil, view=nil, uuid=nil, widget_params=nil) click to toggle source
# File lib/erp_app/widgets/base.rb, line 33
def initialize(proxy_controller=nil, name=nil, view=nil, uuid=nil, widget_params=nil)
  ErpApp::Widgets::Base.view_resolver_cache = [] if ErpApp::Widgets::Base.view_resolver_cache.nil?
  self.name = name
  self.proxy_controller = proxy_controller
  self.view = view
  self.uuid = uuid
  self.widget_params = widget_params
  add_view_paths
  store_widget_params
  merge_params
end

Private Class Methods

installed_widgets() click to toggle source
# File lib/erp_app/widgets/base.rb, line 157
def installed_widgets
  self.locate_widgets
end
locate_widgets() click to toggle source
# File lib/erp_app/widgets/base.rb, line 163
def locate_widgets
  widgets = []
  #get all widgets in root
  widget_path = File.join(Rails.root.to_s,"/app/widgets/")
  widgets = widgets | Dir.entries(widget_path) if File.exists? widget_path

  #get all widgets in engines
  Rails::Application::Railties.engines.each do |engine|
    #exclude widgets path in erp_app it defines are widgets
    next if engine.engine_name == "erp_app"
    widget_path = File.join(engine.root.to_s,"/app/widgets/")
    widgets = widgets | Dir.entries(widget_path) if File.exists? widget_path
  end
  #remove .svn .git etc files
  widgets.delete_if{|name| name =~ /^\./}
  widgets
end
render_template(view, locals={}) click to toggle source
# File lib/erp_app/widgets/base.rb, line 146
def render_template(view, locals={})
  widget = Rails.application.config.erp_app.widgets.find{|item| item[:name] == self.widget_name}
  paths = widget[:view_paths]

  ActionView::Base.new(paths).render(:template => view, :locals => locals)
end
widget_name() click to toggle source
# File lib/erp_app/widgets/base.rb, line 153
def widget_name
  File.basename(File.dirname(__FILE__))
end

Public Instance Methods

_prefixes() click to toggle source

override default behavior of nesting views by controller namespace.…

The prefixes used in render "foo" shortcuts.
# File lib/erp_app/widgets/base.rb, line 47
def _prefixes
  @_prefixes ||= []
end
render(*args) click to toggle source
# File lib/erp_app/widgets/base.rb, line 55
def render(*args)
  render_view_for(self.action_name, *args)
end
widget_result_id() click to toggle source
# File lib/erp_app/widgets/base.rb, line 51
def widget_result_id
  "#{self.uuid}_result"
end

Protected Instance Methods

get_views_full_path(view) click to toggle source

get the full file path for a view file relative to the widgets view path

# File lib/erp_app/widgets/base.rb, line 66
def get_views_full_path(view)
  self.lookup_context.find_template(view).virtual_path
end
locate() click to toggle source

get location of this class that is being executed

# File lib/erp_app/widgets/base.rb, line 61
def locate
  File.dirname(__FILE__)
end
redirect_to(options = {}, response_status = {}) click to toggle source
# File lib/erp_app/widgets/base.rb, line 82
def redirect_to(options = {}, response_status = {})
  proxy_controller.redirect_to(options, response_status)

  {redirect_to: true}
end
send_data(data, options = {}) click to toggle source
# File lib/erp_app/widgets/base.rb, line 76
def send_data(data, options = {})
  proxy_controller.send_data(data, options)

  {send_data: true}
end
send_file(path, options = {}) click to toggle source
# File lib/erp_app/widgets/base.rb, line 70
def send_file(path, options = {})
  proxy_controller.send_file(path, options)

 {send_file: true}
end

Private Instance Methods

add_view_paths() click to toggle source
# File lib/erp_app/widgets/base.rb, line 130
def add_view_paths
  widget = Rails.application.config.erp_app.widgets.find{|item| item[:name] == self.name}

  widget[:view_paths].each do |view_path|
    cached_resolver = ErpApp::Widgets::Base.view_resolver_cache.find{|resolver| resolver.to_path == view_path}
    if cached_resolver.nil?
      resolver = ActionView::OptimizedFileSystemResolver.new(view_path)
      prepend_view_path(resolver)
      ErpApp::Widgets::Base.view_resolver_cache << resolver
    else
      prepend_view_path(cached_resolver)
    end
  end
end
merge_params() click to toggle source
# File lib/erp_app/widgets/base.rb, line 118
def merge_params
  stored_widget_params = session[:widgets][self.uuid]
  unless stored_widget_params.nil?
    self.params.merge! stored_widget_params.merge self.params
  end
end
process_opts_for(opts, view) click to toggle source
# File lib/erp_app/widgets/base.rb, line 114
def process_opts_for(opts, view)
  opts[:action] = opts[:view] || view
end
render_view_for(view, *args) click to toggle source
# File lib/erp_app/widgets/base.rb, line 90
def render_view_for(view, *args)
  opts = args.first.is_a?(::Hash) ? args.shift : {}

  return "" if opts[:nothing]

  if opts[:update]
    update_opts = opts[:update]
    if update_opts[:text]
      js = update_opts[:text]
    else
      opts = {:view => update_opts[:view]}
      process_opts_for(opts, view)
      js = render_to_string(opts).html_safe
    end
    extra_params = update_opts[:extraParams] || {}
    return {:json => {:htmlId => update_opts[:id], :html => js, :success => true, :extraParams => extra_params}}
  elsif (opts.keys & [:text, :inline, :file]).blank?
    process_opts_for(opts, view)
    return render_to_string(opts).html_safe # ActionView::Template::Text doesn't do that for us.
  else
    return opts
  end
end
store_widget_params() click to toggle source
# File lib/erp_app/widgets/base.rb, line 125
def store_widget_params
  session[:widgets] = {} if session[:widgets].nil?
  session[:widgets][self.uuid] = self.widget_params if (!self.widget_params.nil? and !self.widget_params.empty?)
end