sorting_table_for 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.mdown +8 -0
- data/MIT-LICENSE +1 -1
- data/README.mdown +102 -75
- data/assets/config/initializers/sorting_table_for.rb +45 -0
- data/assets/public/images/sorting_table_for/bullet_arrow_down.png +0 -0
- data/assets/public/images/sorting_table_for/bullet_arrow_up.png +0 -0
- data/assets/public/images/sorting_table_for/bullet_black.png +0 -0
- data/assets/public/images/sorting_table_for/readme.txt +22 -0
- data/assets/public/stylesheets/sorting_table_for.css +13 -0
- data/lib/sorting_table_for.rb +7 -4
- data/lib/sorting_table_for/i18n.rb +9 -4
- data/lib/sorting_table_for/table_builder.rb +242 -15
- data/spec/helpers/builder_spec.rb +44 -0
- data/spec/helpers/caption_spec.rb +162 -0
- data/spec/helpers/column_spec.rb +41 -1
- data/spec/helpers/footer_spec.rb +267 -0
- data/spec/helpers/header_spec.rb +52 -2
- data/spec/locales/test.yml +4 -1
- data/spec/locales/test_rails3.yml +4 -0
- metadata +12 -5
- data/TODO +0 -4
@@ -13,7 +13,8 @@ module SortingTableFor
|
|
13
13
|
:default_boolean, :show_total_entries,
|
14
14
|
:params_sort_table, :i18n_default_format_date,
|
15
15
|
:html_sorting_class, :default_actions,
|
16
|
-
:i18n_default_scope, :i18n_add_header_action_scope
|
16
|
+
:i18n_default_scope, :i18n_add_header_action_scope,
|
17
|
+
:i18n_add_footer_action_scope
|
17
18
|
|
18
19
|
self.reserved_columns = [:id, :password, :salt]
|
19
20
|
self.currency_columns = [:price, :total_price, :currency, :money]
|
@@ -25,11 +26,12 @@ module SortingTableFor
|
|
25
26
|
self.default_actions = [:edit, :delete]
|
26
27
|
self.i18n_default_scope = [:namespace, :controller, :action]
|
27
28
|
self.i18n_add_header_action_scope = :header
|
29
|
+
self.i18n_add_footer_action_scope = :footer
|
28
30
|
|
29
31
|
def initialize(collection, object_or_array, template, options, params)
|
30
32
|
@collection, @@object_or_array, @@template, @@options, @@params = collection, object_or_array, template, options, params
|
31
|
-
I18n.set_options(params, model_name(@collection.first), object_or_array.first)
|
32
33
|
set_default_global_options
|
34
|
+
I18n.set_options(params, model_name(@collection.first), object_or_array.first, @@options[:i18n])
|
33
35
|
@lines = []
|
34
36
|
end
|
35
37
|
|
@@ -75,9 +77,10 @@ module SortingTableFor
|
|
75
77
|
#
|
76
78
|
# === Options
|
77
79
|
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
80
|
+
# * :sort - true of false to add or not sorting
|
81
|
+
# * :html - Hash options: class, id, ...
|
82
|
+
# * :caption - set caption on td
|
83
|
+
#
|
81
84
|
# # Html option:
|
82
85
|
# <% sorting_table_for @users do |table| do %>
|
83
86
|
# <%= table.headers :username, :firstname, :html => { :class => 'my_class', :id => 'my_id' }
|
@@ -170,6 +173,7 @@ module SortingTableFor
|
|
170
173
|
#
|
171
174
|
# * :sort - true of false to add or not sorting
|
172
175
|
# * :html - Hash options: class, id, ...
|
176
|
+
# * :caption - set caption on td
|
173
177
|
#
|
174
178
|
# === Values
|
175
179
|
#
|
@@ -243,6 +247,7 @@ module SortingTableFor
|
|
243
247
|
# * :actions - Set actions to render
|
244
248
|
# * :only - Columns only to render
|
245
249
|
# * :except - Columns to not render
|
250
|
+
# * :caption - set caption on td
|
246
251
|
#
|
247
252
|
# # Exemples:
|
248
253
|
# <% sorting_table_for @users do |table| %>
|
@@ -318,7 +323,7 @@ module SortingTableFor
|
|
318
323
|
#
|
319
324
|
# the values given to columns can be anything. Only the symbols are the values of the collection.
|
320
325
|
# If you give other types (string, image, ...) there won't be interpreted.
|
321
|
-
#
|
326
|
+
#
|
322
327
|
def columns(*args, &block)
|
323
328
|
column_options, html_options = get_column_and_html_options( args.extract_options! )
|
324
329
|
@collection.each do |object|
|
@@ -366,6 +371,7 @@ module SortingTableFor
|
|
366
371
|
# * :as - Force to render a type (:date, :time, :currency)
|
367
372
|
# * :format - Set the I18n localization format for :date or :time (:default, :short, ...)
|
368
373
|
# * :action - Set an action
|
374
|
+
# * :caption - set caption on td
|
369
375
|
#
|
370
376
|
# # Exemple:
|
371
377
|
# <% sorting_table_for @users do |table| %>
|
@@ -394,6 +400,170 @@ module SortingTableFor
|
|
394
400
|
nil
|
395
401
|
end
|
396
402
|
|
403
|
+
# Create a footer around tfoot and tr.
|
404
|
+
# It can be called with or without a block.
|
405
|
+
# These two exemples are equivalent:
|
406
|
+
#
|
407
|
+
# # With a list:
|
408
|
+
# <% sorting_table_for @users do |table| %>
|
409
|
+
# <%= table.footers :username, :firstname %>
|
410
|
+
# <% end %>
|
411
|
+
#
|
412
|
+
# # With a block:
|
413
|
+
# <% sorting_table_for @users do |table| %>
|
414
|
+
# <%= table.footers do %>
|
415
|
+
# <%= table.footer :username %>
|
416
|
+
# <%= table.footer :firstname %>
|
417
|
+
# <% end %>
|
418
|
+
# <% end %>
|
419
|
+
#
|
420
|
+
# # Output:
|
421
|
+
# <table class='sorting_table_for'>
|
422
|
+
# <tfoot>
|
423
|
+
# <tr>
|
424
|
+
# <td>...</td>
|
425
|
+
# <td>...</td>
|
426
|
+
# </tr>
|
427
|
+
# </tfoot>
|
428
|
+
# </table>
|
429
|
+
#
|
430
|
+
# === Options
|
431
|
+
#
|
432
|
+
# * :html - Hash options: class, id, ...
|
433
|
+
# * :caption - set caption on td
|
434
|
+
#
|
435
|
+
# # Exemples:
|
436
|
+
# <% sorting_table_for @users do |table| %>
|
437
|
+
# <%= table.columns :username, :cation => 5 %>
|
438
|
+
# <% end %>
|
439
|
+
#
|
440
|
+
# === I18n
|
441
|
+
#
|
442
|
+
# Add a value on scope for footer. Only with symbol.
|
443
|
+
#
|
444
|
+
# # Exemple of i18n_add_header_action_scope:
|
445
|
+
# SortingTableFor::TableBuilder.i18n_add_footer_action_scope = :footer
|
446
|
+
#
|
447
|
+
# # Ouput:
|
448
|
+
# I18n.t(:edit, :scope => [:current_controller, :current_action]) => en.current_controller.current_action.footer.edit
|
449
|
+
#
|
450
|
+
def footers(*args, &block)
|
451
|
+
column_options, html_options = get_column_and_html_options( args.extract_options! )
|
452
|
+
if block_given?
|
453
|
+
@footer_line = FormatLine.new(args, column_options, html_options, nil, :tfoot)
|
454
|
+
@@template.capture(&block)
|
455
|
+
else
|
456
|
+
@footer_line = FormatLine.new(args, column_options, html_options, @collection.first, :tfoot) if !args.empty?
|
457
|
+
end
|
458
|
+
render_tfoot
|
459
|
+
end
|
460
|
+
|
461
|
+
# Create a cell of footer, to have more control.
|
462
|
+
# It can be called with or without a block.
|
463
|
+
# The three exemples are equivalent:
|
464
|
+
#
|
465
|
+
# # With a block:
|
466
|
+
# <% sorting_table_for @users do |table| %>
|
467
|
+
# <%= table.footers do %>
|
468
|
+
# <%= table.footer :username %>
|
469
|
+
# <%= table.footer :firstname %>
|
470
|
+
# <% end %>
|
471
|
+
# <% end %>
|
472
|
+
#
|
473
|
+
# # With a block:
|
474
|
+
# <% sorting_table_for @users do |table| %>
|
475
|
+
# <%= table.footers do %>
|
476
|
+
# <%= table.footer do %>
|
477
|
+
# <%= :username %>
|
478
|
+
# <% end %>
|
479
|
+
# <%= table.footer do %>
|
480
|
+
# <%= :firstname %>
|
481
|
+
# <% end %>
|
482
|
+
# <% end %>
|
483
|
+
# <% end %>
|
484
|
+
#
|
485
|
+
# === Options
|
486
|
+
#
|
487
|
+
# * :html - Hash options: class, id, ...
|
488
|
+
# * :caption - set caption on td
|
489
|
+
#
|
490
|
+
# # Exemples:
|
491
|
+
# <% sorting_table_for @users do |table| %>
|
492
|
+
# <%= table.columns :username, :cation => 5 %>
|
493
|
+
# <% end %>
|
494
|
+
#
|
495
|
+
# === I18n
|
496
|
+
#
|
497
|
+
# Add a value on scope for footer. Only with symbol.
|
498
|
+
#
|
499
|
+
# # Exemple of i18n_add_header_action_scope:
|
500
|
+
# SortingTableFor::TableBuilder.i18n_add_footer_action_scope = :footer
|
501
|
+
#
|
502
|
+
# # Ouput:
|
503
|
+
# I18n.t(:edit, :scope => [:current_controller, :current_action]) => en.current_controller.current_action.footer.edit
|
504
|
+
#
|
505
|
+
# With block the value won't be interpreted.
|
506
|
+
#
|
507
|
+
def footer(*args, &block)
|
508
|
+
if block_given?
|
509
|
+
block = @@template.capture(&block)
|
510
|
+
@footer_line.add_cell(@collection.first, args, nil, block)
|
511
|
+
else
|
512
|
+
@footer_line.add_cell(@collection.first, args)
|
513
|
+
end
|
514
|
+
nil
|
515
|
+
end
|
516
|
+
|
517
|
+
# Create a tag caption to set a title to the table
|
518
|
+
# It can be called with or without a block.
|
519
|
+
# The two exemples are equivalent:
|
520
|
+
#
|
521
|
+
# # Without block
|
522
|
+
# <% sorting_table_for @users do |table| %>
|
523
|
+
# <%= table.caption 'hello' %>
|
524
|
+
# <% end %>
|
525
|
+
#
|
526
|
+
# # With block
|
527
|
+
# <% sorting_table_for @users do |table| %>
|
528
|
+
# <%= table.caption do %>
|
529
|
+
# 'hello'
|
530
|
+
# <% end %>
|
531
|
+
# <% end %>
|
532
|
+
#
|
533
|
+
# # Output:
|
534
|
+
# <table class='sorting_table_for'>
|
535
|
+
# <caption>hello</caption>
|
536
|
+
# </table>
|
537
|
+
#
|
538
|
+
# === Quick
|
539
|
+
#
|
540
|
+
# When called without a block or a value, caption is set with I18n translation.
|
541
|
+
#
|
542
|
+
# # Exemple of i18n_default_scope:
|
543
|
+
# SortingTableFor::TableBuilder.i18n_default_scope = [:controller, :action]
|
544
|
+
#
|
545
|
+
# # Ouput:
|
546
|
+
# I18n.t(:table_caption, :scope => [:current_controller, :current_action]) => en.current_controller.current_action.table_caption
|
547
|
+
#
|
548
|
+
# === Options
|
549
|
+
#
|
550
|
+
# * :position - To set the position of the caption: :top, :bottom, :left, :right (default: :top)
|
551
|
+
# * :html - Hash options: class, id, ...
|
552
|
+
#
|
553
|
+
# === Values
|
554
|
+
#
|
555
|
+
# All the values won't be interpreted.
|
556
|
+
#
|
557
|
+
def caption(*args, &block)
|
558
|
+
@caption[:option], @caption[:html] = get_column_and_html_options( args.extract_options! )
|
559
|
+
if block_given?
|
560
|
+
@caption[:value] = @@template.capture(&block)
|
561
|
+
else
|
562
|
+
@caption[:value] = (args.empty?) ? I18n.t(:table_caption) : args.first;
|
563
|
+
end
|
564
|
+
render_caption
|
565
|
+
end
|
566
|
+
|
397
567
|
protected
|
398
568
|
|
399
569
|
# Return the name of the model
|
@@ -403,6 +573,16 @@ module SortingTableFor
|
|
403
573
|
|
404
574
|
private
|
405
575
|
|
576
|
+
def render_caption
|
577
|
+
if @caption
|
578
|
+
if @caption.has_key? :option and @caption[:option].has_key? :position
|
579
|
+
@caption[:html].merge!(:align => @caption[:option][:position])
|
580
|
+
end
|
581
|
+
return Tools::html_safe(content_tag(:caption, @caption[:value], @caption[:html]))
|
582
|
+
end
|
583
|
+
''
|
584
|
+
end
|
585
|
+
|
406
586
|
# Return the balise thead and its content
|
407
587
|
def render_thead
|
408
588
|
if @header_line
|
@@ -419,10 +599,22 @@ module SortingTableFor
|
|
419
599
|
''
|
420
600
|
end
|
421
601
|
|
602
|
+
# Return the balise tfoot and its content
|
603
|
+
def render_tfoot
|
604
|
+
if @footer_line
|
605
|
+
return Tools::html_safe(content_tag(:tfoot, @footer_line.render_line))
|
606
|
+
end
|
607
|
+
''
|
608
|
+
end
|
609
|
+
|
422
610
|
# Set default global options
|
611
|
+
# init caption to a new hash
|
423
612
|
# Set sort to true if the value isn't defined in options
|
613
|
+
# Set i18n to true if the value isn't defined in options
|
424
614
|
def set_default_global_options
|
615
|
+
@caption = {}
|
425
616
|
@@options[:sort] = true if !defined?(@@options[:sort]) or !@@options.has_key? :sort
|
617
|
+
@@options[:i18n] = true if !defined?(@@options[:i18n]) or !@@options.has_key? :i18n
|
426
618
|
end
|
427
619
|
|
428
620
|
# Calculate the total entries
|
@@ -430,7 +622,9 @@ module SortingTableFor
|
|
430
622
|
def render_total_entries
|
431
623
|
if self.show_total_entries
|
432
624
|
total_entries = @collection.total_entries rescue @collection.size
|
433
|
-
|
625
|
+
header_total_cells = @header_line ? @header_line.total_cells : 0
|
626
|
+
max_cells = (@lines.first.total_cells > header_total_cells) ? @lines.first.total_cells : header_total_cells
|
627
|
+
return Tools::html_safe(content_tag(:tr, content_tag(:td, I18n.t(:total_entries, :scope => :sorting_table_for, :value => total_entries), {:colspan => max_cells}), { :class => 'total-entries' }))
|
434
628
|
end
|
435
629
|
''
|
436
630
|
end
|
@@ -459,18 +653,20 @@ module SortingTableFor
|
|
459
653
|
@cells << FormatCell.new(object, args, type, block)
|
460
654
|
end
|
461
655
|
|
462
|
-
# Return a tr line based on the type (:thead or :
|
656
|
+
# Return a tr line based on the type (:thead, :tbody or :tfoot)
|
463
657
|
def render_line
|
464
658
|
if @type == :thead
|
465
|
-
|
659
|
+
return content_tag(:tr, Tools::html_safe(@cells.collect { |cell| cell.render_cell_thead }.join), @html_options)
|
660
|
+
elsif @type == :tfoot
|
661
|
+
return content_tag(:tr, Tools::html_safe(@cells.collect { |cell| cell.render_cell_tfoot }.join), @html_options)
|
466
662
|
else
|
467
663
|
content_tag(:tr, Tools::html_safe(@cells.collect { |cell| cell.render_cell_tbody }.join), @html_options.merge(:class => "#{@html_options[:class]} #{@@template.cycle(:odd, :even)}".strip))
|
468
664
|
end
|
469
665
|
end
|
470
666
|
|
471
|
-
# Return
|
667
|
+
# Return the number of cells in line
|
472
668
|
def total_cells
|
473
|
-
@cells.size
|
669
|
+
@cells.size
|
474
670
|
end
|
475
671
|
|
476
672
|
protected
|
@@ -492,14 +688,34 @@ module SortingTableFor
|
|
492
688
|
def can_sort_column?(column)
|
493
689
|
model_have_column?(column)
|
494
690
|
end
|
495
|
-
|
691
|
+
|
692
|
+
# Options only for cells
|
693
|
+
def only_cell_option?(key)
|
694
|
+
[:colspan].include? key
|
695
|
+
end
|
696
|
+
|
697
|
+
# Format ask to send options to cell
|
698
|
+
def format_options_to_cell(ask, options = @column_options)
|
699
|
+
options.each do |key, value|
|
700
|
+
if only_cell_option?(key)
|
701
|
+
if ask.is_a? Hash
|
702
|
+
ask.merge!(key => value)
|
703
|
+
else
|
704
|
+
ask = [ask] unless ask.is_a? Array
|
705
|
+
(ask.last.is_a? Hash and ask.last.has_key? :html) ? ask.last[:html].merge!(key => value) : ask << { :html => { key => value }}
|
706
|
+
end
|
707
|
+
end
|
708
|
+
end
|
709
|
+
ask
|
710
|
+
end
|
711
|
+
|
496
712
|
private
|
497
713
|
|
498
714
|
# Call after headers or columns with no attributes (table.headers)
|
499
715
|
# Create all the cells based on each column in the model's database table
|
500
716
|
# Create cell's actions based on option default_actions or on actions given (:actions => [:edit])
|
501
717
|
def create_cells
|
502
|
-
@attributes.each { |ask| add_cell(@object, ask) }
|
718
|
+
@attributes.each { |ask| add_cell(@object, format_options_to_cell(ask)) }
|
503
719
|
if @args.empty?
|
504
720
|
TableBuilder.default_actions.each { |action| add_cell(@object, action, :action) }
|
505
721
|
else
|
@@ -568,7 +784,7 @@ module SortingTableFor
|
|
568
784
|
# Return a td with the formated value or action for headers
|
569
785
|
def render_cell_thead
|
570
786
|
if @ask
|
571
|
-
cell_value = (@ask.is_a?(Symbol)) ? I18n.t(@ask, {},
|
787
|
+
cell_value = (@ask.is_a?(Symbol)) ? I18n.t(@ask, {}, :header) : @ask
|
572
788
|
else
|
573
789
|
cell_value = @block
|
574
790
|
end
|
@@ -580,6 +796,16 @@ module SortingTableFor
|
|
580
796
|
end
|
581
797
|
end
|
582
798
|
|
799
|
+
def render_cell_tfoot
|
800
|
+
if @ask
|
801
|
+
cell_value = (@ask.is_a?(Symbol)) ? I18n.t(@ask, {}, :footer) : @ask
|
802
|
+
else
|
803
|
+
cell_value = @block
|
804
|
+
end
|
805
|
+
cell_value = action_link_to(@options[:action], cell_value) if @type != :action and @options.has_key?(:action)
|
806
|
+
content_tag(:td, cell_value, @html_options)
|
807
|
+
end
|
808
|
+
|
583
809
|
private
|
584
810
|
|
585
811
|
# Return options and html options for a cell
|
@@ -594,6 +820,7 @@ module SortingTableFor
|
|
594
820
|
def set_default_options
|
595
821
|
@html_options = {} unless defined? @html_options
|
596
822
|
@options = {} unless defined? @options
|
823
|
+
@html_options = format_options_to_cell(@html_options, @options)
|
597
824
|
@options[:sort] = @@options[:sort] if !@options.has_key? :sort
|
598
825
|
end
|
599
826
|
|
@@ -704,4 +931,4 @@ module SortingTableFor
|
|
704
931
|
end
|
705
932
|
|
706
933
|
end
|
707
|
-
end
|
934
|
+
end
|
@@ -42,6 +42,50 @@ describe SortingTableFor, :type => :helper do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
it "should no use i18n by default" do
|
46
|
+
helper.sorting_table_for(@users) do |table|
|
47
|
+
html = table.headers(:username)
|
48
|
+
html.should have_comp_tag("th:nth-child(1)", :text => 'Usernames')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should not use i18n" do
|
53
|
+
helper.sorting_table_for(@users, :i18n => false) do |table|
|
54
|
+
html = table.headers(:username)
|
55
|
+
html.should have_comp_tag("th:nth-child(1)", :text => 'username')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
45
59
|
end
|
60
|
+
|
61
|
+
describe " #All" do
|
46
62
|
|
63
|
+
it "should works with by default" do
|
64
|
+
helper.sorting_table_for(@users) do |table|
|
65
|
+
html = table.caption
|
66
|
+
html += table.headers
|
67
|
+
html += table.columns
|
68
|
+
html += table.footers :username
|
69
|
+
html.should have_comp_tag("caption", :count => 1)
|
70
|
+
html.should have_comp_tag("thead", :count => 1)
|
71
|
+
html.should have_comp_tag("tbody", :count => 1)
|
72
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should works with by default" do
|
77
|
+
helper.sorting_table_for(@users) do |table|
|
78
|
+
html = table.caption 'hello'
|
79
|
+
html += table.headers :username
|
80
|
+
html += table.columns :username
|
81
|
+
html += table.footers :username
|
82
|
+
html.should have_comp_tag("thead tr th", :count => 1)
|
83
|
+
html.should have_comp_tag("tbody tr td", :count => @users.count + 1)
|
84
|
+
html.should have_comp_tag("tbody tr[class=total-entries] td", :count => 1)
|
85
|
+
html.should have_comp_tag("tfoot tr td", :count => 1)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
47
91
|
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../fixtures/user')
|
5
|
+
|
6
|
+
include SortingTableForSpecHelper
|
7
|
+
|
8
|
+
describe SortingTableFor, :type => :helper do
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
@users = User.all
|
12
|
+
helper.stub!(:url_for).and_return('fake_link')
|
13
|
+
helper.stub!(:params).and_return({ :controller => 'fakes', :action => 'index' })
|
14
|
+
helper.output_buffer = ''
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ' #Caption' do
|
18
|
+
|
19
|
+
describe ' #Without block' do
|
20
|
+
|
21
|
+
it "should set caption tag" do
|
22
|
+
helper.sorting_table_for(@users) do |table|
|
23
|
+
html = table.caption
|
24
|
+
html.should have_comp_tag("caption", :count => 1)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set caption tag with arguments" do
|
29
|
+
helper.sorting_table_for(@users) do |table|
|
30
|
+
html = table.caption 'hello'
|
31
|
+
html.should have_comp_tag("caption", :text => 'hello')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should set caption tag with arguments and option position left" do
|
36
|
+
helper.sorting_table_for(@users) do |table|
|
37
|
+
html = table.caption 'hello', :position => :left
|
38
|
+
html.should have_comp_tag("caption[align=left]")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should set caption tag with arguments and option position bottom" do
|
43
|
+
helper.sorting_table_for(@users) do |table|
|
44
|
+
html = table.caption 'hello', :position => :bottom
|
45
|
+
html.should have_comp_tag("caption[align=bottom]")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should works with html options" do
|
50
|
+
helper.sorting_table_for(@users) do |table|
|
51
|
+
html = table.caption 'hello', :html => {:class => 'my_class', :id => 'my_id', :title => 'my_title'}
|
52
|
+
html.should have_comp_tag("caption[class=my_class][id=my_id][title=my_title]")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should works with html options and position option" do
|
57
|
+
helper.sorting_table_for(@users) do |table|
|
58
|
+
html = table.caption 'hello', :position => :right, :html => {:class => 'my_class', :id => 'my_id', :title => 'my_title'}
|
59
|
+
html.should have_comp_tag("caption[class=my_class][id=my_id][title=my_title][align=right]")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
describe ' #With block' do
|
66
|
+
|
67
|
+
it "should set caption tag" do
|
68
|
+
helper.sorting_table_for(@users) do |table|
|
69
|
+
html = table.caption {}
|
70
|
+
html.should have_comp_tag("caption", :count => 1)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should set caption tag with arguments" do
|
75
|
+
helper.sorting_table_for(@users) do |table|
|
76
|
+
html = table.caption do
|
77
|
+
'hello'
|
78
|
+
end
|
79
|
+
html.should have_comp_tag("caption", :text => 'hello')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should set caption tag with arguments and option position left" do
|
84
|
+
helper.sorting_table_for(@users) do |table|
|
85
|
+
html = table.caption :position => :left do
|
86
|
+
'hello'
|
87
|
+
end
|
88
|
+
html.should have_comp_tag("caption[align=left]")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should set caption tag with arguments and option position bottom" do
|
93
|
+
helper.sorting_table_for(@users) do |table|
|
94
|
+
html = table.caption :position => :bottom do
|
95
|
+
'hello'
|
96
|
+
end
|
97
|
+
html.should have_comp_tag("caption[align=bottom]")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should works with html options" do
|
102
|
+
helper.sorting_table_for(@users) do |table|
|
103
|
+
html = table.caption :html => {:class => 'my_class', :id => 'my_id', :title => 'my_title'} do
|
104
|
+
'hello'
|
105
|
+
end
|
106
|
+
html.should have_comp_tag("caption[class=my_class][id=my_id][title=my_title]")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should works with html options and position option" do
|
111
|
+
helper.sorting_table_for(@users) do |table|
|
112
|
+
html = table.caption :position => :right, :html => {:class => 'my_class', :id => 'my_id', :title => 'my_title'} do
|
113
|
+
'hello'
|
114
|
+
end
|
115
|
+
html.should have_comp_tag("caption[class=my_class][id=my_id][title=my_title][align=right]")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe " #Quick" do
|
123
|
+
|
124
|
+
it "should set caption tag with i18n translation" do
|
125
|
+
helper.sorting_table_for(@users) do |table|
|
126
|
+
html = table.caption
|
127
|
+
html.should have_comp_tag("caption", :count => 1)
|
128
|
+
html.should have_comp_tag("caption", :text => 'Quick Caption')
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should set caption tag with arguments and option position left" do
|
133
|
+
helper.sorting_table_for(@users) do |table|
|
134
|
+
html = table.caption :position => :left
|
135
|
+
html.should have_comp_tag("caption[align=left]")
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should set caption tag with arguments and option position bottom" do
|
140
|
+
helper.sorting_table_for(@users) do |table|
|
141
|
+
html = table.caption :position => :bottom
|
142
|
+
html.should have_comp_tag("caption[align=bottom]")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should works with html options" do
|
147
|
+
helper.sorting_table_for(@users) do |table|
|
148
|
+
html = table.caption :html => {:class => 'my_class', :id => 'my_id', :title => 'my_title'}
|
149
|
+
html.should have_comp_tag("caption[class=my_class][id=my_id][title=my_title]")
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should works with html options and position option" do
|
154
|
+
helper.sorting_table_for(@users) do |table|
|
155
|
+
html = table.caption :position => :right, :html => {:class => 'my_class', :id => 'my_id', :title => 'my_title'}
|
156
|
+
html.should have_comp_tag("caption[class=my_class][id=my_id][title=my_title][align=right]")
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|