bade 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b9d41889101a2207790a83bb4ae4900892e766b
4
- data.tar.gz: 5d3019af48cbd0119a6b8c4d44f2d74b76e86c84
3
+ metadata.gz: f928ce45234b7edbf5fa3c8e3531688c8bf4bc11
4
+ data.tar.gz: 532eac47aa229d5a4b9a2d16740eef9f0e5e38d7
5
5
  SHA512:
6
- metadata.gz: cd6c63f0df98925562ebb9d9624c7e13542a5a6f1d76c8ef236b74cccfe1376065ec8e53e2c802f44177c9b67c88fa7218baef70f33dfac3e59505f0370dfbf2
7
- data.tar.gz: 72225de15eeb899be67127bd9331b690529843e03be7c7fcf4402554551332a525b07bd9313c28e9ce578ac4eb31640a318ca87388d7a62163dd89c5391607a2
6
+ metadata.gz: 6a879c59dc4422f94d3190028a0636a0dd643b5af8f5172f0f0bfd119533015f706b55dafcb37bad13a6eb440c92ff7fda243641013d13b9ce6bb9ffc181d28f
7
+ data.tar.gz: 6949c8a7edfe07c552a4bc169d6b4dcfc439b8502fcf84dc839eb2248fc95916c9cfee8f897fc690f8c2e3931114f0efc4d6c01fa9979008927f8c6f9aa21239
@@ -6,4 +6,5 @@ module Bade
6
6
  require_relative 'bade/parser'
7
7
  require_relative 'bade/generator'
8
8
  require_relative 'bade/renderer'
9
+ require_relative 'bade/optimizer'
9
10
  end
@@ -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
- visit_node(document.root)
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
@@ -27,6 +27,8 @@ module Bade
27
27
  end
28
28
 
29
29
  hash = YAML.load(file)
30
+ raise LoadError, 'YAML file is not in valid format' unless hash.is_a?(Hash)
31
+
30
32
  file_path = hash[:source_file_path]
31
33
  content = hash[:code_string]
32
34
 
@@ -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 ||= Precompiled.new(Generator.document_to_lambda_string(root_document), file_path)
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]
@@ -80,6 +80,8 @@ module Bade
80
80
  # @return [String]
81
81
  #
82
82
  def __html_escaped(text)
83
+ return nil if text.nil?
84
+
83
85
  text.gsub('&', '&')
84
86
  .gsub('<', '&lt;')
85
87
  .gsub('>', '&gt;')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bade
4
- VERSION = '0.2.1'.freeze
4
+ VERSION = '0.2.2'.freeze
5
5
  end
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.1
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-03-28 00:00:00.000000000 Z
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