bade 0.2.1 → 0.2.2
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/lib/bade.rb +1 -0
- data/lib/bade/generator.rb +13 -4
- data/lib/bade/optimizer.rb +57 -0
- data/lib/bade/precompiled.rb +2 -0
- data/lib/bade/renderer.rb +15 -1
- data/lib/bade/runtime/render_binding.rb +2 -0
- data/lib/bade/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: f928ce45234b7edbf5fa3c8e3531688c8bf4bc11
|
4
|
+
data.tar.gz: 532eac47aa229d5a4b9a2d16740eef9f0e5e38d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a879c59dc4422f94d3190028a0636a0dd643b5af8f5172f0f0bfd119533015f706b55dafcb37bad13a6eb440c92ff7fda243641013d13b9ce6bb9ffc181d28f
|
7
|
+
data.tar.gz: 6949c8a7edfe07c552a4bc169d6b4dcfc439b8502fcf84dc839eb2248fc95916c9cfee8f897fc690f8c2e3931114f0efc4d6c01fa9979008927f8c6f9aa21239
|
data/lib/bade.rb
CHANGED
data/lib/bade/generator.rb
CHANGED
@@ -18,20 +18,21 @@ module Bade
|
|
18
18
|
#
|
19
19
|
# @return [String]
|
20
20
|
#
|
21
|
-
def self.document_to_lambda_string(document)
|
21
|
+
def self.document_to_lambda_string(document, optimize: false)
|
22
22
|
generator = new
|
23
|
-
generator.generate_lambda_string(document)
|
23
|
+
generator.generate_lambda_string(document, optimize: optimize)
|
24
24
|
end
|
25
25
|
|
26
26
|
# @param [Bade::AST::Document] document
|
27
27
|
#
|
28
28
|
# @return [String] string to parse with Ruby
|
29
29
|
#
|
30
|
-
def generate_lambda_string(document)
|
30
|
+
def generate_lambda_string(document, optimize: false)
|
31
31
|
@document = document
|
32
32
|
@buff = []
|
33
33
|
@indent = 0
|
34
34
|
@code_indent = 0
|
35
|
+
@optimize = optimize
|
35
36
|
|
36
37
|
buff_code '# frozen_string_literal: true' # so it can be faster on Ruby 2.3+
|
37
38
|
buff_code ''
|
@@ -86,7 +87,15 @@ module Bade
|
|
86
87
|
end
|
87
88
|
|
88
89
|
buff_code("# ----- start file #{document.file_path}") unless document.file_path.nil?
|
89
|
-
|
90
|
+
|
91
|
+
new_root = if @optimize
|
92
|
+
Optimizer.new(document.root).optimize
|
93
|
+
else
|
94
|
+
document.root
|
95
|
+
end
|
96
|
+
|
97
|
+
visit_node(new_root)
|
98
|
+
|
90
99
|
buff_code("# ----- end file #{document.file_path}") unless document.file_path.nil?
|
91
100
|
end
|
92
101
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
|
4
|
+
module Bade
|
5
|
+
class Optimizer
|
6
|
+
# @param [Bade::AST::Node] root_node
|
7
|
+
#
|
8
|
+
def initialize(root_node)
|
9
|
+
@root_node = root_node
|
10
|
+
|
11
|
+
@new_root = Marshal.load(Marshal.dump(root_node))
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Bade::Node]
|
15
|
+
#
|
16
|
+
def optimize
|
17
|
+
optimize_static_texts
|
18
|
+
|
19
|
+
@root_node
|
20
|
+
end
|
21
|
+
|
22
|
+
def optimize_static_texts
|
23
|
+
traverse(@root_node) do |tr_node|
|
24
|
+
iterate(tr_node) do |node, previous_node, _parent|
|
25
|
+
if previous_node && previous_node.type == :static_text && node.type == :static_text
|
26
|
+
previous_node.value += node.value
|
27
|
+
true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# @param [Bade::AST::Node] node
|
34
|
+
#
|
35
|
+
def traverse(node, &block)
|
36
|
+
yield node
|
37
|
+
|
38
|
+
node.children.each do |subnode|
|
39
|
+
traverse(subnode, &block)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param [Bade::AST::Node] node
|
44
|
+
#
|
45
|
+
def iterate(node)
|
46
|
+
previous = nil
|
47
|
+
|
48
|
+
node.children.delete_if do |subnode|
|
49
|
+
returned = yield subnode, previous, node
|
50
|
+
|
51
|
+
previous = subnode unless returned
|
52
|
+
|
53
|
+
returned
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/bade/precompiled.rb
CHANGED
data/lib/bade/renderer.rb
CHANGED
@@ -29,6 +29,10 @@ module Bade
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
def initialize
|
33
|
+
@optimize = false
|
34
|
+
end
|
35
|
+
|
32
36
|
TEMPLATE_FILE_NAME = '(__template__)'.freeze
|
33
37
|
|
34
38
|
# @return [String]
|
@@ -51,6 +55,10 @@ module Bade
|
|
51
55
|
#
|
52
56
|
attr_accessor :render_binding
|
53
57
|
|
58
|
+
# @return [Bool]
|
59
|
+
#
|
60
|
+
attr_accessor :optimize
|
61
|
+
|
54
62
|
|
55
63
|
# ----------------------------------------------------------------------------- #
|
56
64
|
# Internal attributes
|
@@ -122,6 +130,11 @@ module Bade
|
|
122
130
|
self
|
123
131
|
end
|
124
132
|
|
133
|
+
def optimized
|
134
|
+
self.optimize = true
|
135
|
+
self
|
136
|
+
end
|
137
|
+
|
125
138
|
|
126
139
|
# ----------------------------------------------------------------------------- #
|
127
140
|
# Getters
|
@@ -139,7 +152,8 @@ module Bade
|
|
139
152
|
# @return [Precompiled]
|
140
153
|
#
|
141
154
|
def precompiled
|
142
|
-
@precompiled ||=
|
155
|
+
@precompiled ||=
|
156
|
+
Precompiled.new(Generator.document_to_lambda_string(root_document, optimize: @optimize), file_path)
|
143
157
|
end
|
144
158
|
|
145
159
|
# @return [String]
|
data/lib/bade/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Kříž
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- lib/bade/ast/node_registrator.rb
|
89
89
|
- lib/bade/ast/string_serializer.rb
|
90
90
|
- lib/bade/generator.rb
|
91
|
+
- lib/bade/optimizer.rb
|
91
92
|
- lib/bade/parser.rb
|
92
93
|
- lib/bade/parser/parser_constants.rb
|
93
94
|
- lib/bade/parser/parser_lines.rb
|