class Lolita::Configuration::List

Attributes

initialized_attributes[R]
page_criteria[R]
title[W]

Public Class Methods

new(dbp,*args,&block) click to toggle source
# File lib/lolita/configuration/list.rb, line 12
def initialize(dbp,*args,&block)
  set_and_validate_dbp(dbp)
  set_list_attributes do
    set_attributes(*args)
    self.instance_eval(&block) if block_given?
  end
end

Public Instance Methods

action(name, options = {}) click to toggle source
# File lib/lolita/configuration/list.rb, line 27
def action name, options = {}, &block
  @actions << decide_and_create_action(name, options, &block)
  @actions.flatten!
end
by_path(path) click to toggle source
# File lib/lolita/configuration/list.rb, line 105
def by_path(path)
  path = path.dup
  object = self
  while path.any?
    part = path.pop.match(/(l|c)_(\w+)/)
    object = if part[1] == "l"
      object.list
    else
      object.columns.by_name(part[2]).list
    end
  end
  object
end
column(*args,&block) click to toggle source

Block setter for columns

# File lib/lolita/configuration/list.rb, line 87
def column(*args,&block)
  columns.column(*args, &block)
end
columns(*args,&block) click to toggle source

Define columns for list. On first read if there is no columns they will be created.

# File lib/lolita/configuration/list.rb, line 79
def columns(*args,&block)
  if (args && args.any?) || block_given? || !@columns
    self.columns = Lolita::Configuration::Columns.new(dbi,*args,&block)
  end
  @columns
end
columns=(possible_columns) click to toggle source

Set columns. Allowed classes are Lolita::Configuration::Columns or Array.

# File lib/lolita/configuration/list.rb, line 65
def columns=(possible_columns)
  if possible_columns.is_a?(Lolita::Configuration::Columns)
    @columns = possible_columns
    @columns.parent = self
  elsif possible_columns.respond_to?(:each)
    possible_columns.each{|possible_column|
      column(possible_column)
    }
  else
    raise ArgumentError.new("Accepts only Enumerable or Lolita::Configuration::Columns.")
  end
end
filter(*args,&block) click to toggle source

Create or return filter

# File lib/lolita/configuration/list.rb, line 97
def filter(*args,&block)
  if args && args.any? || block_given?
    @filter = Lolita::Configuration::Filter.new(dbi,*args,&block)
    add_observer(@filter)
  end
  @filter
end
filter?() click to toggle source

checks if filter defined

# File lib/lolita/configuration/list.rb, line 92
def filter?
  @filter.is_a?(Lolita::Configuration::Filter)
end
list(*args, &block) click to toggle source

Allow to crate nested list for list

# File lib/lolita/configuration/list.rb, line 33
def list(*args, &block)
  if args && args.any? || block_given?
    association = dbi.associations[args[0].to_s]
    association_dbi = association && Lolita::DBI::Base.create(association.klass)
    raise Lolita::UnknownDBPError.new("No DBI specified for list sublist") unless association_dbi
    Lolita::LazyLoader.lazy_load(self,:@list,Lolita::Configuration::NestedList,association_dbi, self, :association_name => association.name,&block)
  else
    @list
  end
end
paginate(current_page, request = nil) click to toggle source

Return page for list display. Method requires two arguments:

  • current_page - number of current page

  • request (optional) - request that is passed to adapter that passes this to model when pagination_method is defined

# File lib/lolita/configuration/list.rb, line 56
def paginate(current_page, request = nil)
  changed
  @page_criteria = dbi.paginate(current_page,@per_page,:request => request, :pagination_method => @pagination_method)
  notify_observers(:paginate,self,request)
  @page_criteria
end
title(new_title = nil) click to toggle source
# File lib/lolita/configuration/list.rb, line 20
def title(new_title = nil)
  if new_title
    @title = new_title
  end
  Lolita::Utils.dynamic_string(@title, :default => dbp.klass.lolita_model_name.human(:count => 2))
end

Private Instance Methods

actions_empty?() click to toggle source
# File lib/lolita/configuration/list.rb, line 152
def actions_empty?
  (@actions.respond_to?(:each) && @actions.empty?)
end
add_destroy_action() click to toggle source
# File lib/lolita/configuration/list.rb, line 178
def add_destroy_action
  unless actions.detect{|existing_action| existing_action.name == :destroy}
    create_action(:destroy, &destroy_action_block)
  end
end
add_edit_action() click to toggle source
# File lib/lolita/configuration/list.rb, line 172
def add_edit_action
  unless actions.detect{|existing_action| existing_action.name == :edit}
    create_action(:edit, &edit_action_block)
  end
end
create_action(name, options = {}) click to toggle source
# File lib/lolita/configuration/list.rb, line 168
def create_action name, options = {}, &block
  Lolita::Configuration::Action.new(@dbi,name,options,&block)
end
create_default_actions() click to toggle source
# File lib/lolita/configuration/list.rb, line 132
def create_default_actions
  if !skip_actions? && ( default_actions? || actions_empty?)
    initialize_actions
    @actions << add_edit_action
    @actions << add_destroy_action
  end
end
decide_and_create_action(name, options ={}, &block) click to toggle source
# File lib/lolita/configuration/list.rb, line 160
def decide_and_create_action(name, options ={}, &block)
  if name.to_s == 'default'
    [add_edit_action,add_destroy_action]
  else
    create_action(name,options,&block)
  end
end
default_actions?() click to toggle source
# File lib/lolita/configuration/list.rb, line 144
def default_actions?
  actions.to_s.to_sym == :default
end
destroy_action_block() click to toggle source
# File lib/lolita/configuration/list.rb, line 191
def destroy_action_block
  Proc.new do
    title Proc.new{::I18n.t("lolita.shared.delete")}
    url Proc.new{|view,record| view.send(:lolita_resource_path,:id => record.id)}
    html method: :delete, data: { confirm: Proc.new{::I18n.t("lolita.list.confirm")} }
  end
end
edit_action_block() click to toggle source
# File lib/lolita/configuration/list.rb, line 184
def edit_action_block
  Proc.new do
    title Proc.new{::I18n.t("lolita.shared.edit")}
    url Proc.new{|view,record| view.send(:edit_lolita_resource_path, :id => record.id)}
  end
end
included_default_actions?() click to toggle source
# File lib/lolita/configuration/list.rb, line 148
def included_default_actions?
  actions.include?(:default)
end
init_default_attributes() click to toggle source
# File lib/lolita/configuration/list.rb, line 127
def init_default_attributes
  initialize_actions
  @per_page = Lolita.application.per_page || 10
end
initialize_actions() click to toggle source
# File lib/lolita/configuration/list.rb, line 140
def initialize_actions
  @actions = [] unless @actions.respond_to?(:each)
end
set_list_attributes() { || ... } click to toggle source
# File lib/lolita/configuration/list.rb, line 121
def set_list_attributes
  init_default_attributes
  yield if block_given?
  create_default_actions
end
skip_actions?() click to toggle source
# File lib/lolita/configuration/list.rb, line 156
def skip_actions?
  actions.to_s.to_sym == :none
end