panic_board_data 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -45,9 +45,7 @@ module PanicBoardData
45
45
  end
46
46
 
47
47
  def data_points_for data_sequence
48
- data_sequence.data.map do |k, v|
49
- { 'title' => k, 'value' => v }
50
- end
48
+ data_sequence.data.map { |k, v| { 'title' => k, 'value' => v } }
51
49
  end
52
50
 
53
51
  def formatted_color
@@ -1,3 +1,4 @@
1
+ # http://www.panic.com/statusboard/docs/table_tutorial.pdf
1
2
  require 'csv'
2
3
 
3
4
  module PanicBoardData
@@ -5,37 +6,26 @@ module PanicBoardData
5
6
 
6
7
  attr_accessor :data, :widths, :base_image_url
7
8
 
9
+ def initialize(data = [])
10
+ @data = data
11
+ end
12
+
8
13
  def build_image value
14
+ "<img src=\"#{url_for(value)}\" />"
15
+ end
9
16
 
10
- url = [self.base_image_url, value]
11
- .select { |x| x.to_s != '' }
12
- .map { |x| x.to_s.strip }
13
- .map { |x| x.gsub('/', '') }
14
- .join('/')
15
- .gsub('http:', 'http://')
16
- .gsub('https:', 'https://')
17
- "<img src=\"#{url}\" />"
17
+ def progress_bar_to int
18
+ (1..int).to_a
19
+ .map { |x| "<div class=\"barSegment value#{x}\"></div>" }
20
+ .join
18
21
  end
19
22
 
20
23
  def to_html
21
- result = "<table>"
22
-
23
- if data
24
- data.each do |record|
25
- result << "<tr>"
26
- record.each_with_index do |value, index|
27
- value = value.join('') if value.is_a?(Array)
28
- if widths && widths[index]
29
- result << "<td style=\"width: #{widths[index]}px\">#{value}</td>"
30
- else
31
- result << "<td>#{value}</td>"
32
- end
33
- end
34
- result << "</tr>"
35
- end
36
- end
37
-
38
- result << "</table>"
24
+ "<table>#{data_to_table_rows}</table>"
25
+ end
26
+
27
+ def to_csv
28
+ self.class.to_csv self.data
39
29
  end
40
30
 
41
31
  def self.to_csv data
@@ -43,5 +33,46 @@ module PanicBoardData
43
33
  data.each { |row| csv << row }
44
34
  end.strip
45
35
  end
36
+
37
+ private
38
+
39
+ def url_for value
40
+ [self.base_image_url, value]
41
+ .select { |x| x.to_s != '' }
42
+ .map { |x| x.to_s.strip }
43
+ .map { |x| x.gsub('/', '') }
44
+ .join('/')
45
+ .gsub('http:', 'http://')
46
+ .gsub('https:', 'https://')
47
+ end
48
+
49
+ def data_to_table_rows
50
+ return '' unless data
51
+ data.map { |r| build_row_for r }.join
52
+ end
53
+
54
+ def build_row_for record
55
+ result = record.each_with_index.map { |v, i| build_cell_for v, i }.join
56
+ "<tr>#{result}</tr>"
57
+ end
58
+
59
+ def build_cell_for value, index
60
+ value = flatten_a_value_array_to_a_single_value value
61
+ width = get_width_for index
62
+ render_cell value, width
63
+ end
64
+
65
+ def flatten_a_value_array_to_a_single_value value
66
+ value.is_a?(Array) ? value.join('') : value
67
+ end
68
+
69
+ def get_width_for index
70
+ widths ? widths[index] : nil
71
+ end
72
+
73
+ def render_cell value, width
74
+ width ? "<td style=\"width: #{width}px\">#{value}</td>"
75
+ : "<td>#{value}</td>"
76
+ end
46
77
  end
47
78
  end
@@ -1,3 +1,3 @@
1
1
  module PanicBoardData
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -6,6 +6,20 @@ describe PanicBoardData::Table do
6
6
  PanicBoardData::Table.new
7
7
  end
8
8
 
9
+ describe "initialize" do
10
+
11
+ it "should default data to an empty array" do
12
+ PanicBoardData::Table.new.data.count.must_equal 0
13
+ end
14
+
15
+ it "should allow a new table to be built with data" do
16
+ data = Object.new
17
+ table = PanicBoardData::Table.new data
18
+ table.data.must_be_same_as data
19
+ end
20
+
21
+ end
22
+
9
23
  describe "to_html" do
10
24
 
11
25
  describe "empty table" do
@@ -36,7 +50,9 @@ describe PanicBoardData::Table do
36
50
  it "should return a result" do
37
51
  @result.must_equal "<table><tr>#{test.result}</tr></table>"
38
52
  end
53
+
39
54
  end
55
+
40
56
  end
41
57
 
