faml 0.2.5 → 0.2.6
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/Rakefile +7 -2
- data/benchmark/attribute_builder.slim +5 -0
- data/benchmark/context.rb +11 -0
- data/benchmark/rendering.rb +22 -18
- data/benchmark/slim.rb +25 -0
- data/benchmark/view.haml +18 -0
- data/benchmark/view.slim +17 -0
- data/faml.gemspec +3 -2
- data/lib/faml/engine.rb +1 -0
- data/lib/faml/error.rb +9 -0
- data/lib/faml/indent_tracker.rb +3 -7
- data/lib/faml/parser.rb +7 -0
- data/lib/faml/rails_handler.rb +1 -0
- data/lib/faml/syntax_error.rb +3 -7
- data/lib/faml/tilt.rb +1 -1
- data/lib/faml/version.rb +1 -1
- data/spec/rails/app/views/books/indent_error.html.haml +3 -0
- data/spec/rails/app/views/books/syntax_error.html.haml +2 -0
- data/spec/rails/config/routes.rb +2 -0
- data/spec/rails/spec/requests/faml_spec.rb +18 -0
- metadata +29 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e56f6b1d1e1616fb0c3fad21f37e222335c035a5
|
4
|
+
data.tar.gz: 75024b5bd093c4fcc27505e42d9fd17e3ff4cca5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5c2e4fd53a113be080c4a36e93dfc9c9472fd2bd2d2beecb5f60b7c0a8e47534380a9c3116239dcf2206710951d247b4a673f30441abd7eb07cc6d0b977f6a4
|
7
|
+
data.tar.gz: 3bb17b5f494fed5b47bbbe7507156b90cf7cc8f2378e52398527e97228e854249b50d4c976335055e8fad919ee90ad490e22004e52b30c867404900ea552bc3b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.2.6 (2015-03-31)
|
2
|
+
- Fix dependency on temple
|
3
|
+
- Improve backtrace when syntax error is raised
|
4
|
+
- https://github.com/eagletmt/faml/issues/13
|
5
|
+
|
1
6
|
## 0.2.5 (2015-03-30)
|
2
7
|
- Fix parser when parsing attributes in `{'foo': 'bar'}` form
|
3
8
|
- The syntax was introduced in Ruby 2.2.
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ require 'rspec/core/rake_task'
|
|
11
11
|
RSpec::Core::RakeTask.new(:spec)
|
12
12
|
|
13
13
|
namespace :benchmark do
|
14
|
-
task :rendering => ['benchmark:rendering:haml', 'benchmark:rendering:attributes']
|
14
|
+
task :rendering => ['benchmark:rendering:haml', 'benchmark:rendering:attributes', 'benchmark:rendering:slim']
|
15
15
|
namespace :rendering do
|
16
16
|
desc "Run benchmark with Haml's standard template"
|
17
17
|
task :haml do
|
@@ -22,7 +22,12 @@ namespace :benchmark do
|
|
22
22
|
|
23
23
|
desc "Run benchmark for attribute builder"
|
24
24
|
task :attributes do
|
25
|
-
sh 'ruby', 'benchmark/rendering.rb',
|
25
|
+
sh 'ruby', 'benchmark/rendering.rb', 'benchmark/attribute_builder.haml', 'benchmark/attribute_builder.slim'
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Run slim's benchmark"
|
29
|
+
task :slim do
|
30
|
+
sh 'ruby', 'benchmark/slim.rb'
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
data/benchmark/rendering.rb
CHANGED
@@ -2,34 +2,38 @@
|
|
2
2
|
require 'benchmark/ips'
|
3
3
|
require 'haml'
|
4
4
|
require 'faml'
|
5
|
+
require 'slim'
|
5
6
|
require 'escape_utils/html/haml'
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
$stderr.puts "Usage: #{$0} template.haml"
|
8
|
+
unless ARGV[0]
|
9
|
+
$stderr.puts "Usage: #{$0} template.haml [template.slim]"
|
10
10
|
exit 1
|
11
11
|
end
|
12
12
|
|
13
|
+
haml_code = File.read(ARGV[0])
|
14
|
+
slim_code = ARGV[1] ? File.read(ARGV[1]) : nil
|
15
|
+
|
13
16
|
Benchmark.ips do |x|
|
14
17
|
obj = Object.new
|
15
18
|
|
16
|
-
Haml::Engine.new(
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
Haml::Engine.new(haml_code, ugly: true, escape_html: true).def_method(obj, :haml)
|
20
|
+
obj.instance_eval %{
|
21
|
+
def faml_array; #{Faml::Engine.new.call(haml_code)}; end
|
22
|
+
def faml_string; #{Faml::Engine.new(generator: Temple::Generators::RailsOutputBuffer).call(haml_code)}; end
|
23
|
+
}
|
24
|
+
if slim_code
|
25
|
+
obj.instance_eval %{
|
26
|
+
def slim_array; #{Slim::Engine.new.call(slim_code)}; end
|
27
|
+
def slim_string; #{Slim::Engine.new(generator: Temple::Generators::RailsOutputBuffer).call(slim_code)}; end
|
28
|
+
}
|
24
29
|
end
|
25
30
|
|
26
|
-
x.report('
|
27
|
-
|
31
|
+
x.report('Haml') { obj.haml }
|
32
|
+
x.report('Faml (Array)') { obj.faml_array }
|
33
|
+
x.report('Faml (String)') { obj.faml_string }
|
34
|
+
if slim_code
|
35
|
+
x.report('Slim (Array)') { obj.slim_array }
|
36
|
+
x.report('Slim (String)') { obj.slim_string }
|
28
37
|
end
|
29
|
-
|
30
|
-
x.report('Faml (String)') do
|
31
|
-
obj.faml_string
|
32
|
-
end
|
33
|
-
|
34
38
|
x.compare!
|
35
39
|
end
|
data/benchmark/slim.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'benchmark/ips'
|
3
|
+
require 'haml'
|
4
|
+
require 'faml'
|
5
|
+
require 'slim'
|
6
|
+
require 'escape_utils/html/haml'
|
7
|
+
|
8
|
+
require_relative 'context'
|
9
|
+
|
10
|
+
haml_code = File.read(File.join(__dir__, 'view.haml'))
|
11
|
+
slim_code = File.read(File.join(__dir__, 'view.slim'))
|
12
|
+
|
13
|
+
context = Context.new
|
14
|
+
Haml::Engine.new(haml_code, ugly: true, escape_html: true).def_method(context, :haml)
|
15
|
+
context.instance_eval %{
|
16
|
+
def faml; #{Faml::Engine.new(generator: Temple::Generators::RailsOutputBuffer).call(haml_code)}; end
|
17
|
+
def slim; #{Slim::Engine.new(generator: Temple::Generators::RailsOutputBuffer).call(slim_code)}; end
|
18
|
+
}
|
19
|
+
|
20
|
+
Benchmark.ips do |x|
|
21
|
+
x.report('Haml') { context.haml }
|
22
|
+
x.report('Faml') { context.faml }
|
23
|
+
x.report('Slim') { context.slim }
|
24
|
+
x.compare!
|
25
|
+
end
|
data/benchmark/view.haml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
!!! html
|
2
|
+
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%title Simple Benchmark
|
6
|
+
%body
|
7
|
+
%h1= header
|
8
|
+
- unless item.empty?
|
9
|
+
%ul
|
10
|
+
- for i in item
|
11
|
+
- if i[:current]
|
12
|
+
%li
|
13
|
+
%strong= i[:name]
|
14
|
+
- else
|
15
|
+
%li
|
16
|
+
%a{:href => i[:url]}= i[:name]
|
17
|
+
- else
|
18
|
+
%p The list is empty.
|
data/benchmark/view.slim
ADDED
data/faml.gemspec
CHANGED
@@ -21,18 +21,19 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency "escape_utils"
|
23
23
|
spec.add_dependency "parser"
|
24
|
-
spec.add_dependency "temple"
|
24
|
+
spec.add_dependency "temple", ">= 0.7.0"
|
25
25
|
spec.add_dependency "tilt"
|
26
26
|
spec.add_development_dependency "appraisal"
|
27
27
|
spec.add_development_dependency "benchmark-ips"
|
28
28
|
spec.add_development_dependency "bundler"
|
29
29
|
spec.add_development_dependency "coffee-script"
|
30
30
|
spec.add_development_dependency "coveralls"
|
31
|
-
spec.add_development_dependency "haml"
|
31
|
+
spec.add_development_dependency "haml" # for benchmark
|
32
32
|
spec.add_development_dependency "rake"
|
33
33
|
spec.add_development_dependency "rake-compiler"
|
34
34
|
spec.add_development_dependency "redcarpet"
|
35
35
|
spec.add_development_dependency "rspec", ">= 3"
|
36
36
|
spec.add_development_dependency "sass"
|
37
37
|
spec.add_development_dependency "simplecov"
|
38
|
+
spec.add_development_dependency "slim" # for benchmark
|
38
39
|
end
|
data/lib/faml/engine.rb
CHANGED
data/lib/faml/error.rb
ADDED
data/lib/faml/indent_tracker.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
|
+
require 'faml/error'
|
2
|
+
|
1
3
|
module Faml
|
2
4
|
class IndentTracker
|
3
|
-
class IndentMismatch <
|
4
|
-
attr_reader :lineno
|
5
|
-
|
6
|
-
def initialize(message, lineno)
|
7
|
-
super("#{message} at line #{lineno}")
|
8
|
-
@lineno = lineno
|
9
|
-
end
|
5
|
+
class IndentMismatch < Error
|
10
6
|
end
|
11
7
|
|
12
8
|
def initialize(on_enter: nil, on_leave: nil)
|
data/lib/faml/parser.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'faml/ast'
|
2
2
|
require 'faml/element_parser'
|
3
|
+
require 'faml/error'
|
3
4
|
require 'faml/filter_parser'
|
4
5
|
require 'faml/indent_tracker'
|
5
6
|
require 'faml/line_parser'
|
@@ -11,6 +12,7 @@ require 'faml/syntax_error'
|
|
11
12
|
module Faml
|
12
13
|
class Parser
|
13
14
|
def initialize(options = {})
|
15
|
+
@filename = options[:filename]
|
14
16
|
end
|
15
17
|
|
16
18
|
def call(template_str)
|
@@ -39,6 +41,11 @@ module Faml
|
|
39
41
|
end
|
40
42
|
@indent_tracker.finish
|
41
43
|
@ast
|
44
|
+
rescue Error => e
|
45
|
+
if @filename && e.lineno
|
46
|
+
e.backtrace.unshift "#{@filename}:#{e.lineno}"
|
47
|
+
end
|
48
|
+
raise e
|
42
49
|
end
|
43
50
|
|
44
51
|
private
|
data/lib/faml/rails_handler.rb
CHANGED
data/lib/faml/syntax_error.rb
CHANGED
data/lib/faml/tilt.rb
CHANGED
data/lib/faml/version.rb
CHANGED
data/spec/rails/config/routes.rb
CHANGED
@@ -52,4 +52,22 @@ RSpec.describe 'Faml with Rails', type: :request do
|
|
52
52
|
expect(response.body).to include('<b>preserve
me</b>')
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
describe 'compile time errors' do
|
57
|
+
describe Faml::SyntaxError do
|
58
|
+
it 'has proper backtrace' do
|
59
|
+
expect { get '/books/syntax_error' }.to raise_error { |e|
|
60
|
+
expect(e.backtrace[0]).to end_with('app/views/books/syntax_error.html.haml:2')
|
61
|
+
}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe Faml::IndentTracker::IndentMismatch do
|
66
|
+
it 'has proper backtrace' do
|
67
|
+
expect { get '/books/indent_error' }.to raise_error { |e|
|
68
|
+
expect(e.backtrace[0]).to end_with('app/views/books/indent_error.html.haml:3')
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
55
73
|
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.2.
|
4
|
+
version: 0.2.6
|
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-03-
|
11
|
+
date: 2015-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: escape_utils
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.7.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.7.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: tilt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,6 +234,20 @@ dependencies:
|
|
234
234
|
- - ">="
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: slim
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
237
251
|
description: Faster implementation of Haml template language.
|
238
252
|
email:
|
239
253
|
- eagletmt@gmail.com
|
@@ -254,7 +268,12 @@ files:
|
|
254
268
|
- README.md
|
255
269
|
- Rakefile
|
256
270
|
- benchmark/attribute_builder.haml
|
271
|
+
- benchmark/attribute_builder.slim
|
272
|
+
- benchmark/context.rb
|
257
273
|
- benchmark/rendering.rb
|
274
|
+
- benchmark/slim.rb
|
275
|
+
- benchmark/view.haml
|
276
|
+
- benchmark/view.slim
|
258
277
|
- bin/faml
|
259
278
|
- ext/attribute_builder/attribute_builder.c
|
260
279
|
- ext/attribute_builder/extconf.rb
|
@@ -270,6 +289,7 @@ files:
|
|
270
289
|
- lib/faml/compiler.rb
|
271
290
|
- lib/faml/element_parser.rb
|
272
291
|
- lib/faml/engine.rb
|
292
|
+
- lib/faml/error.rb
|
273
293
|
- lib/faml/filter_compilers.rb
|
274
294
|
- lib/faml/filter_compilers/base.rb
|
275
295
|
- lib/faml/filter_compilers/cdata.rb
|
@@ -317,7 +337,9 @@ files:
|
|
317
337
|
- spec/rails/app/models/concerns/.keep
|
318
338
|
- spec/rails/app/views/books/escaped.html.haml
|
319
339
|
- spec/rails/app/views/books/hello.html.haml
|
340
|
+
- spec/rails/app/views/books/indent_error.html.haml
|
320
341
|
- spec/rails/app/views/books/preserve.html.haml
|
342
|
+
- spec/rails/app/views/books/syntax_error.html.haml
|
321
343
|
- spec/rails/app/views/books/with_capture.html.haml
|
322
344
|
- spec/rails/app/views/books/with_variables.html.haml
|
323
345
|
- spec/rails/app/views/layouts/application.html.haml
|
@@ -406,7 +428,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
406
428
|
version: '0'
|
407
429
|
requirements: []
|
408
430
|
rubyforge_project:
|
409
|
-
rubygems_version: 2.
|
431
|
+
rubygems_version: 2.2.2
|
410
432
|
signing_key:
|
411
433
|
specification_version: 4
|
412
434
|
summary: Faster implementation of Haml template language.
|
@@ -426,7 +448,9 @@ test_files:
|
|
426
448
|
- spec/rails/app/models/concerns/.keep
|
427
449
|
- spec/rails/app/views/books/escaped.html.haml
|
428
450
|
- spec/rails/app/views/books/hello.html.haml
|
451
|
+
- spec/rails/app/views/books/indent_error.html.haml
|
429
452
|
- spec/rails/app/views/books/preserve.html.haml
|
453
|
+
- spec/rails/app/views/books/syntax_error.html.haml
|
430
454
|
- spec/rails/app/views/books/with_capture.html.haml
|
431
455
|
- spec/rails/app/views/books/with_variables.html.haml
|
432
456
|
- spec/rails/app/views/layouts/application.html.haml
|