faml 0.3.4 → 0.3.5

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: c643b558a5d6ef910d8545a6be0501d258c730ea
4
- data.tar.gz: 35de29c371d213c3291c3a3c0f5816b3d9638285
3
+ metadata.gz: fde0bb641367cd51b35eeeb6d1d5b02211d57054
4
+ data.tar.gz: 82f60f95e10a5d7b40fd6c2a16f5504a569a9fc2
5
5
  SHA512:
6
- metadata.gz: 5cebe334bdd49fb358a07f2004df19eb9542d4d215be3197b1bd52c45a035e646b5375084e009031669a7e40908d653bb29eb186f263cabee3211a18b419671d
7
- data.tar.gz: 028cadedad4e8cbbafcb7e62896b2389e40f3c2f18c42bedbc48f1818b5cadfa90d6db8a04af01d8ca9ccdecfeb3d6e873d959008470d0f5d86dad7d91a4c8fb
6
+ metadata.gz: 5a6f81803cfcc97363081929acf0720d511602fe1057d5057b46de50498559004a162b894b5a809c2a6c9d4258f089689d1544feff72c5968436ada5623f9d61
7
+ data.tar.gz: e49cfef05e71d400b49c6367e21f1878237fdac8c2798ff34b2a034aa155f416a7f50e51780963181bf11b96f00efe1d0433ea5ffe7b9fd7ea58ae8585b190ad
@@ -1,3 +1,10 @@
1
+ ## 0.3.5 (2015-10-19)
2
+ - Fix empty class or id rendering
3
+ - It's a regression in v0.3.4.
4
+ - Ignore falsey elements in class or id array
5
+ - For compatibility with haml
6
+ - `%span{class: [1, nil, false, true]}` now renders `<span class='1 true'></span>` .
7
+
1
8
  ## 0.3.4 (2015-10-19)
2
9
  - Support array, rational and complex literal optimization
3
10
  - Now `%div{class: %w[foo bar], data: { foo: 1i, bar: 2r }}` is compiled into string literal.
@@ -79,7 +79,7 @@ substitute_underscores(VALUE str)
79
79
  static int
80
80
  normalize_data_i2(VALUE key, VALUE value, VALUE ptr)
