gridder 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gridder.rb +33 -28
- data/lib/gridder/version.rb +1 -1
- metadata +11 -5
data/lib/gridder.rb
CHANGED
@@ -1,36 +1,34 @@
|
|
1
1
|
require "nokogiri"
|
2
2
|
module Gridder
|
3
3
|
|
4
|
-
extend self
|
5
|
-
|
6
4
|
GRID_HEADER_SPLITTER = "::"
|
7
|
-
def for(data, *opts)
|
5
|
+
def self.for(data, *opts)
|
8
6
|
config = {:empty_message => "Empty"}
|
9
7
|
config = config.update(opts.extract_options!)
|
10
|
-
|
8
|
+
|
11
9
|
titles = config[:body].map{|e| e[:title].to_s}
|
12
10
|
max_level = titles.map{|e| e.split(GRID_HEADER_SPLITTER).size}.max
|
13
|
-
|
11
|
+
|
14
12
|
header_rows = []
|
15
13
|
max_level.times{header_rows << []}
|
16
|
-
|
14
|
+
|
17
15
|
titles.each do |title_token|
|
18
16
|
if title_token.blank?
|
19
17
|
header_rows[0] << {:title => title_token, :rowspan => max_level}
|
20
18
|
next
|
21
19
|
end
|
22
|
-
|
20
|
+
|
23
21
|
splitted_title_token = title_token.split(GRID_HEADER_SPLITTER)
|
24
|
-
|
22
|
+
|
25
23
|
splitted_title_token.each_with_index do |title, idx|
|
26
24
|
level = idx+1
|
27
25
|
_hash = {}
|
28
26
|
_hash[:title] = title
|
29
|
-
|
27
|
+
|
30
28
|
if (splitted_title_token.size == level) && (max_level > level)
|
31
29
|
_hash[:rowspan] = (max_level - idx)
|
32
30
|
end
|
33
|
-
|
31
|
+
|
34
32
|
if (header_rows[idx].last || {})[:title] != _hash[:title]
|
35
33
|
header_rows[idx] << _hash
|
36
34
|
else
|
@@ -38,18 +36,18 @@ module Gridder
|
|
38
36
|
a[:colspan] ||= 1
|
39
37
|
a[:colspan] += 1
|
40
38
|
end
|
41
|
-
|
39
|
+
|
42
40
|
end
|
43
41
|
end
|
44
|
-
|
42
|
+
|
45
43
|
builder = Nokogiri::HTML::Builder.new do |doc|
|
46
|
-
|
44
|
+
|
47
45
|
doc.table(config[:table]) do
|
48
46
|
doc.thead(config[:thead]) do
|
49
47
|
header_rows.each do |row|
|
50
48
|
doc.tr do
|
51
49
|
row.each do |cell|
|
52
|
-
doc.th(:rowspan => cell[:rowspan], :colspan => cell[:colspan]){ doc.cdata cell[:title] }
|
50
|
+
doc.th(:rowspan => cell[:rowspan], :colspan => cell[:colspan]){ doc.cdata cell[:title] }
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|
@@ -58,18 +56,26 @@ module Gridder
|
|
58
56
|
if data.blank?
|
59
57
|
doc.tr{ doc.td(config[:empty_message], :class => :empty, :colspan => config[:body].size) }
|
60
58
|
else
|
61
|
-
data.each do |
|
62
|
-
|
63
|
-
|
64
|
-
|
59
|
+
data.each do |record|
|
60
|
+
tr_config = if config[:tr].blank? && record.is_a?(ActiveRecord::Base)
|
61
|
+
{:id => ActionController::RecordIdentifier.dom_id(record)}
|
62
|
+
elsif config[:tr].is_a?(Proc)
|
63
|
+
config[:tr].arity.zero? ? config[:tr].call : config[:tr].call(record)
|
64
|
+
else
|
65
|
+
record.send(config[:tr])
|
66
|
+
end
|
67
|
+
|
68
|
+
doc.tr(tr_config) do
|
69
|
+
config[:body].each do |cell|
|
70
|
+
cell.symbolize_keys!
|
65
71
|
opts = {}
|
66
|
-
opts[:class] =
|
67
|
-
opts[:style] =
|
68
|
-
|
69
|
-
r = if
|
70
|
-
|
72
|
+
opts[:class] = cell[:class] if cell[:class].present?
|
73
|
+
opts[:style] = cell[:style] if cell[:style].present?
|
74
|
+
|
75
|
+
r = if cell[:data].is_a?(Proc)
|
76
|
+
cell[:data].arity.zero? ? cell[:data].call : cell[:data].call(record)
|
71
77
|
else
|
72
|
-
|
78
|
+
record.send(cell[:data])
|
73
79
|
end
|
74
80
|
|
75
81
|
doc.td(opts){doc.cdata r}
|
@@ -77,12 +83,11 @@ module Gridder
|
|
77
83
|
end
|
78
84
|
end
|
79
85
|
end
|
80
|
-
|
86
|
+
|
81
87
|
end
|
82
|
-
end
|
88
|
+
end
|
83
89
|
end
|
84
|
-
|
90
|
+
|
85
91
|
builder.to_html.html_safe
|
86
92
|
end
|
87
|
-
|
88
93
|
end
|
data/lib/gridder/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: gridder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Pablo Targa
|
@@ -10,12 +10,11 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-06
|
13
|
+
date: 2012-11-06 00:00:00 -02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: nokogiri
|
18
|
-
prerelease: false
|
19
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
19
|
none: false
|
21
20
|
requirements:
|
@@ -23,10 +22,10 @@ dependencies:
|
|
23
22
|
- !ruby/object:Gem::Version
|
24
23
|
version: 1.5.3
|
25
24
|
type: :runtime
|
25
|
+
prerelease: false
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
|
-
prerelease: false
|
30
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
30
|
none: false
|
32
31
|
requirements:
|
@@ -34,10 +33,10 @@ dependencies:
|
|
34
33
|
- !ruby/object:Gem::Version
|
35
34
|
version: "0"
|
36
35
|
type: :development
|
36
|
+
prerelease: false
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: rails
|
40
|
-
prerelease: false
|
41
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
41
|
none: false
|
43
42
|
requirements:
|
@@ -45,6 +44,7 @@ dependencies:
|
|
45
44
|
- !ruby/object:Gem::Version
|
46
45
|
version: 3.2.5
|
47
46
|
type: :development
|
47
|
+
prerelease: false
|
48
48
|
version_requirements: *id003
|
49
49
|
description: Gridder generates a html table.
|
50
50
|
email:
|
@@ -129,12 +129,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
129
|
requirements:
|
130
130
|
- - ">="
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
+
hash: 3725658502223354962
|
133
|
+
segments:
|
134
|
+
- 0
|
132
135
|
version: "0"
|
133
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
137
|
none: false
|
135
138
|
requirements:
|
136
139
|
- - ">="
|
137
140
|
- !ruby/object:Gem::Version
|
141
|
+
hash: 3725658502223354962
|
142
|
+
segments:
|
143
|
+
- 0
|
138
144
|
version: "0"
|
139
145
|
requirements: []
|
140
146
|
|