faml 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|