rails_table_for 0.2.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/{ruby.yml → tests.yml} +5 -2
- data/Gemfile.lock +2 -1
- data/docs/index.md +15 -1
- data/lib/rails_table_for/action_view_ext.rb +19 -0
- data/lib/rails_table_for/elements/block_column.rb +20 -0
- data/lib/rails_table_for/elements/column.rb +7 -0
- data/lib/rails_table_for/elements/field_column.rb +23 -0
- data/lib/rails_table_for/elements/table.rb +63 -0
- data/lib/rails_table_for/helpers/auto_link.rb +10 -0
- data/lib/rails_table_for/version.rb +1 -1
- data/lib/rails_table_for.rb +1 -1
- data/rails_table_for.gemspec +1 -0
- metadata +29 -8
- data/lib/rails_table_for/block_column.rb +0 -14
- data/lib/rails_table_for/column.rb +0 -5
- data/lib/rails_table_for/field_column.rb +0 -17
- data/lib/rails_table_for/table.rb +0 -61
- data/lib/rails_table_for/table_helper.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc39558936421adf2e8f1fe5cc4f79d404f423ad2a48ac96aed9b951de5cfb05
|
4
|
+
data.tar.gz: 2459ffa6e9167052e2a2f1e2fe02817c65eb2dafb9267cff706a0b7be9e4dd4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ae6589f69b463b6d997b2e4a110c63bdbe682554612cdbc7611b0d665344c14c7f703de6b1f834ca3e8477c9ebb7e35eb762d861114153b6a5c242416f36d98
|
7
|
+
data.tar.gz: d6f88eb4659eeda945bfda4c9f23cd924c720052651125a7c7f5d2e9d0d44e2af4425d6d9109dc8c8036453616b57b62a8cedd05cf485522f6baf4a083f5e1a2
|
@@ -1,4 +1,4 @@
|
|
1
|
-
name:
|
1
|
+
name: Tests
|
2
2
|
|
3
3
|
on:
|
4
4
|
push:
|
@@ -17,7 +17,10 @@ jobs:
|
|
17
17
|
uses: actions/setup-ruby@v1
|
18
18
|
with:
|
19
19
|
ruby-version: 2.6.x
|
20
|
-
- name:
|
20
|
+
- name: Install libsqlite3-dev
|
21
|
+
run: |
|
22
|
+
sudo apt-get install -y libsqlite3-dev
|
23
|
+
- name: Build and test
|
21
24
|
run: |
|
22
25
|
gem install bundler
|
23
26
|
bundle install --jobs 4 --retry 3
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rails_table_for (0.2.
|
4
|
+
rails_table_for (0.2.1)
|
5
5
|
rails (>= 5)
|
6
6
|
|
7
7
|
GEM
|
@@ -142,6 +142,7 @@ DEPENDENCIES
|
|
142
142
|
bundler (~> 2.1, >= 2.1.4)
|
143
143
|
byebug (~> 11.1, >= 11.1.1)
|
144
144
|
minitest (~> 5.14)
|
145
|
+
nokogiri (~> 1.10, >= 1.10.9)
|
145
146
|
rails_table_for!
|
146
147
|
rake (~> 13.0, >= 13.0.1)
|
147
148
|
sqlite3 (~> 1.4, >= 1.4.2)
|
data/docs/index.md
CHANGED
@@ -100,4 +100,18 @@ Assuming the route exists to show that record, this will generate HTML like this
|
|
100
100
|
</tr>
|
101
101
|
</tbody>
|
102
102
|
</table>
|
103
|
-
```
|
103
|
+
```
|
104
|
+
|
105
|
+
# Auto-linking columns
|
106
|
+
|
107
|
+
Automatically get a link to the record represented by each row like this:
|
108
|
+
|
109
|
+
```
|
110
|
+
<%=
|
111
|
+
table_for @records do |table|
|
112
|
+
table.column :id, auto_link: true
|
113
|
+
end
|
114
|
+
%>
|
115
|
+
```
|
116
|
+
|
117
|
+
If no route can be found for the record, a `NoMethodError` will be thrown.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rails_table_for/elements/table'
|
2
|
+
|
3
|
+
module TableHelper
|
4
|
+
include ActionView::Helpers::TagHelper
|
5
|
+
|
6
|
+
def table_for(records, **options)
|
7
|
+
def table_for(records, **options)
|
8
|
+
table = Elements::Table.new(options)
|
9
|
+
if block_given?
|
10
|
+
yield table
|
11
|
+
end
|
12
|
+
table.build(records)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
ActionView::Base.class_eval do
|
18
|
+
include TableHelper
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rails_table_for/helpers/auto_link'
|
2
|
+
require 'rails_table_for/elements/column'
|
3
|
+
|
4
|
+
module Elements
|
5
|
+
class BlockColumn < Column
|
6
|
+
include Helpers::AutoLink
|
7
|
+
attr_reader :title
|
8
|
+
|
9
|
+
def initialize(block, **options)
|
10
|
+
@block = block
|
11
|
+
@title = options[:title]
|
12
|
+
@auto_link = options[:auto_link] || false
|
13
|
+
end
|
14
|
+
|
15
|
+
def value_for(record)
|
16
|
+
text = @block.call(record)
|
17
|
+
@auto_link ? auto_link(record, text) : text
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rails_table_for/helpers/auto_link'
|
2
|
+
require 'rails_table_for/elements/column'
|
3
|
+
|
4
|
+
module Elements
|
5
|
+
class FieldColumn < Column
|
6
|
+
include Helpers::AutoLink
|
7
|
+
attr_reader :title
|
8
|
+
|
9
|
+
def initialize(field, **options)
|
10
|
+
if field.nil?
|
11
|
+
raise ArgumentError.new("Field cannot be nil")
|
12
|
+
end
|
13
|
+
@field = field
|
14
|
+
@title = options[:title] || field.to_s.humanize
|
15
|
+
@auto_link = options[:auto_link] || false
|
16
|
+
end
|
17
|
+
|
18
|
+
def value_for(record)
|
19
|
+
text = record.send(@field)
|
20
|
+
@auto_link ? auto_link(record, text) : text
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rails_table_for/elements/block_column'
|
2
|
+
require 'rails_table_for/elements/field_column'
|
3
|
+
|
4
|
+
module Elements
|
5
|
+
class Table
|
6
|
+
include ActionView::Helpers::TagHelper
|
7
|
+
|
8
|
+
attr_accessor :output_buffer
|
9
|
+
|
10
|
+
def initialize(**options)
|
11
|
+
columns = options[:columns] || []
|
12
|
+
@columns = columns.map do |field|
|
13
|
+
FieldColumn.new(field)
|
14
|
+
end
|
15
|
+
@options = options
|
16
|
+
end
|
17
|
+
|
18
|
+
def column(field=nil, **options, &block)
|
19
|
+
if field.nil? && !block_given?
|
20
|
+
raise 'Must provide either field or block'
|
21
|
+
end
|
22
|
+
|
23
|
+
if block_given?
|
24
|
+
@columns << BlockColumn.new(block, options)
|
25
|
+
else
|
26
|
+
@columns << FieldColumn.new(field, options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def build(records)
|
31
|
+
return '' if records.nil? || records.empty?
|
32
|
+
return '' if @columns.nil? || @columns.empty?
|
33
|
+
table(records)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def table(records)
|
38
|
+
content_tag :table, class: @options[:class] do
|
39
|
+
[head, body(records)].join.html_safe
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def head
|
44
|
+
content_tag :thead do
|
45
|
+
content_tag :tr do
|
46
|
+
@columns.map {|column| content_tag :th, column.title }.join.html_safe
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def body(records)
|
52
|
+
content_tag :tbody do
|
53
|
+
records.map {|record| body_row(record) }.join.html_safe
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def body_row(record)
|
58
|
+
content_tag :tr do
|
59
|
+
@columns.map {|column| content_tag :td, column.value_for(record) }.join.html_safe
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/rails_table_for.rb
CHANGED
data/rails_table_for.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
|
26
26
|
spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.1'
|
27
27
|
spec.add_development_dependency 'minitest', '~> 5.14'
|
28
|
+
spec.add_development_dependency 'nokogiri', '~> 1.10', '>= 1.10.9'
|
28
29
|
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
|
29
30
|
spec.add_development_dependency 'sqlite3', '~> 1.4', '>= 1.4.2'
|
30
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_table_for
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Austin Roos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -92,6 +92,26 @@ dependencies:
|
|
92
92
|
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '5.14'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: nokogiri
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.10'
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 1.10.9
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1.10'
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 1.10.9
|
95
115
|
- !ruby/object:Gem::Dependency
|
96
116
|
name: rake
|
97
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,7 +162,7 @@ extra_rdoc_files: []
|
|
142
162
|
files:
|
143
163
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
144
164
|
- ".github/ISSUE_TEMPLATE/new-user-story.md"
|
145
|
-
- ".github/workflows/
|
165
|
+
- ".github/workflows/tests.yml"
|
146
166
|
- ".gitignore"
|
147
167
|
- Gemfile
|
148
168
|
- Gemfile.lock
|
@@ -157,12 +177,13 @@ files:
|
|
157
177
|
- docs/_config.yml
|
158
178
|
- docs/index.md
|
159
179
|
- lib/rails_table_for.rb
|
160
|
-
- lib/rails_table_for/
|
161
|
-
- lib/rails_table_for/
|
162
|
-
- lib/rails_table_for/
|
180
|
+
- lib/rails_table_for/action_view_ext.rb
|
181
|
+
- lib/rails_table_for/elements/block_column.rb
|
182
|
+
- lib/rails_table_for/elements/column.rb
|
183
|
+
- lib/rails_table_for/elements/field_column.rb
|
184
|
+
- lib/rails_table_for/elements/table.rb
|
185
|
+
- lib/rails_table_for/helpers/auto_link.rb
|
163
186
|
- lib/rails_table_for/railtie.rb
|
164
|
-
- lib/rails_table_for/table.rb
|
165
|
-
- lib/rails_table_for/table_helper.rb
|
166
187
|
- lib/rails_table_for/version.rb
|
167
188
|
- lib/tasks/rails_table_for_tasks.rake
|
168
189
|
- rails_table_for.gemspec
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'rails_table_for/column'
|
2
|
-
|
3
|
-
class FieldColumn < Column
|
4
|
-
attr_reader :title
|
5
|
-
|
6
|
-
def initialize(field, title = nil)
|
7
|
-
if field.nil?
|
8
|
-
raise ArgumentError.new("Field cannot be nil")
|
9
|
-
end
|
10
|
-
@field = field
|
11
|
-
@title = title || field.to_s.humanize
|
12
|
-
end
|
13
|
-
|
14
|
-
def value_for(record)
|
15
|
-
record.send(@field)
|
16
|
-
end
|
17
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'rails_table_for/block_column'
|
2
|
-
require 'rails_table_for/field_column'
|
3
|
-
|
4
|
-
class Table
|
5
|
-
include ActionView::Helpers::TagHelper
|
6
|
-
|
7
|
-
attr_accessor :output_buffer
|
8
|
-
|
9
|
-
def initialize(**options)
|
10
|
-
columns = options[:columns] || []
|
11
|
-
@columns = columns.map do |field|
|
12
|
-
FieldColumn.new(field)
|
13
|
-
end
|
14
|
-
@options = options
|
15
|
-
end
|
16
|
-
|
17
|
-
def column(field=nil, **options, &block)
|
18
|
-
if field.nil? && !block_given?
|
19
|
-
raise 'Must provide either field or block'
|
20
|
-
end
|
21
|
-
title = options[:title] || options['title']
|
22
|
-
|
23
|
-
if block_given?
|
24
|
-
@columns << BlockColumn.new(block, title)
|
25
|
-
else
|
26
|
-
@columns << FieldColumn.new(field, title)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def build(records)
|
31
|
-
return '' if records.nil? || records.empty?
|
32
|
-
table(records)
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
def table(records)
|
37
|
-
content_tag :table, class: @options[:class] do
|
38
|
-
[head, body(records)].join.html_safe
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def head
|
43
|
-
content_tag :thead do
|
44
|
-
content_tag :tr do
|
45
|
-
@columns.map {|column| content_tag :th, column.title }.join.html_safe
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def body(records)
|
51
|
-
content_tag :tbody do
|
52
|
-
records.map {|record| body_row(record) }.join.html_safe
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def body_row(record)
|
57
|
-
content_tag :tr do
|
58
|
-
@columns.map {|column| content_tag :td, column.value_for(record) }.join.html_safe
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'rails_table_for/table'
|
2
|
-
|
3
|
-
module TableHelper
|
4
|
-
include ActionView::Helpers::TagHelper
|
5
|
-
|
6
|
-
def table_for(records, **options)
|
7
|
-
table = Table.new(options)
|
8
|
-
if block_given?
|
9
|
-
yield table
|
10
|
-
end
|
11
|
-
table.build(records)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
ActionView::Base.class_eval do
|
16
|
-
include TableHelper
|
17
|
-
end
|