faml 0.3.0 → 0.3.1
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/attribute_builder/attribute_builder.c +44 -39
- data/lib/faml/compiler.rb +4 -7
- data/lib/faml/ruby_syntax_checker.rb +14 -0
- data/lib/faml/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0b565977825d5840091b528c95126d1145470ff
|
4
|
+
data.tar.gz: 6d7bbd18e0915cdf9a9feb241c40009b85eacddb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea2a871d173b410deccaa0d693f3a6c6aff6479a78e74c1424147a33ff64277eaf4652e921567bf75bc56f58b61148fe14d1f2149bfe62367f1eb9f023bf428a
|
7
|
+
data.tar.gz: fb9112e98d3df4146c058f2075498de3645ef480e1ebb5af2655775e3459d4f79b8291b2a2b82e12e758922b077063f14d63758cdd58bfc605a01242e819a8c4
|
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
|
11
11
|
VALUE rb_mAttributeBuilder;
|
12
12
|
static ID id_keys, id_sort_bang, id_uniq_bang, id_merge_bang, id_temple, id_utils, id_escape_html, id_gsub, id_to_s;
|
13
|
+
static ID id_id, id_class, id_underscore, id_hyphen, id_space, id_equal;
|
13
14
|
|
14
15
|
static void
|
15
16
|
concat_array_attribute(VALUE attributes, VALUE hash, VALUE key)
|
@@ -54,7 +55,7 @@ normalize_data_i2(VALUE key, VALUE value, VALUE ptr)
|
|
54
55
|
struct normalize_data_i2_arg *arg = (struct normalize_data_i2_arg *)ptr;
|
55
56
|
VALUE k = rb_funcall(arg->key, id_to_s, 0);
|
56
57
|
|
57
|
-
k = rb_funcall(k, id_gsub, 2,
|
58
|
+
k = rb_funcall(k, id_gsub, 2, rb_const_get(rb_mAttributeBuilder, id_underscore), rb_const_get(rb_mAttributeBuilder, id_hyphen));
|
58
59
|
rb_str_cat(k, "-", 1);
|
59
60
|
rb_str_append(k, key);
|
60
61
|
rb_hash_aset(arg->normalized, k, value);
|
@@ -73,7 +74,7 @@ normalize_data_i(VALUE key, VALUE value, VALUE normalized)
|
|
73
74
|
rb_hash_foreach(normalize_data(value), normalize_data_i2, (VALUE)(&arg));
|
74
75
|
} else {
|
75
76
|
key = rb_funcall(key, id_to_s, 0);
|
76
|
-
key = rb_funcall(key, id_gsub, 2,
|
77
|
+
key = rb_funcall(key, id_gsub, 2, rb_const_get(rb_mAttributeBuilder, id_underscore), rb_const_get(rb_mAttributeBuilder, id_hyphen));
|
77
78
|
rb_hash_aset(normalized, key, value);
|
78
79
|
}
|
79
80
|
return ST_CONTINUE;
|
@@ -132,36 +133,32 @@ merge(VALUE attributes, int argc, VALUE *argv)
|
|
132
133
|
|
133
134
|
Check_Type(argv[i], T_HASH);
|
134
135
|
h = stringify_keys(argv[i]);
|
135
|
-
concat_array_attribute(attributes, h,
|
136
|
-
concat_array_attribute(attributes, h,
|
136
|
+
concat_array_attribute(attributes, h, rb_const_get(rb_mAttributeBuilder, id_class));
|
137
|
+
concat_array_attribute(attributes, h, rb_const_get(rb_mAttributeBuilder, id_id));
|
137
138
|
normalize(h);
|
138
139
|
rb_funcall(attributes, id_merge_bang, 1, h);
|
139
140
|
}
|
140
141
|
}
|
141
142
|
|
142
|
-
static
|
143
|
-
put_attribute(VALUE attr_quote, VALUE key, VALUE value)
|
143
|
+
static void
|
144
|
+
put_attribute(VALUE buf, VALUE attr_quote, VALUE key, VALUE value)
|
144
145
|
{
|
145
|
-
VALUE utils_class
|
146
|
-
long len;
|
146
|
+
VALUE utils_class;
|
147
147
|
|
148
148
|
value = rb_funcall(value, id_to_s, 0);
|
149
149
|
utils_class = rb_const_get(rb_const_get(rb_cObject, id_temple), id_utils);
|
150
150
|
value = rb_funcall(utils_class, id_escape_html, 1, value);
|
151
151
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
rb_str_buf_append(str, value);
|
159
|
-
rb_str_buf_append(str, attr_quote);
|
160
|
-
return str;
|
152
|
+
rb_ary_push(buf, rb_const_get(rb_mAttributeBuilder, id_space));
|
153
|
+
rb_ary_push(buf, key);
|
154
|
+
rb_ary_push(buf, rb_const_get(rb_mAttributeBuilder, id_equal));
|
155
|
+
rb_ary_push(buf, attr_quote);
|
156
|
+
rb_ary_push(buf, value);
|
157
|
+
rb_ary_push(buf, attr_quote);
|
161
158
|
}
|
162
159
|
|
163
|
-
static
|
164
|
-
build_attribute(VALUE attr_quote, int is_html, VALUE key, VALUE value)
|
160
|
+
static void
|
161
|
+
build_attribute(VALUE buf, VALUE attr_quote, int is_html, VALUE key, VALUE value)
|
165
162
|
{
|
166
163
|
const char *key_cstr = StringValueCStr(key);
|
167
164
|
if (strcmp(key_cstr, "class") == 0) {
|
@@ -169,9 +166,7 @@ build_attribute(VALUE attr_quote, int is_html, VALUE key, VALUE value)
|
|
169
166
|
|
170
167
|
Check_Type(value, T_ARRAY);
|
171
168
|
len = RARRAY_LEN(value);
|
172
|
-
if (len
|
173
|
-
return rb_str_new_cstr("");
|
174
|
-
} else {
|
169
|
+
if (len != 0) {
|
175
170
|
long i;
|
176
171
|
VALUE ary = rb_ary_new_capa(len);
|
177
172
|
for (i = 0; i < len; i++) {
|
@@ -180,39 +175,34 @@ build_attribute(VALUE attr_quote, int is_html, VALUE key, VALUE value)
|
|
180
175
|
}
|
181
176
|
rb_funcall(ary, id_sort_bang, 0);
|
182
177
|
rb_funcall(ary, id_uniq_bang, 0);
|
183
|
-
|
178
|
+
put_attribute(buf, attr_quote, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_space)));
|
184
179
|
}
|
185
180
|
} else if (strcmp(key_cstr, "id") == 0) {
|
186
181
|
long len = RARRAY_LEN(value);
|
187
182
|
|
188
183
|
Check_Type(value, T_ARRAY);
|
189
184
|
len = RARRAY_LEN(value);
|
190
|
-
if (len
|
191
|
-
return rb_str_new_cstr("");
|
192
|
-
} else {
|
185
|
+
if (len != 0) {
|
193
186
|
long i;
|
194
187
|
VALUE ary = rb_ary_new_capa(len);
|
195
188
|
for (i = 0; i < len; i++) {
|
196
189
|
VALUE v = RARRAY_AREF(value, i);
|
197
190
|
rb_ary_push(ary, rb_funcall(v, id_to_s, 0));
|
198
191
|
}
|
199
|
-
|
192
|
+
put_attribute(buf, attr_quote, key, rb_ary_join(ary, rb_const_get(rb_mAttributeBuilder, id_underscore)));
|
200
193
|
}
|
201
194
|
} else if (RB_TYPE_P(value, T_TRUE)) {
|
202
195
|
if (is_html) {
|
203
|
-
|
204
|
-
|
205
|
-
rb_str_buf_append(attr, key);
|
206
|
-
return attr;
|
196
|
+
rb_ary_push(buf, rb_const_get(rb_mAttributeBuilder, id_space));
|
197
|
+
rb_ary_push(buf, key);
|
207
198
|
} else {
|
208
|
-
|
199
|
+
put_attribute(buf, attr_quote, key, key);
|
209
200
|
}
|
210
201
|
} else if (RB_TYPE_P(value, T_FALSE) || NIL_P(value)) {
|
211
|
-
|
202
|
+
/* do nothing */
|
212
203
|
} else {
|
213
|
-
|
204
|
+
put_attribute(buf, attr_quote, key, value);
|
214
205
|
}
|
215
|
-
return value;
|
216
206
|
}
|
217
207
|
|
218
208
|
static VALUE
|
@@ -226,17 +216,17 @@ m_build(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
|
|
226
216
|
attr_quote = argv[0];
|
227
217
|
is_html = RTEST(argv[1]);
|
228
218
|
attributes = rb_hash_new();
|
229
|
-
rb_hash_aset(attributes,
|
230
|
-
rb_hash_aset(attributes,
|
219
|
+
rb_hash_aset(attributes, rb_const_get(rb_mAttributeBuilder, id_id), rb_ary_new());
|
220
|
+
rb_hash_aset(attributes, rb_const_get(rb_mAttributeBuilder, id_class), rb_ary_new());
|
231
221
|
merge(attributes, argc-2, argv+2);
|
232
222
|
|
233
223
|
keys = rb_funcall(attributes, id_keys, 0);
|
234
224
|
rb_funcall(keys, id_sort_bang, 0);
|
235
225
|
len = RARRAY_LEN(keys);
|
236
|
-
buf =
|
226
|
+
buf = rb_ary_new();
|
237
227
|
for (i = 0; i < len; i++) {
|
238
228
|
VALUE k = RARRAY_AREF(keys, i);
|
239
|
-
|
229
|
+
build_attribute(buf, attr_quote, is_html, k, rb_hash_lookup(attributes, k));
|
240
230
|
}
|
241
231
|
|
242
232
|
return rb_ary_join(buf, Qnil);
|
@@ -265,5 +255,20 @@ Init_attribute_builder(void)
|
|
265
255
|
id_escape_html = rb_intern("escape_html");
|
266
256
|
id_gsub = rb_intern("gsub");
|
267
257
|
id_to_s = rb_intern("to_s");
|
258
|
+
|
259
|
+
id_id = rb_intern("ID");
|
260
|
+
id_class = rb_intern("CLASS");
|
261
|
+
id_underscore = rb_intern("UNDERSCORE");
|
262
|
+
id_hyphen = rb_intern("HYPHEN");
|
263
|
+
id_space = rb_intern("SPACE");
|
264
|
+
id_equal = rb_intern("=");
|
265
|
+
|
266
|
+
rb_const_set(rb_mAttributeBuilder, id_id, rb_obj_freeze(rb_str_new_cstr("id")));
|
267
|
+
rb_const_set(rb_mAttributeBuilder, id_class, rb_obj_freeze(rb_str_new_cstr("class")));
|
268
|
+
rb_const_set(rb_mAttributeBuilder, id_underscore, rb_obj_freeze(rb_str_new_cstr("_")));
|
269
|
+
rb_const_set(rb_mAttributeBuilder, id_hyphen, rb_obj_freeze(rb_str_new_cstr("-")));
|
270
|
+
rb_const_set(rb_mAttributeBuilder, id_space, rb_obj_freeze(rb_str_new_cstr(" ")));
|
271
|
+
rb_const_set(rb_mAttributeBuilder, id_equal, rb_obj_freeze(rb_str_new_cstr("=")));
|
272
|
+
|
268
273
|
rb_require("temple");
|
269
274
|
}
|
data/lib/faml/compiler.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'ripper'
|
2
2
|
require 'temple'
|
3
3
|
require 'haml_parser/ast'
|
4
4
|
require 'faml/error'
|
5
5
|
require 'faml/filter_compilers'
|
6
6
|
require 'faml/helpers'
|
7
7
|
require 'faml/rails_helpers'
|
8
|
+
require 'faml/ruby_syntax_checker'
|
8
9
|
require 'faml/static_hash_parser'
|
9
10
|
require 'faml/text_compiler'
|
10
11
|
|
@@ -295,13 +296,9 @@ module Faml
|
|
295
296
|
end
|
296
297
|
|
297
298
|
def assert_valid_ruby_code!(text)
|
298
|
-
|
299
|
-
parser.diagnostics.consumer = nil
|
300
|
-
buffer = ::Parser::Source::Buffer.new('(faml)')
|
301
|
-
buffer.source = "call(#{text})"
|
302
|
-
parser.parse(buffer)
|
299
|
+
RubySyntaxChecker.new("call(#{text})", '(faml)').parse
|
303
300
|
true
|
304
|
-
rescue ::
|
301
|
+
rescue RubySyntaxChecker::Error
|
305
302
|
raise UnparsableRubyCode.new("Unparsable Ruby code is given to attributes: #{text}", nil)
|
306
303
|
end
|
307
304
|
|
data/lib/faml/version.rb
CHANGED
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
|
+
version: 0.3.1
|
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-09-
|
11
|
+
date: 2015-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: escape_utils
|
@@ -357,6 +357,7 @@ files:
|
|
357
357
|
- lib/faml/rails_handler.rb
|
358
358
|
- lib/faml/rails_helpers.rb
|
359
359
|
- lib/faml/railtie.rb
|
360
|
+
- lib/faml/ruby_syntax_checker.rb
|
360
361
|
- lib/faml/static_hash_parser.rb
|
361
362
|
- lib/faml/text_compiler.rb
|
362
363
|
- lib/faml/tilt.rb
|