Class: Gitter::Column

Inherits:
Object
  • Object
show all
Defined in:
lib/gitter/column.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(grid, name, opts = {}, &block) ⇒ Column

Returns a new instance of Column.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/gitter/column.rb', line 7

def initialize grid, name, opts = {}, &block
  @grid, @name, @block = grid, name, block
  @attr = opts.delete(:column){name}
  @order = opts.delete :order
  @order = attr if @order == true
  @order_desc = opts.delete :order_desc
  @uniq = opts.delete :uniq
  @map = opts.delete(:map){true}
  @html_options = opts.delete(:html_options){{}}
  if opts.has_key?(:header) || opts.has_key?(:headers)  # handle :header => false correctly
     header_opts = opts.delete(:header){opts.delete(:headers)}
     @headers = [header_opts].flatten.map do |header_opt|
       case header_opt
       when Hash
         content = header_opt.delete(:content)
         h_opts = header_opt
       else
         content = header_opt
         h_opts = {}
       end
       Header.new grid, content, h_opts.merge(:column => self)
    end
  else
    @headers = [Header.new(grid, name, opts.merge(:column => self))]
  end
end

Instance Attribute Details

#attrObject (readonly)

Returns the value of attribute attr.



5
6
7
# File 'lib/gitter/column.rb', line 5

def attr
  @attr
end

#blockObject (readonly)

Returns the value of attribute block.



5
6
7
# File 'lib/gitter/column.rb', line 5

def block
  @block
end

#gridObject (readonly)

Returns the value of attribute grid.



5
6
7
# File 'lib/gitter/column.rb', line 5

def grid
  @grid
end

#headersObject (readonly)

Returns the value of attribute headers.



5
6
7
# File 'lib/gitter/column.rb', line 5

def headers
  @headers
end

#html_optionsObject (readonly)

Returns the value of attribute html_options.



5
6
7
# File 'lib/gitter/column.rb', line 5

def html_options
  @html_options
end

#mapObject (readonly)

Returns the value of attribute map.



5
6
7
# File 'lib/gitter/column.rb', line 5

def map
  @map
end

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/gitter/column.rb', line 5

def name
  @name
end

#orderObject (readonly)

Returns the value of attribute order.



5
6
7
# File 'lib/gitter/column.rb', line 5

def order
  @order
end

#order_descObject (readonly)

Returns the value of attribute order_desc.



5
6
7
# File 'lib/gitter/column.rb', line 5

def order_desc
  @order_desc
end

#uniqObject (readonly)

Returns the value of attribute uniq.



5
6
7
# File 'lib/gitter/column.rb', line 5

def uniq
  @uniq
end

Instance Method Details

#cells(model) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/gitter/column.rb', line 34

def cells model
  res = if map && Array === model
    model.map{|m| cells m}
  else
    cell model
  end 

  # set consecutively equal cells to nil
  if uniq && Array === res
    current = nil 
    r = res.map do |el|
      if el != current || current.nil?
        current = el
	  else
        nil
	  end 
	end
	r
  else
    res
  end
end

#desc?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/gitter/column.rb', line 78

def desc?
  @desc ||= to_boolean grid.params[:desc]
end


86
87
88
89
90
91
92
93
94
95
# File 'lib/gitter/column.rb', line 86

def link label = nil, params = {}, options = {}
  label ||= headers.first.label
  if @order
    img = order_img_tag(options)
    label = grid.h. :span, img + label if ordered?
    grid.h.link_to label, order_params.deep_merge(params), options
  else
    label
  end
end

#orderedObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/gitter/column.rb', line 57

def ordered
  d = grid.filtered_driver

  return d unless ordered? 

  desc = case (p = grid.params[:desc])
    when true, 'true' then order_desc || true
    when false, 'false' then false 
    else p 
  end

  case order
  when :cell
    array_sort(d,desc){|model|cell model}
  when Proc
    array_sort(d,desc){|model|grid.eval(order,model)}
  else
    d.order order, desc
  end
end

#ordered?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/gitter/column.rb', line 82

def ordered?
  @ordered ||= grid.params[:order] == name.to_s
end

#to_sObject



97
98
99
# File 'lib/gitter/column.rb', line 97

def to_s
  "Column(#{name},ordered=#{ordered?},#{headers.size} headers)"
end