blot 0.0.1 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a38ed64ea8ba2fba3ef96e6cc92b36e09b96be2
4
- data.tar.gz: 378fffae8a04c74731f3c39835c915be4ddf0f1c
3
+ metadata.gz: c21ee62fa2e7c62c257a09573343b25fe6a37bf6
4
+ data.tar.gz: 6f2445b40e9f17fa5c012ec824da15f620ffab1a
5
5
  SHA512:
6
- metadata.gz: 62677f8c1bda62617249f178adc6bbfabfa410405d6872167355980171d8df5639dc9e79f6f133a13b0fc4ca83f058d66ec4e090b57d0b988f096d5e74ef7319
7
- data.tar.gz: e607dddbdf6559ace164cb6199f14a33c781a82931653698a95867aa7d855718b9e85b942c32dccd6f64f56875d20814f8b25c7c5cf03d5fe64563498abd410b
6
+ metadata.gz: f1cacba76d88fc985b9b127510819436389921a6872e8f5db0f08b882ed9c7260dbdf5f080426dc64cee4a27aea3eb83798ea285f0822c4813da9eb6a0c294c9
7
+ data.tar.gz: 19f483ea4e0105a03ae1034085879b6d2aeb5fa396c74ed82fba773745a71dbb3306afb3172b65267711c6b34822adcc07fe294a7111a11cbad2aee42c5d52aa
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ irb.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -21,8 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_runtime_dependency 'rails'
24
+ spec.add_runtime_dependency 'rails', '>= 1'
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.6"
27
- spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "rake", '>= 0'
28
+ spec.add_development_dependency 'pry'
29
+ spec.add_development_dependency "rspec", '~> 3.1'
30
+ spec.add_development_dependency 'rspec-its', '~> 1.0'
31
+ spec.add_development_dependency 'rspec-collection_matchers', '~> 1.0'
28
32
  end
@@ -2,5 +2,4 @@ require "blot/version"
2
2
  require 'blot/railtie' if defined?(Rails)
3
3
 
4
4
  module Blot
5
- # Your code goes here...
6
5
  end
@@ -1,7 +1,11 @@
1
1
  require 'blot/helpers/grid'
2
+ require 'blot/helpers/visibility'
3
+ require 'blot/helpers/button'
2
4
 
3
5
  module Blot
4
6
  module Helpers
5
7
  include Grid
8
+ include Visibility
9
+ include Button
6
10
  end
7
11
  end
@@ -0,0 +1,20 @@
1
+ module Blot
2
+ module Helpers
3
+ module Button
4
+ def button(label, path, options={})
5
+ size = options.delete(:size).to_s
6
+ size += '-button' if size != 'button'
7
+ color = options.delete :color
8
+ radius = options.delete :radius
9
+
10
+ content_tag :table, class: "#{size} #{color} #{radius}".squish do
11
+ content_tag :tr do
12
+ content_tag :td do
13
+ link_to label, path, options
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,17 +1,24 @@
1
1
  module Blot
2
2
  module Helpers
3
3
  module Grid
4
- def container(options={}, &block)
4
+ def block_grid(options={})
5
+ options[:class] = "block-grid #{options[:up]}-up #{options[:class]}".strip
6
+ content_tag :table, class: options[:class] do
7
+ content_tag :tr do
8
+ yield if block_given?
9
+ end
10
+ end
11
+ end
12
+
13
+ def container(options={})
5
14
  content_tag :table, class: 'container' do
6
15
  content_tag :tr do
7
- content_tag :td, options do
8
- options[:class] == 'center' ? content_tag(:center, yield) : yield
9
- end
16
+ wrapper(options) { yield if block_given? }
10
17
  end
11
18
  end
12
19
  end
13
20
 
14
- def row(&block)
21
+ def row
15
22
  content_tag :table, class: 'row' do
16
23
  content_tag :tr do
17
24
  yield if block_given?
@@ -19,31 +26,51 @@ module Blot
19
26
  end
20
27
  end
21
28
 
