gridder 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/gridder.rb +33 -28
  2. data/lib/gridder/version.rb +1 -1
  3. metadata +11 -5
@@ -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 |d|
62
- doc.tr do
63
- config[:body].each do |b|
64
- b.symbolize_keys!
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] = b[:class] if b[:class].present?
67
- opts[:style] = b[:style] if b[:style].present?
68
-
69
- r = if b[:data].is_a?(Proc)
70
- b[:data].arity.zero? ? b[:data].call : b[:data].call(d)
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
- d.send(b[:data])
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
@@ -1,3 +1,3 @@
1
1
  module Gridder
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
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
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-10 00:00:00 -03:00
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