tableficate 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.markdown +120 -0
  5. data/Rakefile +1 -0
  6. data/app/views/tableficate/_column_header.html.erb +8 -0
  7. data/app/views/tableficate/_data.html.erb +1 -0
  8. data/app/views/tableficate/_input_filter.html.erb +4 -0
  9. data/app/views/tableficate/_input_range_filter.html.erb +6 -0
  10. data/app/views/tableficate/_row.html.erb +5 -0
  11. data/app/views/tableficate/_select_filter.html.erb +4 -0
  12. data/app/views/tableficate/_table.html.erb +36 -0
  13. data/changelog.markdown +2 -0
  14. data/lib/generators/tableficate/table/table_generator.rb +17 -0
  15. data/lib/generators/tableficate/table/templates/table.rb +5 -0
  16. data/lib/generators/tableficate/theme/theme_generator.rb +15 -0
  17. data/lib/tableficate/action_column.rb +15 -0
  18. data/lib/tableficate/active_record_extension.rb +20 -0
  19. data/lib/tableficate/base.rb +37 -0
  20. data/lib/tableficate/column.rb +33 -0
  21. data/lib/tableficate/engine.rb +4 -0
  22. data/lib/tableficate/exceptions.rb +3 -0
  23. data/lib/tableficate/filters/filter.rb +19 -0
  24. data/lib/tableficate/filters/input_filters.rb +64 -0
  25. data/lib/tableficate/filters/select_filter.rb +11 -0
  26. data/lib/tableficate/finder.rb +79 -0
  27. data/lib/tableficate/helper.rb +37 -0
  28. data/lib/tableficate/table.rb +57 -0
  29. data/lib/tableficate/utils.rb +7 -0
  30. data/lib/tableficate/version.rb +3 -0
  31. data/lib/tableficate.rb +17 -0
  32. data/spec/action_column_spec.rb +21 -0
  33. data/spec/active_record_extension_spec.rb +9 -0
  34. data/spec/base_spec.rb +103 -0
  35. data/spec/column_spec.rb +54 -0
  36. data/spec/filter_spec.rb +30 -0
  37. data/spec/finder_spec.rb +35 -0
  38. data/spec/input_filter_spec.rb +90 -0
  39. data/spec/select_filter_spec.rb +10 -0
  40. data/spec/spec_helper.rb +3 -0
  41. data/spec/table_spec.rb +94 -0
  42. data/spec/test_app/.gitignore +4 -0
  43. data/spec/test_app/Gemfile +21 -0
  44. data/spec/test_app/README +261 -0
  45. data/spec/test_app/Rakefile +7 -0
  46. data/spec/test_app/app/assets/images/rails.png +0 -0
  47. data/spec/test_app/app/assets/javascripts/application.js +9 -0
  48. data/spec/test_app/app/assets/stylesheets/application.css +7 -0
  49. data/spec/test_app/app/controllers/application_controller.rb +3 -0
  50. data/spec/test_app/app/helpers/application_helper.rb +2 -0
  51. data/spec/test_app/app/mailers/.gitkeep +0 -0
  52. data/spec/test_app/app/models/.gitkeep +0 -0
  53. data/spec/test_app/app/models/nobel_prize.rb +3 -0
  54. data/spec/test_app/app/models/nobel_prize_winner.rb +3 -0
  55. data/spec/test_app/app/views/layouts/application.html.erb +14 -0
  56. data/spec/test_app/config/application.rb +48 -0
  57. data/spec/test_app/config/boot.rb +6 -0
  58. data/spec/test_app/config/database.yml +25 -0
  59. data/spec/test_app/config/environment.rb +5 -0
  60. data/spec/test_app/config/environments/development.rb +30 -0
  61. data/spec/test_app/config/environments/production.rb +60 -0
  62. data/spec/test_app/config/environments/test.rb +42 -0
  63. data/spec/test_app/config/initializers/backtrace_silencers.rb +7 -0
  64. data/spec/test_app/config/initializers/inflections.rb +10 -0
  65. data/spec/test_app/config/initializers/mime_types.rb +5 -0
  66. data/spec/test_app/config/initializers/secret_token.rb +7 -0
  67. data/spec/test_app/config/initializers/session_store.rb +8 -0
  68. data/spec/test_app/config/initializers/wrap_parameters.rb +14 -0
  69. data/spec/test_app/config/locales/en.yml +5 -0
  70. data/spec/test_app/config/routes.rb +58 -0
  71. data/spec/test_app/config.ru +4 -0
  72. data/spec/test_app/db/migrate/20111007154222_create_nobel_prize_winners.rb +30 -0
  73. data/spec/test_app/db/migrate/20111010191626_create_nobel_prizes.rb +34 -0
  74. data/spec/test_app/db/schema.rb +27 -0
  75. data/spec/test_app/db/seeds.rb +7 -0
  76. data/spec/test_app/db/test.sqlite3 +0 -0
  77. data/spec/test_app/doc/README_FOR_APP +2 -0
  78. data/spec/test_app/lib/assets/.gitkeep +0 -0
  79. data/spec/test_app/lib/tasks/.gitkeep +0 -0
  80. data/spec/test_app/log/.gitkeep +0 -0
  81. data/spec/test_app/public/404.html +26 -0
  82. data/spec/test_app/public/422.html +26 -0
  83. data/spec/test_app/public/500.html +26 -0
  84. data/spec/test_app/public/favicon.ico +0 -0
  85. data/spec/test_app/public/index.html +241 -0
  86. data/spec/test_app/public/robots.txt +5 -0
  87. data/spec/test_app/script/rails +6 -0
  88. data/spec/test_app/vendor/assets/stylesheets/.gitkeep +0 -0
  89. data/spec/test_app/vendor/plugins/.gitkeep +0 -0
  90. data/spec/utils_spec.rb +11 -0
  91. data/tableficate.gemspec +26 -0
  92. metadata +245 -0