22
- def wrapper(options={}, &block)
23
- content_tag :td, options do
24
- if block_given?
25
-
26
- options[:class] == 'center' ? content_tag(:center, yield) : yield
27
-
29
+ def panel_sub_grid
30
+ content_tag :td, class: 'panel sub-grid' do
31
+ content_tag :table do
32
+ content_tag :tr do
33
+ yield if block_given?
34
+ end
28
35
  end
29
36
  end
30
37
  end
31
38
 
32
- def columns(width, options={}, &block)
39
+ def columns(width, options={})
33
40
  content_tag :table, class: "#{width} columns" do
34
41
  content_tag :tr do
35
- content_tag :td, options do
36
- if block_given?
37
-
38
- options[:class] == 'center' ? content_tag(:center, yield) : yield
39
-
40
- end
41
- end
42
- content_tag :td, class: 'expander'
42
+ if options[:sub_columns]
43
+ "#{yield if block_given?}".html_safe
44
+ else
45
+ "#{wrapper(options) { yield if block_given? } if !options.empty? || block_given? }".html_safe
46
+ end +
47
+ "#{content_tag :td, nil, class: 'expander'}".html_safe
43
48
  end
44
49
  end
45
50
  end
46
51
  alias :column :columns
52
+
53
+ def sub_columns(width, options={})
54
+ options[:class] = "#{width} sub-columns #{options[:class]}".strip
55
+ wrapper(options) { yield if block_given? }
56
+ end
57
+ alias :sub_column :sub_columns
58
+
59
+ def wrapper(options={}, &block)
60
+ content_tag :td, options do
61
+ optional_content(options) { yield if block_given? }
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ def optional_content(options={}, &block)
68
+ if options[:class] && options[:class].split(' ').include?('center')
69
+ content_tag :center, block.call
70
+ else
71
+ block.call
72
+ end
73
+ end
47
74
  end
48
75
  end
49
76
  end
