bade 0.3.1 → 0.3.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
  SHA256:
3
- metadata.gz: 9363fa63bbc18e9d9cb2af336438820127d766ef7e5b18306ddc37cdd608adfd
4
- data.tar.gz: 6a6c86dea0211e852507fa26e7ec2d6d35b5b03469f5c6919455749134f102bd
3
+ metadata.gz: 5a90545fdee8d531bb87e12dd7943c0486daf3eac68f1d0c69ba216c7595f452
4
+ data.tar.gz: cdbf2cbc427cb9dd590768d493f99c91f22ac51a0a3caa172abb0b6c96b81b57
5
5
  SHA512:
6
- metadata.gz: 37b06b4ef4aa918a88e96c5bfd164ef5d41b9bc0e22949d857b3af143e6dcb462d41f8c10e880f29f4a201e0ca115309e4734e46268f0b1c6fc9f0c7c50802d2
7
- data.tar.gz: a828c7d9c09450235b719c37381add83dcd0980d256f97b755dd6b5ceb287a1f6baca4f43a04c00523cf45a1d692aac6d7b7abd79f8b5694fe713f3686ceefa0
6
+ metadata.gz: 88708cad2d3145bfe33fb2ca65acbd795b3f8b3074da64f53e8d053d09925a3f750627893c303c2000fe4e9e8328abf4b9fe60a8e1c925a4ccb8966f37887fff
7
+ data.tar.gz: 8b21e240977c4f4c0c0387c244dcfb215141e453e04fde9f47762cb59ec22f43ee8056a17c39f41037d52b2a3d2bde8f66ad2b7623d8f8819f9444eebb075741
data/Bade.gemspec CHANGED
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  # frozen_string_literal: true
2
3
 
3
4
  lib = File.expand_path('lib', __dir__)
@@ -41,6 +41,7 @@ module Bade
41
41
  code_indent do
42
42
  buff_code "self.#{NEW_LINE_NAME} = #{NEW_LINE_NAME}"
43
43
  buff_code "self.#{BASE_INDENT_NAME} = #{BASE_INDENT_NAME}"
44
+ buff_code "__buffs_push(#{location(filename: document.file_path, lineno: 0, label: '<top>')})"
44
45
 
45
46
  visit_document(document)
46
47
 
@@ -86,7 +87,6 @@ module Bade
86
87
  end
87
88
 
88
89
  buff_code("# ----- start file #{document.file_path}") unless document.file_path.nil?
89
- buff_code "__buffs_push(#{location(filename: document.file_path, lineno: 0, label: '<top>')})"
90
90
 
91
91
  new_root = if @optimize
92
92
  Optimizer.new(document.root).optimize
@@ -381,12 +381,13 @@ module Bade
381
381
  when :code
382
382
  value = node.value.strip
383
383
 
384
- %w[end else }].include?(value) || value.match(/^when /)
384
+ %w[end else }].include?(value) || value.match(/^(when|elsif) /)
385
385
  when :newline
386
386
  true
387
387
  else
388
388
  false
389
389
  end
390
+
390
391
  return if should_skip
391
392
  return if node.lineno.nil?
392
393
 
data/lib/bade/parser.rb CHANGED
@@ -29,7 +29,7 @@ module Bade
29
29
  def to_s
30
30
  line = @line.lstrip
31
31
  column = @column + line.size - @line.size
32
- <<-MSG.strip_heredoc
32
+ <<~MSG
33
33
  #{error}
34
34
  #{file}, Line #{lineno}, Column #{@column}
35
35
  #{line}
@@ -95,13 +95,4 @@ class String
95
95
 
96
96
  count
97
97
  end
