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 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