@@ -0,0 +1,27 @@
1
+ module Blot
2
+ module Helpers
3
+ module Visibility
4
+ def show_for_small
5
+ ('<!--[if !mso]><!-- -->' +
6
+ content_tag(:table, class: 'show-for-small') do
7
+ content_tag :tr do
8
+ content_tag :td do
9
+ yield if block_given?
10
+ end
11
+ end
12
+ end +
13
+ '<!--<![endif]-->').html_safe
14
+ end
15
+
16
+ def hide_for_small
17
+ content_tag :table, class: 'hide-for-small' do
18
+ content_tag :tr do
19
+ content_tag :td do
20
+ yield if block_given?
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Blot
2
- VERSION = "0.0.1"
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blot::Helpers::Button do
4
+ let(:view) { ActionView::Base.new.extend subject }
5
+
6
+ describe '.button' do
7
+ it 'simple button' do
8
+ expect(view.button('Button Label', '#', size: :button)).to eql <<-HTML.compress
9
+ <table class="button">
10
+ <tr>
11
+ <td>
12
+ <a href="#">Button Label</a>
13
+ </td>
14
+ </tr>
15
+ </table>
16
+ HTML
17
+ end
18
+
19
+ it 'tiny button' do
20
+ expect(view.button('Button Label', '#', size: :tiny)).to eql <<-HTML.compress
21
+ <table class="tiny-button">
22
+ <tr>
23
+ <td>
24
+ <a href="#">Button Label</a>
25
+ </td>
26
+ </tr>
27
+ </table>
28
+ HTML
29
+ end
30
+
31
+ it 'small button' do
32
+ expect(view.button('Button Label', '#', size: :small)).to eql <<-HTML.compress
33
+ <table class="small-button">
34
+ <tr>
35
+ <td>
36
+ <a href="#">Button Label</a>
37
+ </td>
38
+ </tr>
39
+ </table>
40
+ HTML
41
+ end
42
+
43
+ it 'medium button' do
44
+ expect(view.button('Button Label', '#', size: :medium)).to eql <<-HTML.compress
45
+ <table class="medium-button">
46
+ <tr>
47
+ <td>
48
+ <a href="#">Button Label</a>
49
+ </td>
50
+ </tr>
51
+ </table>
52
+ HTML
53
+ end
54
+
55
+ it 'large button' do
56
+ expect(view.button('Button Label', '#', size: :large)).to eql <<-HTML.compress
57
+ <table class="large-button">
58
+ <tr>
59
+ <td>
60
+ <a href="#">Button Label</a>
61
+ </td>
62
+ </tr>
63
+ </table>
64
+ HTML
65
+ end
66
+
67
+ it 'primary button' do
68
+ expect(view.button('Button Label', '#', size: :button, color: :primary)).to eql <<-HTML.compress
69
+ <table class="button primary">
70
+ <tr>
71
+ <td>
72
+ <a href="#">Button Label</a>
73
+ </td>
74
+ </tr>
75
+ </table>
76
+ HTML
77
+ end
78
+
79
+ it 'secondary button' do
80
+ expect(view.button('Button Label', '#', size: :button, color: :secondary)).to eql <<-HTML.compress
81
+ <table class="button secondary">
82
+ <tr>
83
+ <td>
84
+ <a href="#">Button Label</a>
85
+ </td>
86
+ </tr>
87
+ </table>
88
+ HTML
89
+ end
90
+
91
+ it 'alert button' do
92
+ expect(view.button('Button Label', '#', size: :button, color: :alert)).to eql <<-HTML.compress
93
+ <table class="button alert">
94
+ <tr>
95
+ <td>
96
+ <a href="#">Button Label</a>
97
+ </td>
98
+ </tr>
99
+ </table>
100
+ HTML
101
+ end
102
+
103
+ it 'success button' do
104
+ expect(view.button('Button Label', '#', size: :button, color: :success)).to eql <<-HTML.compress
105
+ <table class="button success">
106
+ <tr>
107
+ <td>
108
+ <a href="#">Button Label</a>
109
+ </td>
110
+ </tr>
111
+ </table>
112
+ HTML
113
+ end
114
+
115
+ it 'radius button' do
116
+ expect(view.button('Button Label', '#', size: :button, radius: :radius)).to eql <<-HTML.compress
117
+ <table class="button radius">
118
+ <tr>
119
+ <td>
120
+ <a href="#">Button Label</a>
121
+ </td>
122
+ </tr>
123
+ </table>
124
+ HTML
125
+ end
126
+
127
+ it 'round button' do
128
+ expect(view.button('Button Label', '#', size: :button, radius: :round)).to eql <<-HTML.compress
129
+ <table class="button round">
130
+ <tr>
131
+ <td>
132
+ <a href="#">Button Label</a>
133
+ </td>
134
+ </tr>
135
+ </table>
136
+ HTML
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,503 @@
1
+ require 'spec_helper'
2
+
3
+ include ActionView::Helpers::AssetTagHelper
4
+
5
+ describe Blot::Helpers::Grid do
6
+ let(:view) { ActionView::Base.new.extend subject }
7
+
8
+ describe '.block_grid' do
9
+ it 'can render a block-grid' do
10
+ expect(view.block_grid up: :two).to eql <<-HTML.compress
11
+ <table class="block-grid two-up">
12
+ <tr></tr>
13
+ </table>
14
+ HTML
15
+ end
16
+
17
+ it 'can render a block-grid with classes' do
18
+ expect(view.block_grid up: :two, class: 'row').to eql <<-HTML.compress
19
+ <table class="block-grid two-up row">
20
+ <tr></tr>
21
+ </table>
22
+ HTML
23
+ end
24
+ end
25
+
26
+ describe '.container' do
27
+ it 'can render a container' do
28
+ expect(view.container).to eql <<-HTML.compress
29
+ <table class="container">
30
+ <tr>
31
+ <td></td>
32
+ </tr>
33
+ </table>
34
+ HTML
35
+ end
36
+ end
37
+
38
+ describe '.row' do
39
+ it 'can render a row' do
40
+ expect(view.row).to eql <<-HTML.compress
41
+ <table class="row">
42
+ <tr></tr>
43
+ </table>
44
+ HTML
45
+ end
46
+ end
47
+
48
+ describe '.panel_sub_grid' do
49
+ it 'can render a panel sub-grid' do
50
+ expect(view.panel_sub_grid).to eql <<-HTML.compress
51
+ <td class="panel sub-grid">
52
+ <table>
53
+ <tr></tr>
54
+ </table>
55
+ </td>
56
+ HTML
57
+ end
58
+ end
59
+
60
+ describe '.columns' do
61
+ it 'can render one column' do
62
+ expect(view.column :one).to eql <<-HTML.compress
63
+ <table class="one columns">
64
+ <tr>
65
+ <td class="expander"></td>
66
+ </tr>
67
+ </table>
68
+ HTML
69
+ end
70
+
71
+ it 'can render multiple columns' do
72
+ expect(view.columns :two).to eql <<-HTML.compress
73
+ <table class="two columns">
74
+ <tr>
75
+ <td class="expander"></td>
76
+ </tr>
77
+ </table>
78
+ HTML
79
+ end
80
+
81
+ it 'can have text-padding' do
82
+ expect(view.columns(:four, class: 'right-text-pad')).to eql <<-HTML.compress
83
+ <table class="four columns">
84
+ <tr>
85
+ <td class="right-text-pad"></td>
86
+ <td class="expander"></td>
87
+ </tr>
88
+ </table>
89
+ HTML
90
+ end
91
+ end
92
+
93
+ describe '.sub_columns' do
94
+ it 'can render a sub-column' do
95
+ expect(view.sub_column :one).to eql <<-HTML.compress
96
+ <td class="one sub-columns"></td>
97
+ HTML
98
+ end
99
+
100
+ it 'can render multiple sub-columns' do
101
+ expect(view.sub_columns :two).to eql <<-HTML.compress
102
+ <td class="two sub-columns"></td>
103
+ HTML
104
+ end
105
+ end
106
+
107
+ describe '.wrapper' do
108
+ it 'can be empty' do
109
+ expect(view.wrapper).to eql <<-HTML.compress
110
+ <td></td>
111
+ HTML
112
+ end
113
+
114
+ it 'can yield content' do
115
+ expect(view.wrapper { "Content" }).to eql <<-HTML.compress
116
+ <td>Content</td>
117
+ HTML
118
+ end
119
+
120
+ it 'can have a class' do
121
+ expect(view.wrapper(class: 'wrapper') { 'Content' }).to eql <<-HTML.compress
122
+ <td class="wrapper">Content</td>
123
+ HTML
124
+ end
125
+
126
+ it 'can have multiple classes' do
127
+ expect(view.wrapper(class: 'wrapper last') { 'Content' }).to eql <<-HTML.compress
128
+ <td class="wrapper last">Content</td>
129
+ HTML
130
+ end
131
+ end
132
+
133
+ context 'private' do
134
+ describe '.optional_content' do
135
+ it 'can center content' do
136
+ oc = view.send(:optional_content, class: 'center') { "Content" }
137
+ expect(oc).to eql <<-HTML.compress
138
+ <center>Content</center>
139
+ HTML
140
+ end
141
+ end
142
+ end
143
+
144
+ context 'example' do
145
+ it 'can render two rows, twelve and six by six' do
146
+ example = view.container do
147
+ view.row do
148
+ view.wrapper(class: 'wrapper last') do
149
+ view.columns(:twelve, class: 'panel') { '.twelve.columns' }
150
+ end
151
+ end +
152
+ view.row do
153
+ view.wrapper(class: 'wrapper') do
154
+ view.columns(:six, class: 'panel') { '.six.columns' }
155
+ end +
156
+ view.wrapper(class: 'wrapper last') do
157
+ view.columns(:six, class: 'panel') { '.six.columns' }
158
+ end
159
+ end
160
+ end
161
+
162
+ expect(example).to eql <<-HTML.compress
163
+ <table class="container">
164
+ <tr>
165
+ <td>
166
+
167
+ <table class="row">
168
+ <tr>
169
+ <td class="wrapper last">
170
+
171
+ <table class="twelve columns">
172
+ <tr>
173
+ <td class="panel">.twelve.columns</td>
174
+ <td class="expander"></td>
175
+ </tr>
176
+ </table>
177
+
178
+ </td>
179
+ </tr>
180
+ </table>
181
+
182
+ <table class="row">
183
+ <tr>
184
+ <td class="wrapper">
185
+
186
+ <table class="six columns">
187
+ <tr>
188
+ <td class="panel">.six.columns</td>
189
+ <td class="expander"></td>
190
+ </tr>
191
+ </table>
192
+
193
+ </td>
194
+ <td class="wrapper last">
195
+
196
+ <table class="six columns">
197
+ <tr>
198
+ <td class="panel">.six.columns</td>
199
+ <td class="expander"></td>
200
+ </tr>
201
+ </table>
202
+
203
+ </td>
204
+ </tr>
205
+ </table>
206
+
207
+ </td>
208
+ </tr>
209
+ </table>
210
+ HTML
211
+ end
212
+
213
+ it 'can render centered content' do
214
+ example = view.row do
215
+ view.wrapper(class: 'wrapper') do
216
+ view.columns(:six, class: 'center panel') { 'Centered content' }
217
+ end +
218
+ view.wrapper(class: 'wrapper last') do
219
+ view.columns(:six, class: 'center panel') do
220
+ image_tag 'http://placehold.it/125x125&text=Centered%20Image', class: 'center', alt: 'centered image'
221
+ end
222
+ end
223
+ end
224
+
225
+ expect(example).to eql <<-HTML.compress
226
+ <table class="row">
227
+ <tr>
228
+ <td class="wrapper">
229
+
230
+ <table class="six columns">
231
+ <tr>
232
+ <td class="center panel">
233
+ <center>Centered content</center>
234
+ </td>
235
+ <td class="expander"></td>
236
+ </tr>
237
+ </table>
238
+
239
+ </td>
240
+ <td class="wrapper last">
241
+
242
+ <table class="six columns">
243
+ <tr>
244
+ <td class="center panel">
245
+ <center><img alt="centered image" class="center" src="http://placehold.it/125x125&amp;text=Centered%20Image" /></center>
246
+ </td>
247
+ <td class="expander"></td>
248
+ </tr>
249
+ </table>
250
+
251
+ </td>
252
+ </tr>
253
+ </table>
254
+ HTML
255
+ end
256
+
257
+ it 'can render offset columns' do
258
+ example = view.row do
259
+ view.wrapper(class: 'wrapper offset-by-four') do
260
+ view.columns(:eight, class: 'panel') { 'Offset Content' }
261
+ end
262
+ end
263
+
264
+ expect(example).to eql <<-HTML.compress
265
+ <table class="row">
266
+ <tr>
267
+ <td class="wrapper offset-by-four">
268
+
269
+ <table class="eight columns">
270
+ <tr>
271
+ <td class="panel">Offset Content</td>
272
+ <td class="expander"></td>
273
+ </tr>
274
+ </table>
275
+
276
+ </td>
277
+ </tr>
278
+ </table>
279
+ HTML
280
+ end
281
+
282
+ it 'can render text-padding' do
283
+ example = view.row do
284
+ view.wrapper(class: 'wrapper') do
285
+ view.columns(:four, class: 'left-text-pad') { 'Text' }
286
+ end +
287
+ view.wrapper(class: 'wrapper') do
288
+ view.columns(:four) { 'Text' }
289
+ end +
290
+ view.wrapper(class: 'wrapper last') do
291
+ view.columns(:four, class: 'right-text-pad') { 'Text' }
292
+ end
293
+ end
294
+
295
+ expect(example).to eql <<-HTML.compress
296
+ <table class="row">
297
+ <tr>
298
+ <td class="wrapper">
299
+
300
+ <table class="four columns">
301
+ <tr>
302
+ <td class="left-text-pad">Text</td>
303
+ <td class="expander"></td>
304
+ </tr>
305
+ </table>
306
+
307
+ </td>
308
+ <td class="wrapper">
309
+
310
+ <table class="four columns">
311
+ <tr>
312
+ <td>Text</td>
313
+ <td class="expander"></td>
314
+ </tr>
315
+ </table>
316
+
317
+ </td>
318
+ <td class="wrapper last">
319
+
320
+ <table class="four columns">
321
+ <tr>
322
+ <td class="right-text-pad">Text</td>
323
+ <td class="expander"></td>
324
+ </tr>
325
+ </table>
326
+
327
+ </td>
328
+ </tr>
329
+ </table>
330
+ HTML
331
+ end
332
+
333
+ it 'can render full-width rows' do
334
+ example = view.row do
335
+ view.wrapper(class: 'center', align: 'center') do
336
+ view.container(class: 'wrapper last') do
337
+ view.columns(:twelve) { 'Content' }
338
+ end
339
+ end
340
+ end
341
+
342
+ expect(example).to eql <<-HTML.compress
343
+ <table class="row">
344
+ <tr>
345
+ <td align="center" class="center">
346
+ <center>
347
+
348
+ <table class="container">
349
+ <tr>
350
+ <td class="wrapper last">
351
+
352
+ <table class="twelve columns">
353
+ <tr>
354
+ <td>Content</td>
355
+ <td class="expander"></td>
356
+ </tr>
357
+ </table>
358
+
359
+ </td>
360
+ </tr>
361
+ </table>
362
+
363
+ </center>
364
+ </td>
365
+ </tr>
366
+ </table>
367
+ HTML
368
+ end
369
+
370
+ it 'can render a sub-grid' do
371
+ example = view.row do
372
+ view.wrapper(class: 'wrapper') do
373
+ view.columns(:eight, sub_columns: true) do
374
+ view.sub_columns(:eight) { '.eight.sub-columns' } +
375
+ view.sub_columns(:four, class: 'last') { '.four.sub-columns' }
376
+ end
377
+ end +
378
+ view.wrapper(class: 'wrapper last') do
379
+ view.columns(:four) { '.four.columns' }
380
+ end
381
+ end
382
+
383
+ expect(example).to eql <<-HTML.compress
384
+ <table class="row">
385
+ <tr>
386
+ <td class="wrapper">
387
+
388
+ <table class="eight columns">
389
+ <tr>
390
+ <td class="eight sub-columns">.eight.sub-columns</td>
391
+ <td class="four sub-columns last">.four.sub-columns</td>
392
+ <td class="expander"></td>
393
+ </tr>
394
+ </table>
395
+
396
+ </td>
397
+ <td class="wrapper last">
398
+
399
+ <table class="four columns">
400
+ <tr>
401
+ <td>.four.columns</td>
402
+ <td class="expander"></td>
403
+ </tr>
404
+ </table>
405
+
406
+ </td>
407
+ </tr>
408
+ </table>
409
+ HTML
410
+ end
411
+
412
+ it 'can render a block-grid' do
413
+ example = view.container do
414
+ view.block_grid(up: :two) do
415
+ view.wrapper { 'Column #1' } +
416
+ view.wrapper { 'Column #2' }
417
+ end
418
+ end
419
+
420
+ expect(example).to eql <<-HTML.compress
421
+ <table class="container">
422
+ <tr>
423
+ <td>
424
+
425
+ <table class="block-grid two-up">
426
+ <tr>
427
+ <td>Column #1</td>
428
+ <td>Column #2</td>
429
+ </tr>
430
+ </table>
431
+
432
+ </td>
433
+ </tr>
434
+ </table>
435
+ HTML
436
+ end
437
+
438
+ it 'can render a sidebar' do
439
+ example = view.row do
440
+ view.wrapper(class: 'wrapper') do
441
+ view.columns(:eight) { 'Main content' }
442
+ end +
443
+ view.wrapper(class: 'wrapper last') do
444
+ view.columns(:four, class: 'panel') { 'Panel content' }
445
+ end
446
+ end
447
+
448
+ expect(example).to eql <<-HTML.compress
449
+ <table class="row">
450
+ <tr>
451
+ <td class="wrapper">
452
+
453
+ <table class="eight columns">
454
+ <tr>
455
+ <td>Main content</td>
456
+ <td class="expander"></td>
457
+ </tr>
458
+ </table>
459
+
460
+ </td>
461
+ <td class="wrapper last">
462
+
463
+ <table class="four columns">
464
+ <tr>
465
+ <td class="panel">Panel content</td>
466
+ <td class="expander"></td>
467
+ </tr>
468
+ </table>
469
+
470
+ </td>
471
+ </tr>
472
+ </table>
473
+ HTML
474
+ end
475
+
476
+ it 'can render a panel with a sub-grid' do
477
+ example = view.columns(:twelve, class: 'panel sub-grid', sub_columns: true) do
478
+ view.panel_sub_grid do
479
+ view.sub_columns(:six) { 'Left Sub-Column' } +
480
+ view.sub_columns(:six) { 'Right Sub-Column' }
481
+ end
482
+ end
483
+
484
+ expect(example).to eql <<-HTML.compress
485
+ <table class="twelve columns">
486
+ <tr>
487
+ <td class="panel sub-grid">
488
+
489
+ <table>
490
+ <tr>
491
+ <td class="six sub-columns">Left Sub-Column</td>
492
+ <td class="six sub-columns">Right Sub-Column</td>
493
+ </tr>
494
+ </table>
495
+
496
+ </td>
497
+ <td class="expander"></td>
498
+ </tr>
499
+ </table>
500
+ HTML
501
+ end
502
+ end
503
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ include Blot::Helpers::Grid
4
+
5
+ describe Blot::Helpers::Visibility do
6
+ let(:view) { ActionView::Base.new.extend subject }
7
+
8
+ it '#show_for_small' do
9
+ expect(view.show_for_small).to eql <<-HTML.compress
10
+ <!--[if !mso]><!-- -->
11
+ <table class="show-for-small">
12
+ <tr>
13
+ <td></td>
14
+ </tr>
15
+ </table>
16
+ <!--<![endif]-->
17
+ HTML
18
+ end
19
+
20
+ it '#hide_for_small' do
21
+ expect(view.hide_for_small).to eql <<-HTML.compress
22
+ <table class="hide-for-small">
23
+ <tr>
24
+ <td></td>
25
+ </tr>
26
+ </table>
27
+ HTML
28
+ end
29
+
30
+ context 'example' do
31
+ it 'can render visibility of columns in a row' do
32
+ example = view.row do
33
+ view.wrapper(class: 'wrapper last') do
34
+ view.show_for_small do
35
+ view.columns(:twelve, class: 'panel') { '.show-for-small' }
36
+ end +
37
+ view.hide_for_small do
38
+ view.columns(:twelve, class: 'panel') { '.hide-for-small' }
39
+ end
40
+ end
41
+ end
42
+
43
+ expect(example).to eql <<-HTML.compress
44
+ <table class="row">
45
+ <tr>
46
+ <td class="wrapper last">
47
+
48
+ <!--[if !mso]><!-- -->
49
+ <table class="show-for-small">
50
+ <tr>
51
+ <td>
52
+
53
+ <table class="twelve columns">
54
+ <tr>
55
+ <td class="panel">.show-for-small</td>
56
+ <td class="expander"></td>
57
+ </tr>
58
+ </table>
59
+
60
+ </td>
61
+ </tr>
62
+ </table>
63
+ <!--<![endif]-->
64
+
65
+ <table class="hide-for-small">
66
+ <tr>
67
+ <td>
68
+
69
+ <table class="twelve columns">
70
+ <tr>
71
+ <td class="panel">.hide-for-small</td>
72
+ <td class="expander"></td>
73
+ </tr>
74
+ </table>
75
+
76
+ </td>
77
+ </tr>
78
+ </table>
79
+
80
+ </td>
81
+ </tr>
82
+ </table>
83
+ HTML
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blot::Helpers do
4
+ subject { Class.new.include Blot::Helpers }
5
+
6
+ it { should include Blot::Helpers::Grid }
7
+ it { should include Blot::Helpers::Visibility }
8
+ it { should include Blot::Helpers::Button }
9
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blot::Railtie do
4
+ it 'should include helpers in action mailer' do
5
+ Blot::Railtie.send(:new).run_initializers
6
+ expect(ActionMailer::Base._helpers).to include Blot::Helpers
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blot::VERSION do
4
+ it { should be_a String }
5
+
6
+ it 'should be semantically versioned' do
7
+ expect(subject.split('.')).to have(3).items
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'rails/all'
5
+
6
+ require 'blot'
7
+
8
+ require 'rspec/its'
9
+ require 'rspec/collection_matchers'
10
+
11
+ require 'support/string'
12
+
13
+ RSpec.configure do |config|
14
+ config.expect_with :rspec do |expectations|
15
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
16
+ end
17
+
18
+ config.mock_with :rspec do |mocks|
19
+ mocks.verify_partial_doubles = true
20
+ end
21
+
22
+ config.run_all_when_everything_filtered = true
23
+ config.warnings = true
24
+
25
+ if config.files_to_run.one?
26
+ config.default_formatter = 'doc'
27
+ end
28
+
29
+ config.order = :random
30
+
31
+ Kernel.srand config.seed
32
+ end
@@ -0,0 +1,5 @@
1
+ String.class_eval do
2
+ def compress
3
+ squish.gsub('> <', '><')
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben A Morgan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2014-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,62 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-its
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-collection_matchers
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
55
111
  description: "\n Tired of all those tables in those emails?\n Blot is a DSL