98
-
99
- # source: http://apidock.com/rails/String/strip_heredoc
100
- # @return [String]
101
- #
102
- def strip_heredoc
103
- min_val = scan(/^[ \t]*(?=\S)/).min
104
- indent = min_val&.size || 0
105
- gsub(/^[ \t]{#{indent}}/, '')
106
- end
107
98
  end
@@ -49,6 +49,9 @@ module Bade
49
49
 
50
50
  raise Block::MissingBlockDefinitionError.new(e.name, e.context, msg, render_binding.__location_stack)
51
51
 
52
+ rescue RuntimeError
53
+ raise
54
+
52
55
  rescue Exception => e
53
56
  msg = "Exception raised during execution of mixin `#{name}`: #{e}"
54
57
  raise Bade::Runtime::RuntimeError.wrap_existing_error(msg, e, render_binding.__location_stack)
data/lib/bade/runtime.rb CHANGED
@@ -3,6 +3,10 @@
3
3
  module Bade
4
4
  module Runtime
5
5
  Location = Struct.new(:path, :lineno, :label, keyword_init: true) do
6
+ def template?
7
+ path == TEMPLATE_FILE_NAME || path&.include?('.bade')
8
+ end
9
+
6
10
  def to_s
7
11
  "#{path || TEMPLATE_FILE_NAME}:#{lineno}:in `#{label}'"
8
12
  end
@@ -13,23 +17,41 @@ module Bade
13
17
  #
14
18
  attr_reader :template_backtrace
15
19
 
20
+ # @return [Boolean]
21
+ #
22
+ attr_reader :print_locations_warning
23
+
16
24
  # @param [String] msg
17
25
  # @param [Array<Location>] template_backtrace
18
26
  # @param [Exception, nil] original
19
- def initialize(msg, template_backtrace = [], original: nil)
27
+ def initialize(msg, template_backtrace = [], original: nil, print_locations_warning: false)
20
28
  super(msg)
21
29
  @template_backtrace = template_backtrace
22
30
  @original = original
31
+ @print_locations_warning = print_locations_warning
23
32
  end
24
33
 
25
34
  def message
26
35
  if @template_backtrace.empty?
27
36
  super
28
37
  else
38
+ warning = if print_locations_warning
39
+ <<~TEXT
40
+
41
+ !!! WARNING !!!, filenames and line numbers of functions can be misleading due to using Ruby
42
+ functions in different Bade file. Trust only functions names. Mixins are fine.
43
+
44
+ This will be fixed in https://github.com/epuber-io/bade/issues/32
45
+ TEXT
46
+ else
47
+ ''
48
+ end
49
+
29
50
  <<~MSG.rstrip
30
51
  #{super}
31
52
  template backtrace:
32
53
  #{__formatted_backtrace.join("\n")}
54
+ #{warning}
33
55
  MSG
34
56
  end
35
57
  end
@@ -53,14 +75,20 @@ module Bade
53
75
  def self.process_locations(locations)
54
76
  return [] if locations.nil?
55
77
 
56
- index = locations&.find_index { |loc| loc.path == TEMPLATE_FILE_NAME || loc.path&.include?('.bade') }
78
+ # map to Bade's Location
79
+ new_locations = locations.map { |loc| Location.new(path: loc.path, lineno: loc.lineno, label: loc.label) }
80
+
81
+ # find location to use or drop
82
+ index = new_locations.rindex(&:template?)
57
83
  return [] if index.nil?
58
84
 
59
- new_locations = locations[0...index] || []
85
+ # get only locations inside template
86
+ new_locations = new_locations[0...index] || []
60
87
 
61
- new_locations.map do |loc|
62
- Location.new(path: loc.path, lineno: loc.lineno, label: loc.label)
63
- end
88
+ # filter out not interested locations
89
+ new_locations
90
+ .reject { |loc| loc.path.start_with?(__dir__) }
91
+ .reject { |loc| loc.template? && loc.label.include?('lambda_instance') }
64
92
  end
65
93
 
66
94
  # @param [String] msg
@@ -68,8 +96,9 @@ module Bade
68
96
  # @param [Array<Location>] template_backtrace
69
97
  # @return [RuntimeError]
70
98
  def self.wrap_existing_error(msg, error, template_backtrace)
71
- locs = Bade::Runtime::RuntimeError.process_locations(error.backtrace_locations) + template_backtrace
72
- Bade::Runtime::RuntimeError.new(msg, locs, original: error)
99
+ ruby_locs = Bade::Runtime::RuntimeError.process_locations(error.backtrace_locations)
100
+ locs = ruby_locs + template_backtrace
101
+ Bade::Runtime::RuntimeError.new(msg, locs, original: error, print_locations_warning: !ruby_locs.empty?)
73
102
  end
74
103
  end
75
104
 
data/lib/bade/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bade
4
- VERSION = '0.3.1'.freeze
4
+ VERSION = '0.3.2'.freeze
5
5
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Kříž
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2022-03-22 00:00:00.000000000 Z
@@ -72,7 +72,7 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '1.14'
75
- description:
75
+ description:
76
76
  email:
77
77
  - samnung@gmail.com
78
78
  executables: []
@@ -119,7 +119,7 @@ licenses:
119
119
  - MIT
120
120
  metadata:
121
121
  rubygems_mfa_required: 'true'
122
- post_install_message:
122
+ post_install_message:
123
123
  rdoc_options: []
124
124
  require_paths:
125
125
  - lib
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  version: '0'
136
136
  requirements: []
137
137
  rubygems_version: 3.3.9
138
- signing_key:
138
+ signing_key:
139
139
  specification_version: 4
140
140
  summary: Minimalistic template engine for Ruby.
141
141
  test_files: []