faml 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/ext/attribute_builder/attribute_builder.c +69 -40
- data/incompatibilities/README.md +1 -1
- data/incompatibilities/spec/render/attribute_spec.md +71 -33
- data/lib/faml/attribute_compiler.rb +3 -14
- data/lib/faml/attribute_optimizer.rb +6 -30
- data/lib/faml/version.rb +1 -1
- data/spec/render/attribute_spec.rb +15 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: beef30a714bedb8c79f1ff6382d91ce5d79cd7ea
|
4
|
+
data.tar.gz: 0dfd73a88e67ebc32d5ec3aa7eecd190110c92c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8be5c3da3eb798f52e9c23e2db8e7f4b2826fdeb6cacd929f17c36dc4fdfcc14f472d10345f0f4dc6618a8e036ca3f6fdeba08458af8ad9428134e811a15356
|
7
|
+
data.tar.gz: 608fd49b52622683bf2eda3e401ecea2798ded3582f0367b28f981d54cfc50c2ac60e3f1340266e7543e4fd53891b3d8321adf255e17b98c3069ff57db6f7d59
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.6.3 (2015-11-22)
|
2
|
+
- Remove duplicated class in Ruby attribute case
|
3
|
+
- `%span.foo{h}` where `h = { class: 'foo bar' }` now renders `<span class='bar foo'></span>` .
|
4
|
+
- `%span.foo{class: 'foo bar'}` renders `<span class='bar foo'></span>` since v0.2.12 .
|
5
|
+
|
1
6
|
## 0.6.2 (2015-11-22)
|
2
7
|
- Fix data-id and data-class attribute
|
3
8
|
- https://github.com/eagletmt/faml/pull/39
|
@@ -177,16 +177,74 @@ merge_one(VALUE attributes, VALUE arg)
|
|
177
177
|
}
|
178
178
|
|
179
179
|
static void
|
180
|
-
|
180
|
+
join_class_attribute(VALUE attributes, VALUE key)
|
181
181
|
{
|
182
|
+
long len;
|
183
|
+
VALUE val;
|
184
|
+
|
185
|
+
val = rb_hash_delete(attributes, key);
|
186
|
+
Check_Type(val, T_ARRAY);
|
187
|
+
len = RARRAY_LEN(val);
|
188
|
+
if (len != 0) {
|
189
|
+
long i;
|
190
|
+
VALUE ary = rb_ary_new_capa(len);
|
191
|
+
for (i = 0; i < len; i++) {
|
192
|
+
VALUE v = RARRAY_AREF(val, i);
|
193
|
+
if (RTEST(v)) {
|
194
|
+
rb_ary_concat(ary, rb_str_split(rb_convert_type(v, T_STRING, "String", "to_s"), " "));
|
195
|
+
}
|
196
|
+
}
|
197
|
+
rb_funcall(ary, id_sort_bang, 0);
|
198
|
+
rb_funcall(ary, id_uniq_bang, 0);
|
199
|
+
rb_hash_aset(attributes, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_space)));
|
200
|
+
}
|
201
|
+
}
|
202
|
+
|
203
|
+
static void
|
204
|
+
join_id_attribute(VALUE attributes, VALUE key)
|
205
|
+
{
|
206
|
+
long len;
|
207
|
+
VALUE val;
|
208
|
+
|
209
|
+
val = rb_hash_delete(attributes, key);
|
210
|
+
Check_Type(val, T_ARRAY);
|
211
|
+
len = RARRAY_LEN(val);
|
212
|
+
if (len != 0) {
|
213
|
+
long i;
|
214
|
+
VALUE ary = rb_ary_new_capa(len);
|
215
|
+
for (i = 0; i < len; i++) {
|
216
|
+
VALUE v = RARRAY_AREF(val, i);
|
217
|
+
if (RTEST(v)) {
|
218
|
+
rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
|
219
|
+
}
|
220
|
+
}
|
221
|
+
rb_hash_aset(attributes, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_underscore)));
|
222
|
+
}
|
223
|
+
}
|
224
|
+
|
225
|
+
static VALUE
|
226
|
+
merge(VALUE object_ref, int argc, VALUE *argv)
|
227
|
+
{
|
228
|
+
VALUE attributes, id_str, class_str;
|
182
229
|
int i;
|
183
230
|
|
231
|
+
attributes = rb_hash_new();
|
232
|
+
id_str = rb_const_get(rb_mAttributeBuilder, id_id);
|
233
|
+
class_str = rb_const_get(rb_mAttributeBuilder, id_class);
|
234
|
+
rb_hash_aset(attributes, id_str, rb_ary_new());
|
235
|
+
rb_hash_aset(attributes, class_str, rb_ary_new());
|
236
|
+
|
184
237
|
for (i = 0; i < argc; i++) {
|
185
238
|
merge_one(attributes, argv[i]);
|
186
239
|
}
|
187
240
|
if (!NIL_P(object_ref)) {
|
188
241
|
merge_one(attributes, object_ref);
|
189
242
|
}
|
243
|
+
|
244
|
+
join_class_attribute(attributes, class_str);
|
245
|
+
join_id_attribute(attributes, id_str);
|
246
|
+
|
247
|
+
return attributes;
|
190
248
|
}
|
191
249
|
|
192
250
|
static void
|
@@ -212,41 +270,7 @@ static void
|
|
212
270
|
build_attribute(VALUE buf, VALUE attr_quote, int is_html, VALUE key, VALUE value)
|
213
271
|
{
|
214
272
|
Check_Type(key, T_STRING);
|
215
|
-
if (
|
216
|
-
long len;
|
217
|
-
|
218
|
-
Check_Type(value, T_ARRAY);
|
219
|
-
len = RARRAY_LEN(value);
|
220
|
-
if (len != 0) {
|
221
|
-
long i;
|
222
|
-
VALUE ary = rb_ary_new_capa(len);
|
223
|
-
for (i = 0; i < len; i++) {
|
224
|
-
VALUE v = RARRAY_AREF(value, i);
|
225
|
-
if (RTEST(v)) {
|
226
|
-
rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
|
227
|
-
}
|
228
|
-
}
|
229
|
-
rb_funcall(ary, id_sort_bang, 0);
|
230
|
-
rb_funcall(ary, id_uniq_bang, 0);
|
231
|
-
put_attribute(buf, attr_quote, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_space)));
|
232
|
-
}
|
233
|
-
} else if (RSTRING_LEN(key) == 2 && memcmp(RSTRING_PTR(key), "id", 2) == 0) {
|
234
|
-
long len = RARRAY_LEN(value);
|
235
|
-
|
236
|
-
Check_Type(value, T_ARRAY);
|
237
|
-
len = RARRAY_LEN(value);
|
238
|
-
if (len != 0) {
|
239
|
-
long i;
|
240
|
-
VALUE ary = rb_ary_new_capa(len);
|
241
|
-
for (i = 0; i < len; i++) {
|
242
|
-
VALUE v = RARRAY_AREF(value, i);
|
243
|
-
if (RTEST(v)) {
|
244
|
-
rb_ary_push(ary, rb_convert_type(v, T_STRING, "String", "to_s"));
|
245
|
-
}
|
246
|
-
}
|
247
|
-
put_attribute(buf, attr_quote, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_underscore)));
|
248
|
-
}
|
249
|
-
} else if (RB_TYPE_P(value, T_TRUE)) {
|
273
|
+
if (RB_TYPE_P(value, T_TRUE)) {
|
250
274
|
if (is_html) {
|
251
275
|
rb_ary_push(buf, rb_const_get(rb_mAttributeBuilder, id_space));
|
252
276
|
rb_ary_push(buf, key);
|
@@ -269,10 +293,7 @@ m_build(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
|
|
269
293
|
attr_quote = argv[0];
|
270
294
|
is_html = RTEST(argv[1]);
|
271
295
|
object_ref = argv[2];
|
272
|
-
attributes =
|
273
|
-
rb_hash_aset(attributes, rb_const_get(rb_mAttributeBuilder, id_id), rb_ary_new());
|
274
|
-
rb_hash_aset(attributes, rb_const_get(rb_mAttributeBuilder, id_class), rb_ary_new());
|
275
|
-
merge(attributes, object_ref, argc-3, argv+3);
|
296
|
+
attributes = merge(object_ref, argc-3, argv+3);
|
276
297
|
|
277
298
|
keys = rb_funcall(attributes, id_keys, 0);
|
278
299
|
rb_funcall(keys, id_sort_bang, 0);
|
@@ -292,6 +313,13 @@ m_normalize_data(RB_UNUSED_VAR(VALUE self), VALUE data)
|
|
292
313
|
return normalize_data(data);
|
293
314
|
}
|
294
315
|
|
316
|
+
static VALUE
|
317
|
+
m_merge(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
|
318
|
+
{
|
319
|
+
rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
|
320
|
+
return merge(argv[0], argc-1, argv+1);
|
321
|
+
}
|
322
|
+
|
295
323
|
void
|
296
324
|
Init_attribute_builder(void)
|
297
325
|
{
|
@@ -299,6 +327,7 @@ Init_attribute_builder(void)
|
|
299
327
|
rb_mAttributeBuilder = rb_define_module_under(mFaml, "AttributeBuilder");
|
300
328
|
rb_define_singleton_method(rb_mAttributeBuilder, "build", RUBY_METHOD_FUNC(m_build), -1);
|
301
329
|
rb_define_singleton_method(rb_mAttributeBuilder, "normalize_data", RUBY_METHOD_FUNC(m_normalize_data), 1);
|
330
|
+
rb_define_singleton_method(rb_mAttributeBuilder, "merge", RUBY_METHOD_FUNC(m_merge), -1);
|
302
331
|
|
303
332
|
id_keys = rb_intern("keys");
|
304
333
|
id_sort_bang = rb_intern("sort!");
|
data/incompatibilities/README.md
CHANGED
@@ -37,7 +37,45 @@
|
|
37
37
|
|
38
38
|
```
|
39
39
|
|
40
|
-
# [./spec/render/attribute_spec.rb:
|
40
|
+
# [./spec/render/attribute_spec.rb:62](../../../spec/render/attribute_spec.rb#L62)
|
41
|
+
## Input
|
42
|
+
```haml
|
43
|
+
- v = 'foo bar'
|
44
|
+
%span.foo{class: v}
|
45
|
+
```
|
46
|
+
|
47
|
+
## Faml, Haml
|
48
|
+
```html
|
49
|
+
<span class='bar foo'></span>
|
50
|
+
|
51
|
+
```
|
52
|
+
|
53
|
+
## Hamlit
|
54
|
+
```html
|
55
|
+
<span class='foo foo bar'></span>
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
# [./spec/render/attribute_spec.rb:62](../../../spec/render/attribute_spec.rb#L62)
|
60
|
+
## Input
|
61
|
+
```haml
|
62
|
+
- h = {class: 'foo bar'}
|
63
|
+
%span.foo{h}
|
64
|
+
```
|
65
|
+
|
66
|
+
## Faml, Haml
|
67
|
+
```html
|
68
|
+
<span class='bar foo'></span>
|
69
|
+
|
70
|
+
```
|
71
|
+
|
72
|
+
## Hamlit
|
73
|
+
```html
|
74
|
+
<span class='foo foo bar'></span>
|
75
|
+
|
76
|
+
```
|
77
|
+
|
78
|
+
# [./spec/render/attribute_spec.rb:80](../../../spec/render/attribute_spec.rb#L80)
|
41
79
|
## Input
|
42
80
|
```haml
|
43
81
|
%span{class: []}
|
@@ -55,7 +93,7 @@
|
|
55
93
|
|
56
94
|
```
|
57
95
|
|
58
|
-
# [./spec/render/attribute_spec.rb:
|
96
|
+
# [./spec/render/attribute_spec.rb:84](../../../spec/render/attribute_spec.rb#L84)
|
59
97
|
## Input
|
60
98
|
```haml
|
61
99
|
%span{class: [1, nil, false, true]}
|
@@ -73,7 +111,7 @@
|
|
73
111
|
|
74
112
|
```
|
75
113
|
|
76
|
-
# [./spec/render/attribute_spec.rb:
|
114
|
+
# [./spec/render/attribute_spec.rb:84](../../../spec/render/attribute_spec.rb#L84)
|
77
115
|
## Input
|
78
116
|
```haml
|
79
117
|
- v = [1, nil, false, true]
|
@@ -92,7 +130,7 @@
|
|
92
130
|
|
93
131
|
```
|
94
132
|
|
95
|
-
# [./spec/render/attribute_spec.rb:
|
133
|
+
# [./spec/render/attribute_spec.rb:84](../../../spec/render/attribute_spec.rb#L84)
|
96
134
|
## Input
|
97
135
|
```haml
|
98
136
|
- h = { class: [1, nil, false, true] }
|
@@ -111,7 +149,7 @@
|
|
111
149
|
|
112
150
|
```
|
113
151
|
|
114
|
-
# [./spec/render/attribute_spec.rb:
|
152
|
+
# [./spec/render/attribute_spec.rb:94](../../../spec/render/attribute_spec.rb#L94)
|
115
153
|
## Input
|
116
154
|
```haml
|
117
155
|
%span{id: []}
|
@@ -129,7 +167,7 @@
|
|
129
167
|
|
130
168
|
```
|
131
169
|
|
132
|
-
# [./spec/render/attribute_spec.rb:
|
170
|
+
# [./spec/render/attribute_spec.rb:98](../../../spec/render/attribute_spec.rb#L98)
|
133
171
|
## Input
|
134
172
|
```haml
|
135
173
|
%span{id: [1, nil, false, true]}
|
@@ -147,7 +185,7 @@
|
|
147
185
|
|
148
186
|
```
|
149
187
|
|
150
|
-
# [./spec/render/attribute_spec.rb:
|
188
|
+
# [./spec/render/attribute_spec.rb:98](../../../spec/render/attribute_spec.rb#L98)
|
151
189
|
## Input
|
152
190
|
```haml
|
153
191
|
- v = [1, nil, false, true]
|
@@ -166,7 +204,7 @@
|
|
166
204
|
|
167
205
|
```
|
168
206
|
|
169
|
-
# [./spec/render/attribute_spec.rb:
|
207
|
+
# [./spec/render/attribute_spec.rb:98](../../../spec/render/attribute_spec.rb#L98)
|
170
208
|
## Input
|
171
209
|
```haml
|
172
210
|
- h = { id: [1, nil, false, true] }
|
@@ -185,7 +223,7 @@
|
|
185
223
|
|
186
224
|
```
|
187
225
|
|
188
|
-
# [./spec/render/attribute_spec.rb:
|
226
|
+
# [./spec/render/attribute_spec.rb:104](../../../spec/render/attribute_spec.rb#L104)
|
189
227
|
## Input
|
190
228
|
```haml
|
191
229
|
%span{class: "x\"y'z"} hello
|
@@ -203,7 +241,7 @@
|
|
203
241
|
|
204
242
|
```
|
205
243
|
|
206
|
-
# [./spec/render/attribute_spec.rb:
|
244
|
+
# [./spec/render/attribute_spec.rb:122](../../../spec/render/attribute_spec.rb#L122)
|
207
245
|
## Input (with options={:format=>:xhtml})
|
208
246
|
```haml
|
209
247
|
- foo = true
|
@@ -222,7 +260,7 @@
|
|
222
260
|
|
223
261
|
```
|
224
262
|
|
225
|
-
# [./spec/render/attribute_spec.rb:
|
263
|
+
# [./spec/render/attribute_spec.rb:122](../../../spec/render/attribute_spec.rb#L122)
|
226
264
|
## Input (with options={:format=>:xhtml})
|
227
265
|
```haml
|
228
266
|
- h = {foo: true, bar: 1}
|
@@ -241,7 +279,7 @@
|
|
241
279
|
|
242
280
|
```
|
243
281
|
|
244
|
-
# [./spec/render/attribute_spec.rb:
|
282
|
+
# [./spec/render/attribute_spec.rb:129](../../../spec/render/attribute_spec.rb#L129)
|
245
283
|
## Input
|
246
284
|
```haml
|
247
285
|
%span{foo: {bar: 1+2}} hello
|
@@ -259,7 +297,7 @@
|
|
259
297
|
|
260
298
|
```
|
261
299
|
|
262
|
-
# [./spec/render/attribute_spec.rb:
|
300
|
+
# [./spec/render/attribute_spec.rb:133](../../../spec/render/attribute_spec.rb#L133)
|
263
301
|
## Input
|
264
302
|
```haml
|
265
303
|
- attrs = { foo: 1, bar: { hoge: :fuga }, baz: true }
|
@@ -285,7 +323,7 @@
|
|
285
323
|
|
286
324
|
```
|
287
325
|
|
288
|
-
# [./spec/render/attribute_spec.rb:
|
326
|
+
# [./spec/render/attribute_spec.rb:147](../../../spec/render/attribute_spec.rb#L147)
|
289
327
|
## Input
|
290
328
|
```haml
|
291
329
|
- data = { foo: 1 }
|
@@ -305,7 +343,7 @@
|
|
305
343
|
|
306
344
|
```
|
307
345
|
|
308
|
-
# [./spec/render/attribute_spec.rb:
|
346
|
+
# [./spec/render/attribute_spec.rb:161](../../../spec/render/attribute_spec.rb#L161)
|
309
347
|
## Input
|
310
348
|
```haml
|
311
349
|
%span{foo: {bar: 1+2}} hello
|
@@ -323,7 +361,7 @@
|
|
323
361
|
|
324
362
|
```
|
325
363
|
|
326
|
-
# [./spec/render/attribute_spec.rb:
|
364
|
+
# [./spec/render/attribute_spec.rb:184](../../../spec/render/attribute_spec.rb#L184)
|
327
365
|
## Input
|
328
366
|
```haml
|
329
367
|
%span{data: {foo: 1, bar: 'baz', :hoge => :fuga, k1: { k2: 'v3' }}} hello
|
@@ -341,7 +379,7 @@
|
|
341
379
|
|
342
380
|
```
|
343
381
|
|
344
|
-
# [./spec/render/attribute_spec.rb:
|
382
|
+
# [./spec/render/attribute_spec.rb:192](../../../spec/render/attribute_spec.rb#L192)
|
345
383
|
## Input
|
346
384
|
```haml
|
347
385
|
%span{data: {foo: 1, bar: 2+3}} hello
|
@@ -359,7 +397,7 @@
|
|
359
397
|
|
360
398
|
```
|
361
399
|
|
362
|
-
# [./spec/render/attribute_spec.rb:
|
400
|
+
# [./spec/render/attribute_spec.rb:196](../../../spec/render/attribute_spec.rb#L196)
|
363
401
|
## Input
|
364
402
|
```haml
|
365
403
|
- data = { foo: 1, bar: 2 }
|
@@ -379,7 +417,7 @@
|
|
379
417
|
|
380
418
|
```
|
381
419
|
|
382
|
-
# [./spec/render/attribute_spec.rb:
|
420
|
+
# [./spec/render/attribute_spec.rb:214](../../../spec/render/attribute_spec.rb#L214)
|
383
421
|
## Input
|
384
422
|
```haml
|
385
423
|
%span{b: __LINE__,
|
@@ -399,7 +437,7 @@
|
|
399
437
|
|
400
438
|
```
|
401
439
|
|
402
|
-
# [./spec/render/attribute_spec.rb:
|
440
|
+
# [./spec/render/attribute_spec.rb:221](../../../spec/render/attribute_spec.rb#L221)
|
403
441
|
## Input
|
404
442
|
```haml
|
405
443
|
%span{"foo\0bar" => "hello"}
|
@@ -417,7 +455,7 @@
|
|
417
455
|
|
418
456
|
```
|
419
457
|
|
420
|
-
# [./spec/render/attribute_spec.rb:
|
458
|
+
# [./spec/render/attribute_spec.rb:221](../../../spec/render/attribute_spec.rb#L221)
|
421
459
|
## Input
|
422
460
|
```haml
|
423
461
|
- val = "hello"
|
@@ -437,7 +475,7 @@
|
|
437
475
|
|
438
476
|
```
|
439
477
|
|
440
|
-
# [./spec/render/attribute_spec.rb:
|
478
|
+
# [./spec/render/attribute_spec.rb:221](../../../spec/render/attribute_spec.rb#L221)
|
441
479
|
## Input
|
442
480
|
```haml
|
443
481
|
- key = "foo\0bar"
|
@@ -459,7 +497,7 @@
|
|
459
497
|
... ^
|
460
498
|
```
|
461
499
|
|
462
|
-
# [./spec/render/attribute_spec.rb:
|
500
|
+
# [./spec/render/attribute_spec.rb:235](../../../spec/render/attribute_spec.rb#L235)
|
463
501
|
## Input
|
464
502
|
```haml
|
465
503
|
%span[Faml::TestStruct.new(123)] hello
|
@@ -477,7 +515,7 @@
|
|
477
515
|
|
478
516
|
```
|
479
517
|
|
480
|
-
# [./spec/render/attribute_spec.rb:
|
518
|
+
# [./spec/render/attribute_spec.rb:239](../../../spec/render/attribute_spec.rb#L239)
|
481
519
|
## Input
|
482
520
|
```haml
|
483
521
|
%span[Faml::TestStruct.new(123), :hello] hello
|
@@ -495,7 +533,7 @@
|
|
495
533
|
|
496
534
|
```
|
497
535
|
|
498
|
-
# [./spec/render/attribute_spec.rb:
|
536
|
+
# [./spec/render/attribute_spec.rb:243](../../../spec/render/attribute_spec.rb#L243)
|
499
537
|
## Input
|
500
538
|
```haml
|
501
539
|
%span[Faml::TestRefStruct.new(123)] hello
|
@@ -513,7 +551,7 @@
|
|
513
551
|
|
514
552
|
```
|
515
553
|
|
516
|
-
# [./spec/render/attribute_spec.rb:
|
554
|
+
# [./spec/render/attribute_spec.rb:247](../../../spec/render/attribute_spec.rb#L247)
|
517
555
|
## Input
|
518
556
|
```haml
|
519
557
|
%span#baz[Faml::TestStruct.new(123)]{id: "foo"} hello
|
@@ -531,7 +569,7 @@
|
|
531
569
|
|
532
570
|
```
|
533
571
|
|
534
|
-
# [./spec/render/attribute_spec.rb:
|
572
|
+
# [./spec/render/attribute_spec.rb:253](../../../spec/render/attribute_spec.rb#L253)
|
535
573
|
## Input
|
536
574
|
```haml
|
537
575
|
%span{foo: 1}(foo=2)
|
@@ -549,7 +587,7 @@
|
|
549
587
|
|
550
588
|
```
|
551
589
|
|
552
|
-
# [./spec/render/attribute_spec.rb:
|
590
|
+
# [./spec/render/attribute_spec.rb:253](../../../spec/render/attribute_spec.rb#L253)
|
553
591
|
## Input
|
554
592
|
```haml
|
555
593
|
%span(foo=2){foo: 1}
|
@@ -567,7 +605,7 @@
|
|
567
605
|
|
568
606
|
```
|
569
607
|
|
570
|
-
# [./spec/render/attribute_spec.rb:
|
608
|
+
# [./spec/render/attribute_spec.rb:253](../../../spec/render/attribute_spec.rb#L253)
|
571
609
|
## Input
|
572
610
|
```haml
|
573
611
|
- v = 2
|
@@ -586,7 +624,7 @@
|
|
586
624
|
|
587
625
|
```
|
588
626
|
|
589
|
-
# [./spec/render/attribute_spec.rb:
|
627
|
+
# [./spec/render/attribute_spec.rb:253](../../../spec/render/attribute_spec.rb#L253)
|
590
628
|
## Input
|
591
629
|
```haml
|
592
630
|
- v = 2
|
@@ -605,7 +643,7 @@
|
|
605
643
|
|
606
644
|
```
|
607
645
|
|
608
|
-
# [./spec/render/attribute_spec.rb:
|
646
|
+
# [./spec/render/attribute_spec.rb:253](../../../spec/render/attribute_spec.rb#L253)
|
609
647
|
## Input
|
610
648
|
```haml
|
611
649
|
- h = {foo: 1}
|
@@ -624,7 +662,7 @@
|
|
624
662
|
|
625
663
|
```
|
626
664
|
|
627
|
-
# [./spec/render/attribute_spec.rb:
|
665
|
+
# [./spec/render/attribute_spec.rb:253](../../../spec/render/attribute_spec.rb#L253)
|
628
666
|
## Input
|
629
667
|
```haml
|
630
668
|
- h = {foo: 1}
|
@@ -643,7 +681,7 @@
|
|
643
681
|
|
644
682
|
```
|
645
683
|
|
646
|
-
# [./spec/render/attribute_spec.rb:
|
684
|
+
# [./spec/render/attribute_spec.rb:272](../../../spec/render/attribute_spec.rb#L272)
|
647
685
|
## Input
|
648
686
|
```haml
|
649
687
|
%span{id: 1}(id=2)
|
@@ -42,7 +42,7 @@ module Faml
|
|
42
42
|
def try_optimize_attributes(old_attributes, new_attributes, static_id, static_class)
|
43
43
|
static_attributes, dynamic_attributes = AttributeOptimizer.new.try_optimize(old_attributes, new_attributes, static_id, static_class)
|
44
44
|
if static_attributes
|
45
|
-
(static_attributes.keys + dynamic_attributes.keys).sort.
|
45
|
+
(static_attributes.keys + dynamic_attributes.keys).sort.map do |k|
|
46
46
|
if static_attributes.key?(k)
|
47
47
|
compile_static_attribute(k, static_attributes[k])
|
48
48
|
else
|
@@ -53,17 +53,6 @@ module Faml
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def compile_static_attribute(key, value)
|
56
|
-
if value.is_a?(Hash) && key == 'data'
|
57
|
-
data = AttributeBuilder.normalize_data(value)
|
58
|
-
data.keys.sort.map do |k|
|
59
|
-
compile_static_simple_attribute("data-#{k}", data[k])
|
60
|
-
end
|
61
|
-
else
|
62
|
-
[compile_static_simple_attribute(key, value)]
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def compile_static_simple_attribute(key, value)
|
67
56
|
case
|
68
57
|
when value == true
|
69
58
|
[:haml, :attr, key, [:multi]]
|
@@ -75,13 +64,13 @@ module Faml
|
|
75
64
|
end
|
76
65
|
|
77
66
|
def compile_dynamic_attribute(key, value)
|
78
|
-
[
|
67
|
+
[:haml, :attr, key, [:dvalue, value]]
|
79
68
|
end
|
80
69
|
|
81
70
|
def compile_slow_attributes(old_attributes, new_attributes, static_id, static_class, object_ref)
|
82
71
|
h = {}
|
83
72
|
unless static_class.empty?
|
84
|
-
h[:class] = static_class
|
73
|
+
h[:class] = static_class
|
85
74
|
end
|
86
75
|
unless static_id.empty?
|
87
76
|
h[:id] = static_id
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
|
+
require 'faml/attribute_builder'
|
2
3
|
require_relative 'error'
|
3
4
|
require_relative 'ruby_syntax_checker'
|
4
5
|
require_relative 'static_hash_parser'
|
@@ -44,38 +45,13 @@ module Faml
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def build_optimized_static_attributes(parser, static_id, static_class)
|
47
|
-
|
48
|
-
|
49
|
-
id_list = []
|
50
|
-
parser.static_attributes.each do |k, v|
|
51
|
-
k = k.to_s
|
52
|
-
case k
|
53
|
-
when 'id'
|
54
|
-
id_list.concat(Array(v))
|
55
|
-
when 'class'
|
56
|
-
class_list.concat(Array(v))
|
57
|
-
else
|
58
|
-
static_attributes[k] = v
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
class_list = class_list.select { |v| v }.flat_map { |c| c.to_s.split(/ +/) }
|
63
|
-
unless static_class.empty?
|
64
|
-
class_list.concat(static_class.split(/ +/))
|
48
|
+
if static_id.empty?
|
49
|
+
static_id = nil
|
65
50
|
end
|
66
|
-
|
67
|
-
|
51
|
+
if static_class.empty?
|
52
|
+
static_class = nil
|
68
53
|
end
|
69
|
-
|
70
|
-
id_list = id_list.select { |v| v }
|
71
|
-
unless static_id.empty?
|
72
|
-
id_list = [static_id].concat(id_list)
|
73
|
-
end
|
74
|
-
unless id_list.empty?
|
75
|
-
static_attributes['id'] = id_list.join('_')
|
76
|
-
end
|
77
|
-
|
78
|
-
static_attributes
|
54
|
+
AttributeBuilder.merge(parser.static_attributes, id: static_id, class: static_class)
|
79
55
|
end
|
80
56
|
|
81
57
|
def build_optimized_dynamic_attributes(parser, static_attributes)
|
data/lib/faml/version.rb
CHANGED
@@ -60,9 +60,21 @@ HAML
|
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'remove duplicated classes' do
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
aggregate_failures do
|
64
|
+
expect(render_string('%span.foo{class: :foo}')).to eq("<span class='foo'></span>\n")
|
65
|
+
expect(render_string('%span.foo{class: "foo bar"}')).to eq("<span class='bar foo'></span>\n")
|
66
|
+
expect(render_string('%span.foo{class: %w[foo bar]}')).to eq("<span class='bar foo'></span>\n")
|
67
|
+
end
|
68
|
+
aggregate_failures do
|
69
|
+
expect(render_string("- v = :foo\n%span.foo{class: v}")).to eq("<span class='foo'></span>\n")
|
70
|
+
expect(render_string("- v = 'foo bar'\n%span.foo{class: v}")).to eq("<span class='bar foo'></span>\n")
|
71
|
+
expect(render_string("- v = %w[foo bar]\n%span.foo{class: v}")).to eq("<span class='bar foo'></span>\n")
|
72
|
+
end
|
73
|
+
aggregate_failures do
|
74
|
+
expect(render_string("- h = {class: :foo}\n%span.foo{h}")).to eq("<span class='foo'></span>\n")
|
75
|
+
expect(render_string("- h = {class: 'foo bar'}\n%span.foo{h}")).to eq("<span class='bar foo'></span>\n")
|
76
|
+
expect(render_string("- h = {class: %w[foo bar]}\n%span.foo{h}")).to eq("<span class='bar foo'></span>\n")
|
77
|
+
end
|
66
78
|
end
|
67
79
|
|
68
80
|
it 'skips empty array class' do
|