Class: Lolita::Configuration::List

Inherits:
Base show all
Includes:
Builder, Observable
Defined in:
lib/lolita/configuration/list.rb

Direct Known Subclasses

NestedList

Instance Attribute Summary collapse

Attributes inherited from Base

#component, #dbi

Instance Method Summary collapse

Methods included from Builder

#build, #builder, #builder=, #builder_default_name, #builder_default_options, #builder_default_state

Constructor Details

#initialize(dbp, *args, &block) ⇒ List

Returns a new instance of List.



12
13
14
15
16
17
18
# 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

Instance Attribute Details

#initialized_attributesObject (readonly)

Returns the value of attribute initialized_attributes.



7
8
9
# File 'lib/lolita/configuration/list.rb', line 7

def initialized_attributes
  @initialized_attributes
end

#page_criteriaObject (readonly)

Returns the value of attribute page_criteria.



7
8
9
# File 'lib/lolita/configuration/list.rb', line 7

def page_criteria
  @page_criteria
end

#title(new_title = nil) ⇒ Object



20
21
22
23
24
25
# 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

Instance Method Details

#action(name, options = {}, &block) ⇒ Object



27
28
29
30
# 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) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
# 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) ⇒ Object

Block setter for columns



87
88
89
# File 'lib/lolita/configuration/list.rb', line 87

def column(*args,&block)
  columns.column(*args, &block)
end

#columns(*args, &block) ⇒ Object

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



79
80
81
82
83
84
# 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) ⇒ Object

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



65
66
67
68
69
70
71
72
73
74
75
76
# 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) ⇒ Object

Create or return filter



97
98
99
100
101
102
103
# 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?Boolean

checks if filter defined

Returns:

  • (Boolean)


92
93
94
# File 'lib/lolita/configuration/list.rb', line 92

def filter?
  @filter.is_a?(Lolita::Configuration::Filter)
end

#list(*args, &block) ⇒ Object

Allow to crate nested list for list



33
34
35
36
37
38
39
40
41
42
# 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) ⇒ Object

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



56
57
58
59
60
61
# 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

#search(*args, &block) ⇒ Object

For details see Lolita::Configuration::Search



45
46
47
48
49
50
51
# File 'lib/lolita/configuration/list.rb', line 45

def search *args, &block
  if (args && args.any?) || block_given?
    @search = Lolita::Configuration::Search.new(self.dbi,*args,&block)
    add_observer(@search)
  end
  @search
end