tabulatr2 0.8.9 → 0.9.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/Gemfile +1 -1
- data/README.md +72 -46
- data/app/assets/javascripts/tabulatr/application.js +197 -114
- data/app/views/tabulatr/_tabulatr_filter_dialog.html.slim +2 -2
- data/app/views/tabulatr/_tabulatr_filter_menu.html.slim +2 -2
- data/app/views/tabulatr/_tabulatr_fuzzy_search_field.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_static_table.html.slim +2 -2
- data/lib/tabulatr/data/data.rb +2 -1
- data/lib/tabulatr/data/dsl.rb +13 -2
- data/lib/tabulatr/data/filtering.rb +16 -11
- data/lib/tabulatr/data/formatting.rb +9 -1
- data/lib/tabulatr/data/row.rb +8 -0
- data/lib/tabulatr/data/sorting.rb +1 -1
- data/lib/tabulatr/generators/tabulatr/templates/tabulatr_data.rb +11 -17
- data/lib/tabulatr/json_builder.rb +8 -6
- data/lib/tabulatr/rails/action_view.rb +2 -2
- data/lib/tabulatr/renderer/association.rb +1 -1
- data/lib/tabulatr/renderer/checkbox.rb +1 -1
- data/lib/tabulatr/renderer/columns_from_block.rb +1 -1
- data/lib/tabulatr/renderer/renderer.rb +14 -4
- data/lib/tabulatr/utility/request_data_not_included_error.rb +9 -0
- data/lib/tabulatr/version.rb +1 -1
- data/spec/dummy/app/tabulatr_data/product_tabulatr_data.rb +8 -4
- data/spec/dummy/app/views/products/simple_index.html.erb +3 -10
- data/spec/dummy/app/views/products/with_styling.html.erb +1 -1
- data/spec/dummy/config/application.rb +1 -1
- data/spec/features/tabulatrs_spec.rb +1 -1
- metadata +6 -4
- data/lib/tabulatr/renderer/columns.rb +0 -41
@@ -22,8 +22,8 @@
|
|
22
22
|
|
23
23
|
form.form.form-horizontal.tabulatr_filter_form data-table=table_id data-remote="true" role='form'
|
24
24
|
input name="#{formatted_name}_sort" type="hidden" value=table_options[:order_by]
|
25
|
-
- if table_options[:filter] && columns.
|
26
|
-
- columns.
|
25
|
+
- if table_options[:filter] && columns.select(&:filter).present?
|
26
|
+
- columns.select(&:filter).each do |column|
|
27
27
|
- name = column.full_name
|
28
28
|
.control-group.form-group data-filter-column-name=name
|
29
29
|
- iname = "#{formatted_name}_filter[#{name}]"
|
@@ -19,12 +19,12 @@
|
|
19
19
|
/ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
20
|
/ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
21
|
|
22
|
-
- if table_options[:filter] && columns.
|
22
|
+
- if table_options[:filter] && columns.select(&:filter).present?
|
23
23
|
.dropdown
|
24
24
|
a.btn.btn-default data-toggle="dropdown" href="#"
|
25
25
|
i.icon-filter.glyphicon.glyphicon-filter.fa.fa-filter'
|
26
26
|
i.icon-caret-down.glyphicon.glyphicon-caret-down.fa.fa-caret-down
|
27
27
|
ul.dropdown-menu role="menu" aria-labelledby="dLabel"
|
28
|
-
- columns.
|
28
|
+
- columns.select(&:filter).each do |column|
|
29
29
|
li
|
30
30
|
= link_to column.human_name, '#', "data-show-table-filter" => column.full_name
|
@@ -19,6 +19,6 @@
|
|
19
19
|
/ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
20
|
/ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
21
|
|
22
|
-
form
|
22
|
+
form.form-inline.tabulatr-fuzzy-search.pull-right data-table=table_id role="form"
|
23
23
|
.form-group
|
24
24
|
input.form-control.search id="#{formatted_name}_fuzzy_search_query" placeholder="Search" type="search"
|
@@ -19,7 +19,7 @@
|
|
19
19
|
/ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
20
|
/ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
21
|
|
22
|
-
table.table.tabulatr_table
|
22
|
+
table.table.tabulatr_table.tabulatr_static_table
|
23
23
|
thead
|
24
24
|
tr
|
25
25
|
- columns.each do |column|
|
@@ -27,7 +27,7 @@ table.table.tabulatr_table
|
|
27
27
|
= column.human_name
|
28
28
|
tbody
|
29
29
|
- records.each do |record|
|
30
|
-
tr
|
30
|
+
tr data-id=record.try(:id)
|
31
31
|
- columns.each do |column|
|
32
32
|
td data-tabulatr-column-name=column.full_name data-tabulatr-type=column.coltype style=column.cell_style
|
33
33
|
= column.value_for(record, self)
|
data/lib/tabulatr/data/data.rb
CHANGED
@@ -33,7 +33,7 @@ class Tabulatr::Data
|
|
33
33
|
@includes = Set.new()
|
34
34
|
@cname = @base.name.downcase
|
35
35
|
@batch_actions = nil
|
36
|
-
|
36
|
+
@row = self.class.instance_variable_get('@row')
|
37
37
|
table_columns.map do |col|
|
38
38
|
col.klass = @base
|
39
39
|
end
|
@@ -139,4 +139,5 @@ require_relative './invoker'
|
|
139
139
|
require_relative './sorting'
|
140
140
|
require_relative './pagination'
|
141
141
|
require_relative './formatting'
|
142
|
+
require_relative './row'
|
142
143
|
require_relative './proxy'
|
data/lib/tabulatr/data/dsl.rb
CHANGED
@@ -26,7 +26,7 @@ module Tabulatr::Data::DSL
|
|
26
26
|
def column(name, sort_sql: nil, filter_sql: nil, sql: nil, table_column_options: {}, &block)
|
27
27
|
@columns ||= HashWithIndifferentAccess.new
|
28
28
|
table_column = Tabulatr::Renderer::Column.from(table_column_options.merge(name: name, klass: @base))
|
29
|
-
@table_columns ||=
|
29
|
+
@table_columns ||= []
|
30
30
|
@table_columns << table_column
|
31
31
|
|
32
32
|
@columns[name.to_sym] = {
|
@@ -41,7 +41,7 @@ module Tabulatr::Data::DSL
|
|
41
41
|
def association(assoc, name, sort_sql: nil, filter_sql: nil, sql: nil, table_column_options: {}, &block)
|
42
42
|
@assocs ||= HashWithIndifferentAccess.new
|
43
43
|
@assocs[assoc.to_sym] ||= {}
|
44
|
-
@table_columns ||=
|
44
|
+
@table_columns ||= []
|
45
45
|
table_column = Tabulatr::Renderer::Association.from(table_column_options.merge(name: name, table_name: assoc, klass: @base))
|
46
46
|
@table_columns << table_column
|
47
47
|
|
@@ -59,6 +59,17 @@ module Tabulatr::Data::DSL
|
|
59
59
|
@search = args.presence || block
|
60
60
|
end
|
61
61
|
|
62
|
+
def checkbox(table_column_options: {})
|
63
|
+
@table_columns ||= []
|
64
|
+
box = Tabulatr::Renderer::Checkbox.from(table_column_options.merge(klass: @base, filter: false, sortable: false))
|
65
|
+
@table_columns << box
|
66
|
+
end
|
67
|
+
|
68
|
+
def row &block
|
69
|
+
raise 'Please pass a block to row if you want to use it.' unless block_given?
|
70
|
+
@row = block
|
71
|
+
end
|
72
|
+
|
62
73
|
end
|
63
74
|
|
64
75
|
Tabulatr::Data.send :extend, Tabulatr::Data::DSL
|
@@ -62,24 +62,17 @@ module Tabulatr::Data::Filtering
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def apply_condition(n,v)
|
65
|
-
like ||= Tabulatr::Utility.like_statement
|
66
65
|
if v.is_a?(String)
|
67
|
-
|
66
|
+
apply_string_condition("#{n} = ?", v)
|
68
67
|
elsif v.is_a?(Hash)
|
69
|
-
|
70
|
-
@relation = @relation.where("#{n} #{like} ?", "%#{v[:like]}%")
|
71
|
-
elsif v[:date].present?
|
72
|
-
apply_date_condition(n, v[:date])
|
73
|
-
else
|
74
|
-
@relation = @relation.where("#{n} >= ?", "#{v[:from]}") if v[:from].present?
|
75
|
-
@relation = @relation.where("#{n} <= ?", "#{v[:to]}") if v[:to].present?
|
76
|
-
end
|
68
|
+
apply_hash_condition(n, v)
|
77
69
|
else
|
78
70
|
raise "Wrong filter type: #{v.class}"
|
79
71
|
end
|
80
72
|
end
|
81
73
|
|
82
74
|
def apply_date_condition(n, cond)
|
75
|
+
return unless cond.present?
|
83
76
|
today = Date.today
|
84
77
|
case cond[:simple]
|
85
78
|
when 'none' then return
|
@@ -88,7 +81,7 @@ module Tabulatr::Data::Filtering
|
|
88
81
|
when 'this_week' then since = today.at_beginning_of_week
|
89
82
|
when 'last_7_days' then since = today - 7.day
|
90
83
|
when 'this_month' then since = today.at_beginning_of_month
|
91
|
-
when 'last_30_days' then since = today
|
84
|
+
when 'last_30_days' then since = today - 30.day
|
92
85
|
when 'from_to'
|
93
86
|
since = Date.parse(cond[:from]) if cond[:from].present?
|
94
87
|
@relation = @relation.where("#{n} <= ?", Date.parse(cond[:to])) if cond[:to].present?
|
@@ -96,6 +89,18 @@ module Tabulatr::Data::Filtering
|
|
96
89
|
@relation = @relation.where("#{n} >= ?", since) if since.present?
|
97
90
|
end
|
98
91
|
|
92
|
+
def apply_string_condition(replacement_string, value)
|
93
|
+
@relation = @relation.where(replacement_string, value) if value.present?
|
94
|
+
end
|
95
|
+
|
96
|
+
def apply_hash_condition(column_name, hash)
|
97
|
+
like ||= Tabulatr::Utility.like_statement
|
98
|
+
apply_string_condition("#{column_name} #{like} ?", "%#{hash[:like]}%") if hash[:like].present?
|
99
|
+
apply_date_condition(column_name, hash[:date])
|
100
|
+
apply_string_condition("#{column_name} >= ?", "#{hash[:from]}")
|
101
|
+
apply_string_condition("#{column_name} <= ?", "#{hash[:to]}")
|
102
|
+
end
|
103
|
+
|
99
104
|
end
|
100
105
|
|
101
106
|
Tabulatr::Data.send :include, Tabulatr::Data::Filtering
|
@@ -37,6 +37,7 @@ module Tabulatr::Data::Formatting
|
|
37
37
|
h[table_name][name] = format_association(record, table_name, name, opts, view)
|
38
38
|
end
|
39
39
|
end # @assocs each
|
40
|
+
h[:_row_config] = format_row(view, @row)
|
40
41
|
h
|
41
42
|
end # @relation map
|
42
43
|
end # apply_formats
|
@@ -54,7 +55,14 @@ module Tabulatr::Data::Formatting
|
|
54
55
|
opts[:table_column].value_for(record, view)
|
55
56
|
end
|
56
57
|
|
57
|
-
|
58
|
+
def format_row(view, row)
|
59
|
+
row_config = Row.new
|
60
|
+
view.instance_exec(view.record, row_config.attributes, &row) if row.is_a?(Proc)
|
61
|
+
view.record.define_singleton_method(:_row_config) do
|
62
|
+
row_config.attributes
|
63
|
+
end
|
64
|
+
row_config.attributes
|
65
|
+
end
|
58
66
|
end
|
59
67
|
|
60
68
|
Tabulatr::Data.send :include, Tabulatr::Data::Formatting
|
@@ -36,7 +36,7 @@ module Tabulatr::Data::Sorting
|
|
36
36
|
table_name = @base.reflect_on_association(klass.to_sym).try(:table_name)
|
37
37
|
end
|
38
38
|
nn = build_column_name(col_name, table_name: table_name, assoc_name: assoc_name, use_for: :sort)
|
39
|
-
raise "
|
39
|
+
raise "Invalid sorting orientation" unless ['asc', 'desc'].member?(orientation.downcase)
|
40
40
|
@relation = @relation.order("#{nn} #{orientation}")
|
41
41
|
else
|
42
42
|
@relation = @relation.order(default_order || "#{@table_name}.#{@base.primary_key} desc")
|
@@ -1,18 +1,12 @@
|
|
1
|
-
<% module_namespacing do %>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<% attributes = attributes.flatten.uniq %>
|
8
|
-
<% if attributes.any? %>
|
9
|
-
search :<%= attributes.last %>
|
10
|
-
<% end %>
|
11
|
-
<% attributes.each do |a| %>
|
12
|
-
column :<%= a %>
|
13
|
-
<% end %>
|
14
|
-
<% association_names.each do |attribute| %>
|
15
|
-
association :<%= attribute %>, :id
|
16
|
-
<% end %>
|
17
|
-
end
|
1
|
+
<% module_namespacing do %>class <%= class_name %>TabulatrData < Tabulatr::Data
|
2
|
+
<% attributes = attributes_names %><% if class_name.constantize.table_exists? %><% attributes << class_name.constantize.column_names.map(&:to_sym) %><% end %><% attributes = attributes.flatten.uniq %><% if attributes.any? %>
|
3
|
+
search :<%= attributes.last %>
|
4
|
+
<% end %>
|
5
|
+
<% attributes.each do |a| %>
|
6
|
+
column :<%= a %>
|
18
7
|
<% end %>
|
8
|
+
<% association_names.each do |attribute| %>
|
9
|
+
association :<%= attribute %>, :id
|
10
|
+
<% end %>
|
11
|
+
end
|
12
|
+
<% end %>
|
@@ -37,6 +37,7 @@ module Tabulatr::JsonBuilder
|
|
37
37
|
attrs.each do |at|
|
38
38
|
insert_attribute_in_hash(at, f, tmp)
|
39
39
|
end
|
40
|
+
tmp['_row_config'] = f['_row_config']
|
40
41
|
result << tmp
|
41
42
|
end
|
42
43
|
{ data: result, meta: data.__pagination }
|
@@ -75,18 +76,19 @@ module Tabulatr::JsonBuilder
|
|
75
76
|
# r["#{at[:relation]}:#{at[:action]}"] = f.try(at[:relation]).try(at[:action])
|
76
77
|
# end
|
77
78
|
begin
|
79
|
+
raise Tabulatr::RequestDataNotIncludedError.raise_error(rel, f) if !f.has_key?(rel)
|
80
|
+
raise Tabulatr::RequestDataNotIncludedError.raise_error(action, rel) if !f[rel].has_key?(action)
|
78
81
|
r["#{at[:relation]}:#{at[:action]}"] = f[rel][action]
|
79
|
-
rescue NoMethodError => e
|
80
|
-
|
81
|
-
there was no such method included in your TabulatrData", $!.backtrace
|
82
|
+
rescue TypeError, NoMethodError => e
|
83
|
+
Tabulatr::RequestDataNotIncludedError.raise_error(at[:action], at[:relation])
|
82
84
|
end
|
83
85
|
else
|
84
86
|
begin
|
85
87
|
action = at[:action].to_sym
|
88
|
+
raise Tabulatr::RequestDataNotIncludedError.raise_error(action, f) if !f.has_key?(action) && action != :checkbox
|
86
89
|
r[at[:action]] = f[action]
|
87
|
-
rescue NoMethodError => e
|
88
|
-
raise
|
89
|
-
there was no such method included in your TabulatrData", $!.backtrace
|
90
|
+
rescue TypeError, NoMethodError => e
|
91
|
+
raise Tabulatr::RequestDataNotIncludedError.raise_error(action, f)
|
90
92
|
end
|
91
93
|
end
|
92
94
|
r
|
@@ -23,8 +23,8 @@
|
|
23
23
|
|
24
24
|
class ActionView::Base
|
25
25
|
# render the table in a view
|
26
|
-
def table_for(klass, opts
|
27
|
-
Tabulatr::Renderer.build_table(klass, self, opts, &block)
|
26
|
+
def table_for(klass, columns: [], **opts, &block)
|
27
|
+
Tabulatr::Renderer.build_table(klass, self, opts, columns, &block)
|
28
28
|
end
|
29
29
|
|
30
30
|
def static_table_for(records, opts={}, &block)
|
@@ -34,7 +34,7 @@ class Tabulatr::Renderer::Association < Tabulatr::Renderer::Column
|
|
34
34
|
|
35
35
|
def principal_value(record)
|
36
36
|
v = record.send(table_name)
|
37
|
-
if v && v.respond_to?(:to_a) && map
|
37
|
+
if v && v.respond_to?(:to_a) && map && name != :count
|
38
38
|
v.map(&:"#{name}")
|
39
39
|
else
|
40
40
|
v.try(name)
|
@@ -49,10 +49,12 @@ class Tabulatr::Renderer
|
|
49
49
|
@classname = @klass.name.underscore
|
50
50
|
end
|
51
51
|
|
52
|
-
def build_table(&block)
|
52
|
+
def build_table(columns, &block)
|
53
53
|
tdc = "#{@klass.name}TabulatrData".constantize.new(@klass)
|
54
54
|
if block_given?
|
55
55
|
@columns = ColumnsFromBlock.process @klass, &block
|
56
|
+
elsif columns.any?
|
57
|
+
@columns = get_requested_columns(tdc.table_columns, columns)
|
56
58
|
else
|
57
59
|
@columns = tdc.table_columns
|
58
60
|
end
|
@@ -84,8 +86,17 @@ class Tabulatr::Renderer
|
|
84
86
|
new(klass, view, toptions).build_static_table(records, &block)
|
85
87
|
end
|
86
88
|
|
87
|
-
def self.build_table(klass, view, toptions={}, &block)
|
88
|
-
new(klass, view, toptions).build_table(&block)
|
89
|
+
def self.build_table(klass, view, toptions={}, columns, &block)
|
90
|
+
new(klass, view, toptions).build_table(columns, &block)
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def get_requested_columns(available_columns, requested_columns)
|
96
|
+
requested_columns.collect do |r|
|
97
|
+
r = "#{r.keys.first}:#{r.values.first}" if r.is_a?(Hash) && r.count == 1
|
98
|
+
available_columns.select{|column| column.full_name.to_sym == r.to_sym }
|
99
|
+
end.flatten
|
89
100
|
end
|
90
101
|
|
91
102
|
end
|
@@ -94,6 +105,5 @@ require_relative './column'
|
|
94
105
|
require_relative './association'
|
95
106
|
require_relative './action'
|
96
107
|
require_relative './checkbox'
|
97
|
-
require_relative './columns'
|
98
108
|
require_relative './columns_from_block'
|
99
109
|
|
data/lib/tabulatr/version.rb
CHANGED
@@ -8,7 +8,7 @@ class ProductTabulatrData < Tabulatr::Data
|
|
8
8
|
|
9
9
|
column :title
|
10
10
|
column :id
|
11
|
-
column :price do "#{record.price} EUR" end # <- Block evaluiert im Kontext EINES Records
|
11
|
+
column :price, table_column_options: {filter: :range} do "#{record.price} EUR" end # <- Block evaluiert im Kontext EINES Records
|
12
12
|
column :edit_link do link_to "edit #{record.title}", product_path(record) end
|
13
13
|
# column :name,
|
14
14
|
# sort: "firstname || ' ' || lastname"
|
@@ -16,14 +16,18 @@ class ProductTabulatrData < Tabulatr::Data
|
|
16
16
|
# do
|
17
17
|
# "#{firstname} #{lastname}"
|
18
18
|
# end
|
19
|
-
column :vendor_product_name,
|
19
|
+
column :vendor_product_name,
|
20
|
+
sort_sql: "products.title || '' || vendors.name",
|
21
|
+
filter_sql: "products.title || '' || vendors.name",
|
22
|
+
table_column_options: {header: 'Product by vendor'} do
|
20
23
|
"#{record.title} from #{record.vendor.try(:name)}"
|
21
24
|
end
|
22
|
-
column :active
|
25
|
+
column :active, table_column_options: {sortable: false}
|
23
26
|
column :updated_at, table_column_options: { filter: :date } do "#{record.updated_at.strftime('%H:%M %d.%m.%Y')}" end
|
24
|
-
association :vendor, :name
|
27
|
+
association :vendor, :name, table_column_options: { filter: :exact }
|
25
28
|
association :tags, :title do |r|
|
26
29
|
"'#{r.tags.map(&:title).map(&:upcase).join(', ')}'"
|
27
30
|
end
|
31
|
+
association :tags, :count
|
28
32
|
|
29
33
|
end
|
@@ -1,11 +1,4 @@
|
|
1
1
|
<%= table_for Product, :paginate => true,
|
2
|
-
batch_actions: {a: "Hallo", b: "Du da!"}
|
3
|
-
|
4
|
-
|
5
|
-
t.column :price, filter: :range
|
6
|
-
t.column :active, sortable: false
|
7
|
-
t.column :vendor_product_name, header: 'Product by vendor'
|
8
|
-
t.column :updated_at, filter: :date
|
9
|
-
t.association :vendor, :name, filter: :exact
|
10
|
-
t.association :tags, :title
|
11
|
-
end %>
|
2
|
+
batch_actions: {a: "Hallo", b: "Du da!"},
|
3
|
+
columns: [:title, :price, :active, :vendor_product_name, :updated_at,
|
4
|
+
{vendor: :name}, 'tags:title'] %>
|
@@ -14,7 +14,7 @@ module Dummy
|
|
14
14
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
15
15
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
16
16
|
# config.time_zone = 'Central Time (US & Canada)'
|
17
|
-
|
17
|
+
config.i18n.enforce_available_locales = true
|
18
18
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
19
19
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
20
20
|
# config.i18n.default_locale = :de
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tabulatr2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Horn
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-01-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- lib/tabulatr/data/invoker.rb
|
96
96
|
- lib/tabulatr/data/pagination.rb
|
97
97
|
- lib/tabulatr/data/proxy.rb
|
98
|
+
- lib/tabulatr/data/row.rb
|
98
99
|
- lib/tabulatr/data/sorting.rb
|
99
100
|
- lib/tabulatr/engine.rb
|
100
101
|
- lib/tabulatr/generators/railtie.rb
|
@@ -111,9 +112,9 @@ files:
|
|
111
112
|
- lib/tabulatr/renderer/association.rb
|
112
113
|
- lib/tabulatr/renderer/checkbox.rb
|
113
114
|
- lib/tabulatr/renderer/column.rb
|
114
|
-
- lib/tabulatr/renderer/columns.rb
|
115
115
|
- lib/tabulatr/renderer/columns_from_block.rb
|
116
116
|
- lib/tabulatr/renderer/renderer.rb
|
117
|
+
- lib/tabulatr/utility/request_data_not_included_error.rb
|
117
118
|
- lib/tabulatr/utility/utility.rb
|
118
119
|
- lib/tabulatr/version.rb
|
119
120
|
- lib/tabulatr2.rb
|
@@ -200,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
201
|
version: '0'
|
201
202
|
requirements: []
|
202
203
|
rubyforge_project:
|
203
|
-
rubygems_version: 2.0.
|
204
|
+
rubygems_version: 2.0.3
|
204
205
|
signing_key:
|
205
206
|
specification_version: 4
|
206
207
|
summary: A tight DSL to build tables of ActiveRecord models with sorting, pagination,
|
@@ -267,3 +268,4 @@ test_files:
|
|
267
268
|
- spec/features/tabulatrs_spec.rb
|
268
269
|
- spec/lib/tabulatr/data/data_spec.rb
|
269
270
|
- spec/spec_helper.rb
|
271
|
+
has_rdoc:
|