gridder 0.0.5 → 0.0.6

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.
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