faml 0.2.5 → 0.2.6
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 +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
|