tabula_rasa 0.0.3 → 0.0.4
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/README.md +94 -7
- data/lib/tabula_rasa/base.rb +13 -7
- data/lib/tabula_rasa/version.rb +1 -1
- data/spec/tabula_rasa/helper_body_spec.rb +17 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1d7fbe18b2b3b9d85b7a5cd7677e246ad3333fd
|
4
|
+
data.tar.gz: 5902b713adcff3c7b639eaf75fc95a3e5ba757e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1b741f7851cf06aac649649c46c39f8b91ba3ff4cc5ec73978633214def1848af0d7914785403a492805ccbec114396c8ba40f10c3974916a96856e5edd70b7
|
7
|
+
data.tar.gz: 41c3aaf92b875314a8069e3fdf5a03d4a9bba30e5753e4fff58bbb73bb5c5b7814a78794c2a4be69a77b44a7093039556d7505269e4ad33771fa1c389568b643
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
An opinionated yet simple table generator for Rails<sup>1</sup>.
|
5
5
|
|
6
|
-
TabulaRasa is designed to leverage ActiveRecord::Relation instances and conventions
|
6
|
+
TabulaRasa is designed to leverage ActiveRecord::Relation instances and conventions to make table generation a snap but still readable and editable.
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
@@ -21,7 +21,98 @@ Or install it yourself as:
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
|
24
|
+
TabulaRasa is designed to make it easy to make valid HTML[5] tables for ActiveRecord::Relations. Here are examples on how to set attributes:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
# TABLE
|
28
|
+
# NOTE: special options here:
|
29
|
+
# * zebra: Accepts boolean or array of string values for ActionView's cycle helper. Defaults to true, creating zebra-striped tables (using 'even' and 'odd' values) out of the box.
|
30
|
+
# * dom_id: Accepts boolean, for setting TBODY TR id attribute to dom_id for the row's instance. Defaults to false.
|
31
|
+
# * dom_class: Accepts boolean, for adding dom_class for the row's instance to the TBODY TR class attribute. Defaults to false.
|
32
|
+
tabula_rasa @collection id: 'foo' do |table|
|
33
|
+
t.column :foo
|
34
|
+
end
|
35
|
+
|
36
|
+
# THEAD
|
37
|
+
tabula_rasa @collection, head: {id: 'foo'} do |table|
|
38
|
+
t.column :foo
|
39
|
+
end
|
40
|
+
|
41
|
+
# THEAD TR not supported. There's only one row. Use the THEAD TR selector instead.
|
42
|
+
|
43
|
+
# TH
|
44
|
+
tabula_rasa @collection do |table|
|
45
|
+
t.column :foo, head: {id: 'foo'}
|
46
|
+
# You can also set both TH and TD attributes with the same values
|
47
|
+
t.column :bar, shared: {class: 'bar'}
|
48
|
+
# NOTE: block column arguments are not supported for TH element
|
49
|
+
end
|
50
|
+
|
51
|
+
# TBODY
|
52
|
+
tabula_rasa @collection, body: {id: 'foo'} do |table|
|
53
|
+
t.column :foo
|
54
|
+
end
|
55
|
+
|
56
|
+
# TBODY TR
|
57
|
+
tabula_rasa @collection do |table|
|
58
|
+
t.column :foo # Just here for validity
|
59
|
+
# This is the code that actually does the work for the TR
|
60
|
+
t.row class: 'foobar'
|
61
|
+
# OR you can use a block argument. Do note though...
|
62
|
+
# Defining the row twice in real code will raise ArgumentError.
|
63
|
+
t.row do |row|
|
64
|
+
row.id do |instance|
|
65
|
+
dom_id instance
|
66
|
+
end
|
67
|
+
# Sets attribute 'data-foo'
|
68
|
+
row.data :foo do |instance|
|
69
|
+
"foo-#{instance.id}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# TD
|
75
|
+
tabula_rasa @collection do |table|
|
76
|
+
t.column :foo, body: {class: 'foo'}
|
77
|
+
t.column :bar do |column|
|
78
|
+
column.class do |instance|
|
79
|
+
instance.bar? ? 'bar' : 'unbar'
|
80
|
+
end
|
81
|
+
# Just an example of another attribute where setting by string might make sense. Use CSS for this really!
|
82
|
+
column.attribute :width, '100'
|
83
|
+
end
|
84
|
+
# You can also set both TH and TD attributes with the same values
|
85
|
+
t.column :baz, shared: {class: 'baz'}
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
Cell values default to the attribute name [for the TH element] and value [for the TD element]. You can easily override this by using the :value key for the :head or :body options for the column method as seen below:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
tabula_rasa @collection do |table|
|
93
|
+
t.column :foo, head: {value: 'Foo Header'}, body: {value: 'Foo Body Content'}
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
Most use cases for overriding the body value though would be better served by using a block which provides access to the collection member for that row.
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
tabula_rasa @collection do |table|
|
101
|
+
t.column :foo do |column|
|
102
|
+
column.value do |instance|
|
103
|
+
"A massaged value for instance #{instance.id}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
```
|
108
|
+
|
109
|
+
A lot of the time though you should just be able to get by with a simple symbol argument, since you aren't limited to simple attributes but can use methods that massage attribute data.
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
tabula_rasa @collection do |table|
|
113
|
+
t.column :foo
|
114
|
+
end
|
115
|
+
```
|
25
116
|
|
26
117
|
## Contributing
|
27
118
|
|
@@ -33,12 +124,8 @@ TODO: Write usage instructions here
|
|
33
124
|
|
34
125
|
## TODO
|
35
126
|
|
36
|
-
*
|
37
|
-
* Support for 'zebra-striping'
|
38
|
-
* TD dom_id and dom_class
|
127
|
+
* Discover more things to do
|
39
128
|
|
40
129
|
## Footnotes
|
41
130
|
|
42
131
|
<sup>1</sup> TabulaRasa really only relies on ActiveRecord and ActionView/ActionPack so you could use in a non-Rails stack that had those two elements but it seemed silly to differentiate this in the summary sentence.
|
43
|
-
|
44
|
-
<sup>2</sup> These conventions may only be my own. Time will tell.
|
data/lib/tabula_rasa/base.rb
CHANGED
@@ -13,18 +13,24 @@ module TabulaRasa
|
|
13
13
|
@options = options
|
14
14
|
@view = view
|
15
15
|
@klass = collection.klass
|
16
|
-
@
|
16
|
+
@column_collection = []
|
17
17
|
yield self if block_given?
|
18
18
|
ensure_row
|
19
19
|
end
|
20
20
|
|
21
21
|
def render
|
22
|
-
return if
|
22
|
+
return if column_collection.empty?
|
23
23
|
content_tag :table, content, table_options
|
24
24
|
end
|
25
25
|
|
26
26
|
def column(*args, &block)
|
27
|
-
@
|
27
|
+
@column_collection << Column.new(self, *args, &block)
|
28
|
+
end
|
29
|
+
|
30
|
+
def columns(*args)
|
31
|
+
args.each do |arg|
|
32
|
+
@column_collection << Column.new(self, arg)
|
33
|
+
end
|
28
34
|
end
|
29
35
|
|
30
36
|
def row(options = {}, &block)
|
@@ -34,7 +40,7 @@ module TabulaRasa
|
|
34
40
|
|
35
41
|
private
|
36
42
|
|
37
|
-
attr_reader :view, :klass, :
|
43
|
+
attr_reader :view, :klass, :column_collection
|
38
44
|
|
39
45
|
def content
|
40
46
|
safe_join [thead, tbody]
|
@@ -43,7 +49,7 @@ module TabulaRasa
|
|
43
49
|
def thead
|
44
50
|
content_tag :thead, options[:head] do
|
45
51
|
content_tag :tr do
|
46
|
-
safe_join
|
52
|
+
safe_join column_collection.map(&:head_content)
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
@@ -57,7 +63,7 @@ module TabulaRasa
|
|
57
63
|
def collection_body
|
58
64
|
rows = collection.map do |member|
|
59
65
|
content_tag :tr, @row.options_for(member) do
|
60
|
-
cells =
|
66
|
+
cells = column_collection.map do |column|
|
61
67
|
column.body_content_for member
|
62
68
|
end
|
63
69
|
safe_join cells
|
@@ -68,7 +74,7 @@ module TabulaRasa
|
|
68
74
|
|
69
75
|
def empty_body
|
70
76
|
content_tag :tr, class: 'empty' do
|
71
|
-
content_tag :td, colspan:
|
77
|
+
content_tag :td, colspan: column_collection.size do
|
72
78
|
"No #{klass.table_name.downcase} present"
|
73
79
|
end
|
74
80
|
end
|
data/lib/tabula_rasa/version.rb
CHANGED
@@ -335,5 +335,22 @@ describe TabulaRasa::Helpers, 'Head Specs' do
|
|
335
335
|
cell.children.first.must_be :text?
|
336
336
|
cell.text.must_equal 'No survivors present'
|
337
337
|
end
|
338
|
+
|
339
|
+
it 'can use multiple single arguments via internal columns method to set multiple columns' do
|
340
|
+
captured = capture do
|
341
|
+
tabula_rasa @survivors do |t|
|
342
|
+
t.columns :first_name, :last_name
|
343
|
+
end
|
344
|
+
end
|
345
|
+
rows = extract_all('table tbody tr', captured)
|
346
|
+
|
347
|
+
rows.each_with_index do |row, n|
|
348
|
+
survivor = @survivors[n]
|
349
|
+
cells = row.search('td')
|
350
|
+
cells.size.must_equal 2
|
351
|
+
cells[0].text.must_equal survivor.first_name
|
352
|
+
cells[1].text.must_equal survivor.last_name
|
353
|
+
end
|
354
|
+
end
|
338
355
|
end
|
339
356
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tabula_rasa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RSL
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|