42
58
  [:array, :first_width, :second_width, :result].to_objects { [
@@ -57,7 +73,9 @@ describe PanicBoardData::Table do
57
73
  it "should return a result" do
58
74
  @result.must_equal "<table><tr>#{test.result}</tr></table>"
59
75
  end
76
+
60
77
  end
78
+
61
79
  end
62
80
 
63
81
  [:array, :result].to_objects { [
@@ -76,7 +94,9 @@ describe PanicBoardData::Table do
76
94
  it "should return a result" do
77
95
  @result.must_equal "<table><tr>#{test.result}</tr></table>"
78
96
  end
97
+
79
98
  end
99
+
80
100
  end
81
101
 
82
102
  [:first_image, :second_image, :result].to_objects { [
@@ -94,7 +114,9 @@ describe PanicBoardData::Table do
94
114
  it "should return a result" do
95
115
  @result.must_equal "<table><tr>#{test.result}</tr></table>"
96
116
  end
117
+
97
118
  end
119
+
98
120
  end
99
121
 
100
122
  [:array, :base_image_url, :result].to_objects { [
@@ -118,49 +140,96 @@ describe PanicBoardData::Table do
118
140
  it "should return a result" do
119
141
  @result.must_equal "<table><tr>#{test.result}</tr></table>"
120
142
  end
143
+
121
144
  end
145
+
122
146
  end
123
- end
124
147
 
125
- describe "to_csv" do
148
+ [:value, :result].to_objects {[
149
+ [1, '<div class="barSegment value1"></div>'],
150
+ [2, '<div class="barSegment value1"></div><div class="barSegment value2"></div>'],
151
+ [8, '<div class="barSegment value1"></div><div class="barSegment value2"></div><div class="barSegment value3"></div><div class="barSegment value4"></div><div class="barSegment value5"></div><div class="barSegment value6"></div><div class="barSegment value7"></div><div class="barSegment value8"></div>']
152
+ ]}.each do |test|
126
153
 
127
- before do
128
- @result = PanicBoardData::Table.to_csv data
129
- end
154
+ describe "progress bars" do
155
+
156
+ before do
157
+ table.data = [['a', table.progress_bar_to(test.value)]]
130
158
 
131
- describe "an empty set" do
132
- let(:data) { [] }
159
+ @result = table.to_html
160
+ end
161
+
162
+ it "should create a cell with the proper progress bar" do
163
+ @result.must_equal "<table><tr><td>a</td><td>#{test.result}</td></tr></table>"
164
+ end
133
165
 
134
- it "should return an empty string" do
135
- @result.must_equal ''
136
166
  end
167
+
137
168
  end
138
169
 
139
- [:array, :result].to_objects { [
140
- [ [0], "0" ],
141
- [ [1], "1" ],
142
- [ [1,2], "1,2" ],
143
- [ [3,4, '"'], "3,4,\"\"\"\"" ]
144
- ] }.each do |test|
145
- describe "one row" do
146
- let(:data) { [ test.array ] }
170
+ end
171
+
172
+ [->(d) { PanicBoardData::Table.to_csv(d) },
173
+ ->(d) do
174
+ t = PanicBoardData::Table.new
175
+ t.data = d
176
+ t.to_csv
177
+ end
178
+ ].each do |method|
179
+
180
+ describe "to_csv" do
181
+
182
+ before do
183
+ @result = method.call(data)
184
+ end
147
185
 
148
- it "should return the single value" do
149
- @result.must_equal test.result
186
+ describe "an empty set" do
187
+
188
+ let(:data) { [] }
189
+
190
+ it "should return an empty string" do
191
+ @result.must_equal ''
150
192
  end
193
+
151
194
  end
152
- end
153
195
 
154
- [:first_row, :second_row, :result].to_objects { [
155
- [ [0], [1], "0\n1" ],
156
- ] }.each do |test|
157
- describe "two rows" do
158
- let(:data) { [ test.first_row, test.second_row ] }
196
+ [:array, :result].to_objects { [
197
+ [ [0], "0" ],
198
+ [ [1], "1" ],
199
+ [ [1,2], "1,2" ],
200
+ [ [3,4, '"'], "3,4,\"\"\"\"" ]
201
+ ] }.each do |test|
202
+
203
+ describe "one row" do
204
+
205
+ let(:data) { [ test.array ] }
206
+
207
+ it "should return the single value" do
208
+ @result.must_equal test.result
209
+ end
159
210
 
160
- it "should return the single value" do
161
- @result.must_equal test.result
162
211
  end
212
+
163
213
  end
214
+
215
+ [:first_row, :second_row, :result].to_objects { [
216
+ [ [0], [1], "0\n1" ],
217
+ ] }.each do |test|
218
+
219
+ describe "two rows" do
220
+
221
+ let(:data) { [ test.first_row, test.second_row ] }
222
+
223
+ it "should return the single value" do
224
+ @result.must_equal test.result
225
+ end
226
+
227
+ end
228
+
229
+ end
230
+
164
231
  end
232
+
165
233
  end
234
+
166
235
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panic_board_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-07 00:00:00.000000000 Z
12
+ date: 2013-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
143
  version: '0'
144
144
  segments:
145
145
  - 0
146
- hash: 458088160656310672
146
+ hash: -716652775732069663
147
147
  required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  none: false
149
149
  requirements:
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
152
  version: '0'
153
153
  segments:
154
154
  - 0
155
- hash: 458088160656310672
155
+ hash: -716652775732069663
156
156
  requirements: []
157
157
  rubyforge_project:
158
158
  rubygems_version: 1.8.25