@@ -0,0 +1,7 @@
1
+ module Tableficate
2
+ module Utils
3
+ def self.template_path(template, theme = '')
4
+ File.join(['tableficate', theme, template].delete_if(&:blank?))
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Tableficate
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'tableficate/engine'
2
+ require 'tableficate/exceptions'
3
+ require 'tableficate/utils'
4
+ require 'tableficate/finder'
5
+ require 'tableficate/column'
6
+ require 'tableficate/action_column'
7
+ require 'tableficate/filters/filter'
8
+ require 'tableficate/filters/input_filters'
9
+ require 'tableficate/filters/select_filter'
10
+ require 'tableficate/table'
11
+ require 'tableficate/helper'
12
+ require 'tableficate/base'
13
+ require 'tableficate/active_record_extension'
14
+ require 'tableficate/version'
15
+
16
+ ActionView::Base.send(:include, Tableficate::Helper)
17
+ ActiveRecord::Base.send(:include, Tableficate::ActiveRecordExtension)
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::ActionColumn do
4
+ before(:all) do
5
+ @action_column = Tableficate::ActionColumn.new(nil, nil) do
6
+ Actions!
7
+ end
8
+ end
9
+
10
+ it 'should always have sorting off ' do
11
+ @action_column.show_sort?.should be false
12
+ end
13
+
14
+ it 'should always indicate that it is not sorted' do
15
+ @action_column.is_sorted?.should be false
16
+ end
17
+
18
+ it 'should have a blank name' do
19
+ @action_column.name.should == ''
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Tableficate::ActiveRecordExtention' do
4
+ it 'should add and retreive data from the scope' do
5
+ scope = NobelPrizeWinner.tableficate_ext
6
+ scope.tableficate_add_data(:name, 'Aaron')
7
+ scope.tableficate_get_data.should == {name: 'Aaron'}
8
+ end
9
+ end
data/spec/base_spec.rb ADDED
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::Base do
4
+ it 'should set the scope' do
5
+ class SymbolScope < Tableficate::Base
6
+ scope(:nobel_prize_winner)
7
+ end
8
+ SymbolScope.send(:instance_variable_get, '@scope').should == NobelPrizeWinner
9
+
10
+ class BlockScope < Tableficate::Base
11
+ scope do
12
+ NobelPrizeWinner.joins(:nobel_prizes)
13
+ end
14
+ end
15
+ BlockScope.send(:instance_variable_get, '@scope').should == NobelPrizeWinner.joins(:nobel_prizes)
16
+
17
+ class NoScope < Tableficate::Base; end
18
+ lambda {NoScope.tableficate({})}.should raise_error(Tableficate::MissingScope)
19
+ end
20
+
21
+ it 'should allow for a default order' do
22
+ class DefaultOrder < Tableficate::Base
23
+ scope(:nobel_prize_winner)
24
+
25
+ default_sort(:first_name)
26
+ end
27
+ npw = DefaultOrder.tableficate({})
28
+ npw.order_values.should == ["#{npw.table_name}.first_name ASC"]
29
+ npw.reverse_order_value.should == nil
30
+
31
+ class DefaultOrderDesc < Tableficate::Base
32
+ scope(:nobel_prize_winner)
33
+
34
+ default_sort(:first_name, 'desc')
35
+ end
36
+ npw = DefaultOrderDesc.tableficate({})
37
+ npw.order_values.should == ["#{npw.table_name}.first_name ASC"]
38
+ npw.reverse_order_value.should be true
39
+
40
+ class DefaultOrderWithOverride < Tableficate::Base
41
+ scope(:nobel_prize_winner)
42
+
43
+ default_sort(:full_name)
44
+
45
+ column(:full_name, sort: 'first_name ASC, last_name ASC')
46
+ end
47
+ npw = DefaultOrderWithOverride.tableficate({})
48
+ npw.order_values.should == ["first_name ASC, last_name ASC"]
49
+ npw.reverse_order_value.should == nil
50
+
51
+ class DefaultOrderWithOverrideDesc < Tableficate::Base
52
+ scope(:nobel_prize_winner)
53
+
54
+ default_sort(:full_name, 'desc')
55
+
56
+ column(:full_name, sort: 'first_name ASC, last_name ASC')
57
+ end
58
+ npw = DefaultOrderWithOverrideDesc.tableficate({})
59
+ npw.order_values.should == ["first_name ASC, last_name ASC"]
60
+ npw.reverse_order_value.should be true
61
+ end
62
+
63
+ it 'should filter using match: "contains"' do
64
+ class FilterByContainsInput < Tableficate::Base
65
+ scope(:nobel_prize_winner)
66
+
67
+ filter(:first_name, match: 'contains')
68
+ end
69
+ npw = FilterByContainsInput.tableficate({filter: {first_name: 'Al'}})
70
+ npw.size.should == 1
71
+ npw.first.first_name.should == 'Albert'
72
+ end
73
+
74
+ it 'should filter multiple inputs using match: "contains"' do
75
+ class FilterByContainsInput < Tableficate::Base
76
+ scope(:nobel_prize_winner)
77
+
78
+ filter(:first_name, match: 'contains')
79
+ end
80
+ npw = FilterByContainsInput.tableficate({filter: {first_name: ['Al', 'Mar']}})
81
+ npw.size.should == 2
82
+ npw.first.first_name.should == 'Albert'
83
+ npw.last.first_name.should == 'Marie'
84
+ end
85
+
86
+ it 'should allow custom block filters' do
87
+ class BlockFilter < Tableficate::Base
88
+ scope(:nobel_prize_winner)
89
+
90
+ filter(:full_name) do |value, scope|
91
+ first_name, last_name = value.split(/\s+/)
92
+
93
+ if last_name.nil?
94
+ scope.where(['first_name LIKE ? OR last_name LIKE ?', first_name, first_name])
95
+ else
96
+ scope.where(['first_name LIKE ? AND last_name LIKE ?', first_name, last_name])
97
+ end
98
+ end
99
+ end
100
+ npw = BlockFilter.tableficate({filter: {full_name: 'Bohr'}})
101
+ npw.first.first_name.should == 'Niels'
102
+ end
103
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::Column do
4
+ it 'should show the header provided or default to the column name' do
5
+ column = Tableficate::Column.new(nil, :first_name)
6
+ column.header.should == 'First Name'
7
+
8
+ column = Tableficate::Column.new(nil, :first_name, header: 'Given Name')
9
+ column.header.should == 'Given Name'
10
+ end
11
+
12
+ it 'should show the value from the database field if no alternative is provided' do
13
+ row = NobelPrizeWinner.find_by_first_name('Norman')
14
+ column = Tableficate::Column.new(nil, :first_name)
15
+
16
+ column.value(row).should == 'Norman'
17
+ end
18
+ it 'should return the value provided from the block' do
19
+ row = NobelPrizeWinner.find_by_first_name_and_last_name('Norman', 'Borlaug')
20
+ column = Tableficate::Column.new(nil, :full_name) do |row|
21
+ [row.first_name, row.last_name].join(' ')
22
+ end
23
+
24
+ column.value(row).should == 'Norman Borlaug'
25
+ end
26
+
27
+ it 'should allow sorting to be turned on and off' do
28
+ column = Tableficate::Column.new(nil, :first_name, show_sort: false)
29
+ column.show_sort?.should be false
30
+
31
+ column = Tableficate::Column.new(nil, :first_name, show_sort: true)
32
+ column.show_sort?.should be true
33
+
34
+ # defaults to false
35
+ column = Tableficate::Column.new(nil, :first_name)
36
+ column.show_sort?.should be false
37
+ end
38
+
39
+ it 'should indicate whether a column is sorted or not' do
40
+ table = Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {}, {current_sort: {column: :first_name, dir: 'asc'}})
41
+
42
+ column = Tableficate::Column.new(table, :first_name)
43
+ column.is_sorted?('asc').should be true
44
+
45
+ column = Tableficate::Column.new(table, :first_name)
46
+ column.is_sorted?('desc').should be false
47
+
48
+ column = Tableficate::Column.new(table, :first_name)
49
+ column.is_sorted?.should be true
50
+
51
+ column = Tableficate::Column.new(table, :last_name)
52
+ column.is_sorted?.should be false
53
+ end
54
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::Filter do
4
+ before(:all) do
5
+ @table = Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {}, {})
6
+ @table.column(:first_name, header: 'Given Name')
7
+ end
8
+
9
+ it 'should find the correct template type' do
10
+ Tableficate::Filter.new(@table, :first_name).template.should == 'filter'
11
+ end
12
+
13
+ it 'should use the provided label or default to the column header' do
14
+ Tableficate::Filter.new(@table, :first_name).label.should == 'Given Name'
15
+ Tableficate::Filter.new(@table, :first_name, label: 'First').label.should == 'First'
16
+ end
17
+
18
+ it 'should provide a field name' do
19
+ Tableficate::Filter.new(@table, :first_name).field_name.should == "#{@table.as}[filter][first_name]"
20
+ end
21
+
22
+ it 'should provide a field value when given params or a blank value' do
23
+ Tableficate::Filter.new(@table, :first_name).field_value({filter: {first_name: 'Aaron'}}).should == 'Aaron'
24
+ Tableficate::Filter.new(@table, :first_name).field_value({}).should == ''
25
+ end
26
+
27
+ it 'should allow for filters that do not match a particular field' do
28
+ Tableficate::Filter.new(@table, :custom_field).label.should == 'Custom Field'
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::Finder do
4
+ it 'should filter based on single input passed in' do
5
+ # exact input
6
+ npw = NobelPrizeWinner.tableficate({filter: {first_name: 'Albert'}})
7
+ npw.size.should == 1
8
+ npw.first.first_name.should == 'Albert'
9
+ npw = NobelPrizeWinner.tableficate({filter: {first_name: 'Al'}})
10
+ npw.size.should == 0
11
+ end
12
+
13
+ it 'should filter based on multiple inputs passed in' do
14
+ npw = NobelPrizeWinner.tableficate({filter: {first_name: ['Albert', 'Marie']}})
15
+ npw.size.should == 2
16
+ npw.first.first_name.should == 'Albert'
17
+ npw.last.first_name.should == 'Marie'
18
+ npw = NobelPrizeWinner.tableficate({filter: {first_name: ['Al', 'Mar']}})
19
+ npw.size.should == 0
20
+ end
21
+
22
+ it 'should attach the table name to the fields from the primary table to avoid ambiguity' do
23
+ npw = NobelPrizeWinner.joins(:nobel_prizes).tableficate({sort: 'first_name'})
24
+ npw.order_values.should == ["#{npw.table_name}.first_name ASC"]
25
+
26
+ # secondary table fields are left vague for maximum flexibility
27
+ npw = NobelPrizeWinner.joins(:nobel_prizes).tableficate({sort: 'year'})
28
+ npw.order_values.should == ["year ASC"]
29
+ end
30
+
31
+ it 'should allow ranged input filters' do
32
+ np = NobelPrize.tableficate({filter: {year: {start: 1900, stop: 1930}}})
33
+ np.size.should == 4
34
+ end
35
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::InputFilter do
4
+ before(:all) do
5
+ @table = Tableficate::Table.new(nil, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
6
+ @table.column(:first_name)
7
+ end
8
+
9
+ it 'should find the correct template type' do
10
+ Tableficate::InputFilter.new(@table, :first_name).template.should == 'input_filter'
11
+
12
+ Tableficate::InputFilter.new(@table, :first_name, field_options: {type: 'email'}).template.should == 'input_filter'
13
+
14
+ file = File.open('app/views/tableficate/_email_input_filter.html.erb', 'w')
15
+ Tableficate::InputFilter.new(@table, :first_name, field_options: {type: 'email'}).template.should == 'email_input_filter'
16
+ File.delete(file.path)
17
+
18
+ file = File.open('app/views/tableficate/_email_input_filter.html.haml', 'w')
19
+ Tableficate::InputFilter.new(@table, :first_name, field_options: {type: 'email'}).template.should == 'email_input_filter'
20
+ File.delete(file.path)
21
+ end
22
+ end
23
+
24
+ describe Tableficate::InputStartFilter do
25
+ before(:all) do
26
+ @table = Tableficate::Table.new(nil, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
27
+ @table.column(:year)
28
+ end
29
+
30
+ it 'should append "[start]" to field_name' do
31
+ Tableficate::InputStartFilter.new(@table, :year).field_name == "#{@table.as}[filter][year][start]"
32
+ end
33
+
34
+ it 'should append "_start" to the name' do
35
+ Tableficate::InputStartFilter.new(@table, :year).name == :year_start
36
+ end
37
+
38
+ it 'should provide a field value when given params or a blank value' do
39
+ Tableficate::InputStartFilter.new(@table, :year).field_value({filter: {year: {start: '2011'}}}).should == '2011'
40
+ Tableficate::InputStartFilter.new(@table, :year).field_value({}).should == ''
41
+ end
42
+ end
43
+
44
+ describe Tableficate::InputStopFilter do
45
+ before(:all) do
46
+ @table = Tableficate::Table.new(nil, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
47
+ @table.column(:year)
48
+ end
49
+
50
+ it 'should append "[stop]" to field_name' do
51
+ Tableficate::InputStopFilter.new(@table, :year).field_name == "#{@table.as}[filter][year][stop]"
52
+ end
53
+
54
+ it 'should append "_stop" to the name' do
55
+ Tableficate::InputStopFilter.new(@table, :year).name == :year_stop
56
+ end
57
+
58
+ it 'should provide a field value when given params or a blank value' do
59
+ Tableficate::InputStopFilter.new(@table, :year).field_value({filter: {year: {stop: '2011'}}}).should == '2011'
60
+ Tableficate::InputStopFilter.new(@table, :year).field_value({}).should == ''
61
+ end
62
+ end
63
+
64
+ describe Tableficate::InputRangeFilter do
65
+ before(:all) do
66
+ @table = Tableficate::Table.new(nil, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
67
+ @table.column(:year)
68
+ end
69
+
70
+ it 'should find the correct template type' do
71
+ Tableficate::InputRangeFilter.new(@table, :year).template.should == 'input_range_filter'
72
+ end
73
+
74
+ it 'should create a start and stop input' do
75
+ filter = Tableficate::InputRangeFilter.new(@table, :year)
76
+
77
+ filter.start.is_a?(Tableficate::InputStartFilter).should be true
78
+ filter.stop.is_a?(Tableficate::InputStopFilter).should be true
79
+ end
80
+
81
+ it 'should use the :start and :stop option hashes for the individual filters and default any values not passed to the range options provided' do
82
+ filter = Tableficate::InputRangeFilter.new(@table, :year, label: 'Nobel Prize Won In')
83
+ filter.start.label.should == 'Nobel Prize Won In'
84
+ filter.stop.label.should == 'Nobel Prize Won In'
85
+
86
+ filter = Tableficate::InputRangeFilter.new(@table, :birth_date, label: 'Nobel Prize Won In', start: {label: 'Nobel Prize Won Between'}, stop: {label: 'and'})
87
+ filter.start.label.should == 'Nobel Prize Won Between'
88
+ filter.stop.label.should == 'and'
89
+ end
90
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::SelectFilter do
4
+ it 'should find the correct template type' do
5
+ table = Tableficate::Table.new(nil, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
6
+ table.column(:year)
7
+
8
+ Tableficate::SelectFilter.new(table, :year, []).template.should == 'select_filter'
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+
3
+ require File.expand_path("../test_app/config/environment", __FILE__)
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tableficate::Table do
4
+ before(:each) do
5
+ @table = Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {}, {current_sort: {column: :first_name, dir: 'asc'}})
6
+ end
7
+
8
+ it 'should have the current sort if provided' do
9
+ @table.current_sort.should == {column: :first_name, dir: 'asc'}
10
+ end
11
+
12
+ it 'should use the :as option or default to the table_name of the scope' do
13
+ Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {as: 'npw'}, {}).as.should == 'npw'
14
+ @table.as.should == 'nobel_prize_winners'
15
+ end
16
+
17
+ it 'should add a Column' do
18
+ @table.column(:first_name)
19
+ @table.column(:last_name)
20
+
21
+ @table.columns.first.name.should == :first_name
22
+ @table.columns.first.is_a?(Tableficate::Column).should be true
23
+ @table.columns.last.name.should == :last_name
24
+ end
25
+
26
+ it 'should indicate that it is sortble if any column is sortable' do
27
+ @table.column(:first_name)
28
+ @table.show_sort?.should be false
29
+
30
+ @table.column(:last_name, show_sort: true)
31
+ @table.show_sort?.should be true
32
+ end
33
+
34
+ it 'should overwrite the column sorting unless it is provided' do
35
+ @table.column(:first_name)
36
+ @table.column(:last_name, show_sort: true)
37
+
38
+ @table.columns.first.show_sort?.should be false
39
+ @table.columns.last.show_sort?.should be true
40
+
41
+ table = Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {show_sorts: true}, {})
42
+ table.column(:first_name)
43
+ table.column(:last_name, show_sort: false)
44
+
45
+ table.columns.first.show_sort?.should be true
46
+ table.columns.last.show_sort?.should be false
47
+ end
48
+
49
+ it 'should add an ActionColumn' do
50
+ @table.actions do
51
+ Action!
52
+ end
53
+
54
+ @table.columns.first.is_a?(Tableficate::ActionColumn).should be true
55
+ end
56
+
57
+ it 'should determine whether any columns are sortable' do
58
+ @table.column(:first_name, show_sort: true)
59
+
60
+ @table.show_sort?.should be true
61
+
62
+ table = Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {show_sorts: true}, {})
63
+ table.column(:first_name, show_sort: false)
64
+
65
+ table.show_sort?.should be false
66
+ end
67
+
68
+ it 'should add an InputFilter' do
69
+ @table.input_filter(:first_name, label: 'First')
70
+ @table.input_filter(:last_name, label: 'Last')
71
+
72
+ @table.filters.first.name.should == :first_name
73
+ @table.filters.first.is_a?(Tableficate::InputFilter).should be true
74
+ @table.filters.last.name.should == :last_name
75
+ end
76
+
77
+ it 'should add an InputRangeFilter' do
78
+ @table.input_range_filter(:first_name, label: 'First')
79
+ @table.input_range_filter(:last_name, label: 'Last')
80
+
81
+ @table.filters.first.name.should == :first_name
82
+ @table.filters.first.is_a?(Tableficate::InputRangeFilter).should be true
83
+ @table.filters.last.name.should == :last_name
84
+ end
85
+
86
+ it 'should add an SelectFilter' do
87
+ @table.select_filter(:first_name, {}, label: 'First')
88
+ @table.select_filter(:last_name, {}, label: 'Last')
89
+
90
+ @table.filters.first.name.should == :first_name
91
+ @table.filters.first.is_a?(Tableficate::SelectFilter).should be true
92
+ @table.filters.last.name.should == :last_name
93
+ end
94
+ end
@@ -0,0 +1,4 @@
1
+ .bundle
2
+ log/*.log
3
+ tmp/
4
+ .sass-cache/
@@ -0,0 +1,21 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '3.1.0'
4
+
5
+ gem 'sqlite3'
6
+
7
+ group :assets do
8
+ gem 'sass-rails', '~> 3.1.0'
9
+ gem 'coffee-rails', '~> 3.1.0'
10
+ gem 'uglifier'
11
+ end
12
+
13
+ gem 'jquery-rails'
14
+
15
+ gem 'tableficate', path: '../../'
16
+
17
+ group :test do
18
+ gem 'turn', :require => false
19
+ gem 'rspec'
20
+ gem 'capybara'
21
+ end