56
112
  that lets you create them with ease and optimized with the Ink email framework.\n
57
113
  \ "
@@ -62,6 +118,7 @@ extensions: []
62
118
  extra_rdoc_files: []
63
119
  files:
64
120
  - ".gitignore"
121
+ - ".rspec"
65
122
  - Gemfile
66
123
  - LICENSE.txt
67
124
  - README.md
@@ -69,9 +126,19 @@ files:
69
126
  - blot.gemspec
70
127
  - lib/blot.rb
71
128
  - lib/blot/helpers.rb
129
+ - lib/blot/helpers/button.rb
72
130
  - lib/blot/helpers/grid.rb
131
+ - lib/blot/helpers/visibility.rb
73
132
  - lib/blot/railtie.rb
74
133
  - lib/blot/version.rb
134
+ - spec/blot/helpers/button_spec.rb
135
+ - spec/blot/helpers/grid_spec.rb
136
+ - spec/blot/helpers/visibility_spec.rb
137
+ - spec/blot/helpers_spec.rb
138
+ - spec/blot/railtie_spec.rb
139
+ - spec/blot/version_spec.rb
140
+ - spec/spec_helper.rb
141
+ - spec/support/string.rb
75
142
  homepage: https://github.com/BenMorganIO/blot
76
143
  licenses:
77
144
  - MIT
@@ -96,5 +163,13 @@ rubygems_version: 2.2.2
96
163
  signing_key:
97
164
  specification_version: 4
98
165
  summary: Blot, a DSL for Ink emails.
99
- test_files: []
166
+ test_files:
167
+ - spec/blot/helpers/button_spec.rb
168
+ - spec/blot/helpers/grid_spec.rb
169
+ - spec/blot/helpers/visibility_spec.rb
170
+ - spec/blot/helpers_spec.rb
171
+ - spec/blot/railtie_spec.rb
172
+ - spec/blot/version_spec.rb
173
+ - spec/spec_helper.rb
174
+ - spec/support/string.rb
100
175
  has_rdoc: