dsl_evaluator 0.2.4 → 0.3.1

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
  SHA256:
3
- metadata.gz: d545085cadd9e96a305d3eab1b5bd023586dca9450b9f42e36f262afd64fdfac
4
- data.tar.gz: e0591f7b24d9daedbc3ecebad3af6ffedbdcfa5f14bf8c0f828ffc51495aef2d
3
+ metadata.gz: 641dfdf2c67b8959300970f5bc19894204a2d55a58d9652d7eccd6e18632c5e2
4
+ data.tar.gz: 1e47b3a332e0af2f7fdaaaccfa7b561b53843d7e576f1f24eb9f11a00ea48d90
5
5
  SHA512:
6
- metadata.gz: f9490aaa42fb6171259500137cddafb2f646292a3e3d1b0838af734a6b57a0099b65df75cacda37631248b49a8d12da4b29afa0493505a0c14494058c54ac3ce
7
- data.tar.gz: fdd9c4bdf362824a67bec2bb3e2b8b58d9e5838a02872020f9e20f93714f68e222e5d9bc7085217cec9464ecb04873382eb58963b3763a06cac72fd8b54c5249
6
+ metadata.gz: 7cb86de8092865008528a23d1e1762a8883a8c69af372c254c01fc6e5a46441ddeadb8ba4467fc7433fbce4f4ae613879b4a76412e6ca2b7f09bba60c47ac87b
7
+ data.tar.gz: 9319047be3502508e571151109d3c11760050dc03f5eb97775409ce6bdc9025bf764680daec19b6c6ee2bb047eb8a453446d5003b2705febf52d0ca3e8f4bd71
data/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [0.3.1] - 2022-07-11
7
+ - [#8](https://github.com/tongueroo/dsl_evaluator/pull/8) fix select pattern when not set
8
+
9
+ ## [0.3.0] - 2022-03-14
10
+ - [#7](https://github.com/tongueroo/dsl_evaluator/pull/7) Print code improvements
11
+
12
+ ## [0.2.5] - 2022-03-06
13
+ - [#6](https://github.com/tongueroo/dsl_evaluator/pull/6) DslEvaluator.print_code public method
14
+
6
15
  ## [0.2.4] - 2022-03-03
7
16
  - print error message as part of trace
8
17
 
data/README.md CHANGED
@@ -14,7 +14,6 @@ DslEvaluator.configure do |config|
14
14
  config.root = Lono.root
15
15
  end
16
16
 
17
-
18
17
  class Dsl
19
18
  include DslEvaluator
20
19
  def build
@@ -24,6 +23,27 @@ class Dsl
24
23
  end
25
24
  ```
26
25
 
26
+ ## Print Code Helper
27
+
28
+ For other libraries where printing the code and context lines around the code is useful, you can use `DslEvaluator.print_code`.
29
+
30
+ The `print_code` method understands "polymorphic" arguments.
31
+
32
+ 1. If the caller line info is part of a standard ruby backtrace line. Example of this is in ufo [helpers/ecr.rb](https://github.com/boltops-tools/ufo/blob/master/lib/ufo/task_definition/helpers/ecr.rb)
33
+
34
+ ```ruby
35
+ call_line = ufo_config_call_line
36
+ DslEvaluator.print_code(call_line)
37
+ ```
38
+
39
+ 2. If the caller line info is custom. Example of this is in ufo [erb/yaml.rb](https://github.com/boltops-tools/ufo/blob/9247b77c6ad2a3a6307155a2a130308a24668333/lib/ufo/task_definition/erb/yaml.rb#L16)
40
+
41
+ ```ruby
42
+ path = "replace with path to file"
43
+ line_number = "replace with line number. usually can get the exception.message"
44
+ DslEvaluator.print_code(path, line_number)
45
+ ```
46
+
27
47
  ## Installation
28
48
 
29
49
  Add this line to your application's Gemfile:
@@ -0,0 +1,65 @@
1
+ class DslEvaluator::Printer
2
+ module Concern
3
+ # So other libraries can use this method
4
+ # The `print_code` method understands "polymorphic" arguments.
5
+ # See README.md
6
+ def print_code(*args)
7
+ if args.size == 2 # print_code(path, line_number)
8
+ path, line_number = args
9
+ else # print_code(caller_line)
10
+ # IE: .ufo/config/web/dev.rb:10:in `block in evaluate_file'
11
+ # User passed in a "standard" ruby backtrace call line
12
+ # windows: "C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/terraspace-1.1.1/lib/terraspace/builder.rb:34:in `build'"
13
+ # linux: "/home/ec2-user/.rvm/gems/ruby-3.0.3/gems/terraspace-1.1.1/lib/terraspace/compiler/dsl/syntax/mod.rb:4:in `<module:Mod>'"
14
+ caller_line = args[0]
15
+ parts = caller_line.split(':')
16
+ is_windows = caller_line.match(/^[a-zA-Z]:/) # windows vs linux
17
+ calling_file = is_windows ? parts[1] : parts[0]
18
+ line_number = is_windows ? parts[2] : parts[1]
19
+ path = calling_file
20
+ end
21
+
22
+ check_line_number!(line_number)
23
+ line_number = line_number.to_i
24
+
25
+ logger.info "Here's the original caller line from:"
26
+ logger.info pretty_path(path).color(:green)
27
+
28
+ contents = IO.read(path)
29
+ content_lines = contents.split("\n")
30
+ context = 5 # lines of context
31
+ top, bottom = [line_number-context-1, 0].max, line_number+context-1
32
+ lpad = content_lines.size.to_s.size
33
+ content_lines[top..bottom].each_with_index do |line_content, index|
34
+ current_line = top+index+1
35
+ if current_line == line_number
36
+ printf("%#{lpad}d %s\n".color(:red), current_line, line_content)
37
+ else
38
+ printf("%#{lpad}d %s\n", current_line, line_content)
39
+ end
40
+ end
41
+
42
+ logger.info "Rerun with FULL_BACKTRACE=1 to see full backtrace" unless ENV['FULL_BACKTRACE']
43
+ end
44
+
45
+ def check_line_number!(line_number)
46
+ return line_number unless line_number.is_a?(String)
47
+ integer = line_number.to_i
48
+ if integer == 0
49
+ logger.error "ERROR: Think you accidentally passed in a String for the line_number: #{line_number}".color(:red)
50
+ puts caller
51
+ exit 1
52
+ end
53
+ end
54
+
55
+ def pretty_path(path)
56
+ path.sub("#{Dir.pwd}/",'').sub(/^\.\//,'')
57
+ end
58
+
59
+ # Replace HOME with ~ - different from the main pretty_path
60
+ def pretty_home(path)
61
+ path.sub(ENV['HOME'], '~')
62
+ end
63
+ end
64
+ end
65
+
@@ -9,26 +9,14 @@ module DslEvaluator
9
9
  info = error_info
10
10
  path = info[:path]
11
11
  line_number = info[:line_number].to_i
12
-
13
12
  logger.error "ERROR: #{@error.message}".color(:red)
14
13
  logger.error "Error evaluating #{pretty_path(path)}".color(:red)
15
14
  logger.error "Here's the line with the error:\n\n"
15
+ print_code(path, line_number)
16
+ end
16
17
 
17
- contents = IO.read(path)
18
- content_lines = contents.split("\n")
19
- context = 5 # lines of context
20
- top, bottom = [line_number-context-1, 0].max, line_number+context-1
21
- lpad = content_lines.size.to_s.size
22
- content_lines[top..bottom].each_with_index do |line_content, index|
23
- current_line = top+index+1
24
- if current_line == line_number
25
- printf("%#{lpad}d %s\n".color(:red), current_line, line_content)
26
- else
27
- printf("%#{lpad}d %s\n", current_line, line_content)
28
- end
29
- end
30
-
31
- logger.info "Rerun with FULL_BACKTRACE=1 to see full backtrace" unless ENV['FULL_BACKTRACE']
18
+ def print_code(path, line_number)
19
+ DslEvaluator.print_code(path, line_number)
32
20
  end
33
21
 
34
22
  def error_info
@@ -86,7 +74,7 @@ module DslEvaluator
86
74
 
87
75
  def select(lines)
88
76
  pattern = config.backtrace.select_pattern
89
- return unless pattern
77
+ return lines unless pattern
90
78
 
91
79
  lines.select do |l|
92
80
  if pattern.is_a?(String)
@@ -1,3 +1,3 @@
1
1
  module DslEvaluator
2
- VERSION = "0.2.4"
2
+ VERSION = "0.3.1"
3
3
  end
data/lib/dsl_evaluator.rb CHANGED
@@ -11,6 +11,7 @@ DslEvaluator::Autoloader.setup
11
11
 
12
12
  module DslEvaluator
13
13
  extend Memoist
14
+ include Printer::Concern
14
15
 
15
16
  class Error < StandardError; end
16
17
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dsl_evaluator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-03 00:00:00.000000000 Z
11
+ date: 2022-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -89,6 +89,7 @@ files:
89
89
  - lib/dsl_evaluator/autoloader.rb
90
90
  - lib/dsl_evaluator/logger.rb
91
91
  - lib/dsl_evaluator/printer.rb
92
+ - lib/dsl_evaluator/printer/concern.rb
92
93
  - lib/dsl_evaluator/version.rb
93
94
  homepage: https://github.com/tongueroo/dsl_evaluator
94
95
  licenses:
@@ -110,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
111
  - !ruby/object:Gem::Version
111
112
  version: '0'
112
113
  requirements: []
113
- rubygems_version: 3.2.32
114
+ rubygems_version: 3.3.12
114
115
  signing_key:
115
116
  specification_version: 4
116
117
  summary: DSL evaluation library. It produces a human-friendly backtrace error