81
81
  {
82
- if (!(RB_TYPE_P(value, T_FALSE) || NIL_P(value))) {
82
+ if (RTEST(value)) {
83
83
  struct normalize_data_i2_arg *arg = (struct normalize_data_i2_arg *)ptr;
84
84
  VALUE k = rb_str_dup(arg->key);
85
85
 
@@ -107,7 +107,7 @@ normalize_data_i(VALUE key, VALUE value, VALUE normalized)
107
107
  } else if (RB_TYPE_P(value, T_TRUE)) {
108
108
  /* Keep Qtrue value */
109
109
  rb_hash_aset(normalized, key, value);
110
- } else if (RB_TYPE_P(value, T_FALSE) || NIL_P(value)) {
110
+ } else if (!RTEST(value)) {
111
111
  /* Delete falsey values */
112
112
  } else {
113
113
  rb_hash_aset(normalized, key, rb_convert_type(value, T_STRING, "String", "to_s"));
@@ -156,7 +156,7 @@ normalize(VALUE hash)
156
156
  rb_hash_foreach(data, FOREACH_FUNC(put_data_attribute), hash);
157
157
  } else if (RB_TYPE_P(value, T_TRUE)) {
158
158
  /* Keep Qtrue value */
159
- } else if (RB_TYPE_P(value, T_FALSE) || NIL_P(value)) {
159
+ } else if (!RTEST(value)) {
160
160
  rb_hash_delete(hash, key);
161
161
  } else {
162
162
  rb_hash_aset(hash, key, rb_convert_type(value, T_STRING, "String", "to_s"));
@@ -214,7 +214,9 @@ build_attribute(VALUE buf, VALUE attr_quote, int is_html, VALUE key, VALUE value
214
214
  VALUE ary = rb_ary_new_capa(len);
215
215
  for (i = 0; i < len; i++) {
216
216
  VALUE v = RARRAY_AREF(value, i);
217
- rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
217
+ if (RTEST(v)) {
218
+ rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
219
+ }
218
220
  }
219
221
  rb_funcall(ary, id_sort_bang, 0);
220
222
  rb_funcall(ary, id_uniq_bang, 0);
@@ -230,7 +232,9 @@ build_attribute(VALUE buf, VALUE attr_quote, int is_html, VALUE key, VALUE value
230
232
  VALUE ary = rb_ary_new_capa(len);
231
233
  for (i = 0; i < len; i++) {
232
234
  VALUE v = RARRAY_AREF(value, i);
233
- rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
235
+ if (RTEST(v)) {
236
+ rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
237
+ }
234
238
  }
235
239
  put_attribute(buf, attr_quote, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_underscore)));
236
240
  }
@@ -1,7 +1,7 @@
1
1
  # Incompatibilities
2
2
  ## Versions
3
3
  - Haml 4.0.7
4
- - Faml 0.3.3
4
+ - Faml 0.3.5
5
5
  - Hamlit 1.7.2
6
6
 
7
7
  ## Table of contents
@@ -37,9 +37,157 @@
37
37
 
38
38
  ```
39
39
 
40
+ # [./spec/render/attribute_spec.rb:67](../../../spec/render/attribute_spec.rb#L67)
41
+ ## Input
42
+ ```haml
43
+ %span{class: []}
44
+ ```
45
+
46
+ ## Faml, Haml
47
+ ```html
48
+ <span></span>
49
+
50
+ ```
51
+
52
+ ## Hamlit
53
+ ```html
54
+ <span class=''></span>
55
+
56
+ ```
57
+
58
+ # [./spec/render/attribute_spec.rb:71](../../../spec/render/attribute_spec.rb#L71)
59
+ ## Input
60
+ ```haml
61
+ - v = [1, nil, false, true]
62
+ %span{class: v}
63
+ ```
64
+
65
+ ## Faml, Haml
66
+ ```html
67
+ <span class='1 true'></span>
68
+
69
+ ```
70
+
71
+ ## Hamlit
72
+ ```html
73
+ <span class='1 false true'></span>
74
+
75
+ ```
76
+
40
77
  # [./spec/render/attribute_spec.rb:71](../../../spec/render/attribute_spec.rb#L71)
41
78
  ## Input
42
79
  ```haml
80
+ - h = { class: [1, nil, false, true] }
81
+ %span{h}
82
+ ```
83
+
84
+ ## Faml, Haml
85
+ ```html
86
+ <span class='1 true'></span>
87
+
88
+ ```
89
+
90
+ ## Hamlit
91
+ ```html
92
+ <span class='1 false true'></span>
93
+
94
+ ```
95
+
96
+ # [./spec/render/attribute_spec.rb:71](../../../spec/render/attribute_spec.rb#L71)
97
+ ## Input
98
+ ```haml
99
+ %span{class: [1, nil, false, true]}
100
+ ```
101
+
102
+ ## Faml, Haml
103
+ ```html
104
+ <span class='1 true'></span>
105
+
106
+ ```
107
+
108
+ ## Hamlit
109
+ ```html
110
+ <span class='1 false true'></span>
111
+
112
+ ```
113
+
114
+ # [./spec/render/attribute_spec.rb:81](../../../spec/render/attribute_spec.rb#L81)
115
+ ## Input
116
+ ```haml
117
+ %span{id: []}
118
+ ```
119
+
120
+ ## Faml, Haml
121
+ ```html
122
+ <span></span>
123
+
124
+ ```
125
+
126
+ ## Hamlit
127
+ ```html
128
+ <span id=''></span>
129
+
130
+ ```
131
+
132
+ # [./spec/render/attribute_spec.rb:85](../../../spec/render/attribute_spec.rb#L85)
133
+ ## Input
134
+ ```haml
135
+ - v = [1, nil, false, true]
136
+ %span{id: v}
137
+ ```
138
+
139
+ ## Faml, Haml
140
+ ```html
141
+ <span id='1_true'></span>
142
+
143
+ ```
144
+
145
+ ## Hamlit
146
+ ```html
147
+ <span id='1__false_true'></span>
148
+
149
+ ```
150
+
151
+ # [./spec/render/attribute_spec.rb:85](../../../spec/render/attribute_spec.rb#L85)
152
+ ## Input
153
+ ```haml
154
+ - h = { id: [1, nil, false, true] }
155
+ %span{h}
156
+ ```
157
+
158
+ ## Faml, Haml
159
+ ```html
160
+ <span id='1_true'></span>
161
+
162
+ ```
163
+
164
+ ## Hamlit
165
+ ```html
166
+ <span id='1__false_true'></span>
167
+
168
+ ```
169
+
170
+ # [./spec/render/attribute_spec.rb:85](../../../spec/render/attribute_spec.rb#L85)
171
+ ## Input
172
+ ```haml
173
+ %span{id: [1, nil, false, true]}
174
+ ```
175
+
176
+ ## Faml, Haml
177
+ ```html
178
+ <span id='1_true'></span>
179
+
180
+ ```
181
+
182
+ ## Hamlit
183
+ ```html
184
+ <span id='1__false_true'></span>
185
+
186
+ ```
187
+
188
+ # [./spec/render/attribute_spec.rb:91](../../../spec/render/attribute_spec.rb#L91)
189
+ ## Input
190
+ ```haml
43
191
  %span{class: "x\"y'z"} hello
44
192
  ```
45
193
 
@@ -55,7 +203,7 @@
55
203
 
56
204
  ```
57
205
 
58
- # [./spec/render/attribute_spec.rb:84](../../../spec/render/attribute_spec.rb#L84)
206
+ # [./spec/render/attribute_spec.rb:104](../../../spec/render/attribute_spec.rb#L104)
59
207
  ## Input (with options={:format=>:xhtml})
60
208
  ```haml
61
209
  - foo = true
@@ -74,7 +222,7 @@
74
222
 
75
223
  ```
76
224
 
77
- # [./spec/render/attribute_spec.rb:84](../../../spec/render/attribute_spec.rb#L84)
225
+ # [./spec/render/attribute_spec.rb:104](../../../spec/render/attribute_spec.rb#L104)
78
226
  ## Input (with options={:format=>:xhtml})
79
227
  ```haml
80
228
  - h = {foo: true, bar: 1}
@@ -93,7 +241,7 @@
93
241
 
94
242
  ```
95
243
 
96
- # [./spec/render/attribute_spec.rb:91](../../../spec/render/attribute_spec.rb#L91)
244
+ # [./spec/render/attribute_spec.rb:111](../../../spec/render/attribute_spec.rb#L111)
97
245
  ## Input
98
246
  ```haml
99
247
  %span{foo: {bar: 1+2}} hello
@@ -111,7 +259,7 @@
111
259
 
112
260
  ```
113
261
 
114
- # [./spec/render/attribute_spec.rb:95](../../../spec/render/attribute_spec.rb#L95)
262
+ # [./spec/render/attribute_spec.rb:115](../../../spec/render/attribute_spec.rb#L115)
115
263
  ## Input
116
264
  ```haml
117
265
  - attrs = { foo: 1, bar: { hoge: :fuga }, baz: true }
@@ -137,7 +285,7 @@
137
285
 
138
286
  ```
139
287
 
140
- # [./spec/render/attribute_spec.rb:109](../../../spec/render/attribute_spec.rb#L109)
288
+ # [./spec/render/attribute_spec.rb:129](../../../spec/render/attribute_spec.rb#L129)
141
289
  ## Input
142
290
  ```haml
143
291
  - data = { foo: 1 }
@@ -157,7 +305,7 @@
157
305
 
158
306
  ```
159
307
 
160
- # [./spec/render/attribute_spec.rb:116](../../../spec/render/attribute_spec.rb#L116)
308
+ # [./spec/render/attribute_spec.rb:136](../../../spec/render/attribute_spec.rb#L136)
161
309
  ## Input
162
310
  ```haml
163
311
  %span{foo: {bar: 1+2}} hello
@@ -175,7 +323,7 @@
175
323
 
176
324
  ```
177
325
 
178
- # [./spec/render/attribute_spec.rb:139](../../../spec/render/attribute_spec.rb#L139)
326
+ # [./spec/render/attribute_spec.rb:159](../../../spec/render/attribute_spec.rb#L159)
179
327
  ## Input
180
328
  ```haml
181
329
  %span{data: {foo: 1, bar: 'baz', :hoge => :fuga, k1: { k2: 'v3' }}} hello
@@ -193,7 +341,7 @@
193
341
 
194
342
  ```
195
343
 
196
- # [./spec/render/attribute_spec.rb:147](../../../spec/render/attribute_spec.rb#L147)
344
+ # [./spec/render/attribute_spec.rb:167](../../../spec/render/attribute_spec.rb#L167)
197
345
  ## Input
198
346
  ```haml
199
347
  %span{data: {foo: 1, bar: 2+3}} hello
@@ -211,7 +359,7 @@
211
359
 
212
360
  ```
213
361
 
214
- # [./spec/render/attribute_spec.rb:151](../../../spec/render/attribute_spec.rb#L151)
362
+ # [./spec/render/attribute_spec.rb:171](../../../spec/render/attribute_spec.rb#L171)
215
363
  ## Input
216
364
  ```haml
217
365
  - data = { foo: 1, bar: 2 }
@@ -231,7 +379,7 @@
231
379
 
232
380
  ```
233
381
 
234
- # [./spec/render/attribute_spec.rb:169](../../../spec/render/attribute_spec.rb#L169)
382
+ # [./spec/render/attribute_spec.rb:189](../../../spec/render/attribute_spec.rb#L189)
235
383
  ## Input
236
384
  ```haml
237
385
  %span{b: __LINE__,
@@ -251,7 +399,7 @@
251
399
 
252
400
  ```
253
401
 
254
- # [./spec/render/attribute_spec.rb:176](../../../spec/render/attribute_spec.rb#L176)
402
+ # [./spec/render/attribute_spec.rb:196](../../../spec/render/attribute_spec.rb#L196)
255
403
  ## Input
256
404
  ```haml
257
405
  %span{"foo\0bar" => "hello"}
@@ -269,7 +417,7 @@
269
417
 
270
418
  ```
271
419
 
272
- # [./spec/render/attribute_spec.rb:176](../../../spec/render/attribute_spec.rb#L176)
420
+ # [./spec/render/attribute_spec.rb:196](../../../spec/render/attribute_spec.rb#L196)
273
421
  ## Input
274
422
  ```haml
275
423
  - val = "hello"
@@ -289,7 +437,7 @@
289
437
 
290
438
  ```
291
439
 
292
- # [./spec/render/attribute_spec.rb:176](../../../spec/render/attribute_spec.rb#L176)
440
+ # [./spec/render/attribute_spec.rb:196](../../../spec/render/attribute_spec.rb#L196)
293
441
  ## Input
294
442
  ```haml
295
443
  - key = "foo\0bar"
@@ -319,7 +319,7 @@ module Faml
319
319
  static_attributes[k.to_s] = v
320
320
  end
321
321
 
322
- class_list = Array(static_attributes['class']).flat_map { |c| c.to_s.split(/ +/) }
322
+ class_list = Array(static_attributes.delete('class')).select { |v| v }.flat_map { |c| c.to_s.split(/ +/) }
323
323
  unless static_class.empty?
324
324
  class_list.concat(static_class.split(/ +/))
325
325
  end
@@ -327,7 +327,7 @@ module Faml
327
327
  static_attributes['class'] = class_list.uniq.sort.join(' ')
328
328
  end
329
329
 
330
- id_list = Array(static_attributes['id'])
330
+ id_list = Array(static_attributes.delete('id')).select { |v| v }
331
331
  unless static_id.empty?
332
332
  id_list = [static_id].concat(id_list)
333
333
  end
@@ -1,3 +1,3 @@
1
1
  module Faml
2
- VERSION = '0.3.4'
2
+ VERSION = '0.3.5'
3
3
  end
@@ -64,10 +64,30 @@ HAML
64
64
  expect(render_string('%span.foo{class: %w[foo bar]}')).to eq("<span class='bar foo'></span>\n")
65
65
  end
66
66
 
67
+ it 'skips empty array class' do
68
+ expect(render_string('%span{class: []}')).to eq("<span></span>\n")
69
+ end
70
+
71
+ it 'skips falsey array elements in class' do
72
+ expect(render_string('%span{class: [1, nil, false, true]}')).to eq("<span class='1 true'></span>\n")
73
+ expect(render_string("- v = [1, nil, false, true]\n%span{class: v}")).to eq("<span class='1 true'></span>\n")
74
+ expect(render_string("- h = { class: [1, nil, false, true] }\n%span{h}")).to eq("<span class='1 true'></span>\n")
75
+ end
76
+
67
77
  it 'strigify non-string ids' do
68
78
  expect(render_string('%span#foo{id: :bar} hello')).to eq("<span id='foo_bar'>hello</span>\n")
69
79
  end
70
80
 
81
+ it 'skips empty array class' do
82
+ expect(render_string('%span{id: []}')).to eq("<span></span>\n")
83
+ end
84
+
85
+ it 'skips falsey array elements in id' do
86
+ expect(render_string('%span{id: [1, nil, false, true]}')).to eq("<span id='1_true'></span>\n")
87
+ expect(render_string("- v = [1, nil, false, true]\n%span{id: v}")).to eq("<span id='1_true'></span>\n")
88
+ expect(render_string("- h = { id: [1, nil, false, true] }\n%span{h}")).to eq("<span id='1_true'></span>\n")
89
+ end
90
+
71
91
  it 'escapes' do
72
92
  expect(render_string(%q|%span{class: "x\"y'z"} hello|)).to eq(%Q{<span class='x&quot;y&#39;z'>hello</span>\n})
73
93
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-18 00:00:00.000000000 Z
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escape_utils
@@ -511,7 +511,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
511
511
  version: '0'
512
512
  requirements: []
513
513
  rubyforge_project:
514
- rubygems_version: 2.5.0
514
+ rubygems_version: 2.4.5.1
515
515
  signing_key:
516
516
  specification_version: 4
517
517
  summary: Faster implementation of Haml template language.