trace_location 0.9.3.1 → 0.11.0

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: d53f06873752fb59bd283cfdab5418d69be411bd03d9dcb9c73aebfefacf1286
4
- data.tar.gz: 75d433e5b116f864e2393bea2417949335775aa619be186eb6c145268283f779
3
+ metadata.gz: 010e65cd3a2447cb0816fd31bb62eec1acb6546a0cc2d8667df523027d24abd4
4
+ data.tar.gz: 9bce85eda13a6836c0195d05265dcaf9794d4f2356d6a0b5ad5cf25d915db5b9
5
5
  SHA512:
6
- metadata.gz: 6206f594de72240102b08f14e2620924d9e0310393305c55266b743f3a28e3af22fe018ffa429f2eb19e07a95a707511c6550b239357227b3dc792e11a78041d
7
- data.tar.gz: 6ad2e38892b0794c714345da2ef873f71f329983ceb679a068db0496ff982fea77f0bc886c01ea2bf3fd42f119082446921147f752cef1a1b10c9f7e704cf656
6
+ metadata.gz: 274ae1e802b7eb65e81cabd20fc66bd7b8ba2c7427e6eb2e5e6dee0a9415350a26cad2827f670151b9e94329b4702bca8086432b94179c20b15e48fca3a5265e
7
+ data.tar.gz: 367ae84388dd7a5b331ed780b99e6539a9f895aa5be06acdde803501a1bef8f24c155b7334031d4dc6314272332511773dfe4139ac825c63c53df5dc346c6c91
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.5
2
+ TargetRubyVersion: 2.6
3
3
 
4
4
  Metrics:
5
5
  Enabled: false
@@ -3,5 +3,11 @@ sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.6.3
7
- before_install: gem install bundler -v 2.0.1
6
+ - 2.6.6
7
+ - 2.7.1
8
+ - ruby-head
9
+ before_install: gem install bundler -v 2.1.4
10
+
11
+ matrix:
12
+ allow_failures:
13
+ - rvm: ruby-head
@@ -1,25 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trace_location (0.9.3.1)
5
- binding_of_caller
4
+ trace_location (0.11.0)
6
5
  method_source
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
10
9
  specs:
11
10
  ast (2.4.0)
12
- binding_of_caller (0.8.0)
13
- debug_inspector (>= 0.0.1)
14
- debug_inspector (0.0.3)
15
11
  diff-lcs (1.3)
16
12
  jaro_winkler (1.5.2)
17
- method_source (0.9.2)
13
+ method_source (1.0.0)
18
14
  parallel (1.17.0)
19
15
  parser (2.6.3.0)
20
16
  ast (~> 2.4.0)
21
17
  rainbow (3.0.0)
22
- rake (12.3.2)
18
+ rake (13.0.1)
23
19
  rspec (3.8.0)
24
20
  rspec-core (~> 3.8.0)
25
21
  rspec-expectations (~> 3.8.0)
@@ -54,4 +50,4 @@ DEPENDENCIES
54
50
  trace_location!
55
51
 
56
52
  BUNDLED WITH
57
- 2.0.1
53
+ 2.1.4
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # TraceLocation
2
2
 
3
+ [![Build Status](https://travis-ci.org/yhirano55/trace_location.svg?branch=master)](https://travis-ci.org/yhirano55/trace_location)
4
+
3
5
  TraceLocation helps you get tracing the source location of codes, and helps you can get reading the huge open souce libraries in Ruby.
4
6
 
5
7
  ## Installation
@@ -37,9 +39,9 @@ Then you can get logs like this: [.md](https://github.com/yhirano55/trace_locati
37
39
 
38
40
  | name | content | example |
39
41
  |:-----|:--------|:--------|
40
- | format | `:markdown`, `:log`, `:csv` (default: `:markdown`) | `:markdown` |
41
- | match | Regexp for allow list | `/activerecord/` |
42
- | ignore | Regexp for deny list | `/bootsnap\|activesupport/` |
42
+ | format | `:md`, `:log`, `:csv` (default: `:md`) | `:md` |
43
+ | match | Regexp, Symbol, String or Array for allow list | `[:activerecord, :activesupport]` |
44
+ | ignore | Regexp, Symbol, String or Array for deny list | `/bootsnap\|activesupport/` |
43
45
 
44
46
  ## More examples
45
47
 
@@ -69,7 +71,7 @@ Results: [.md](https://github.com/yhirano55/trace_location/blob/master/examples/
69
71
  ```ruby
70
72
  class User < ApplicationRecord
71
73
  # temporary surrounding with TraceLocation#trace
72
- Trace.location(format: :markdown, ignore: /activesupport/) do
74
+ TraceLocation.trace(format: :md, ignore: /activesupport/) do
73
75
  has_secure_password
74
76
  end
75
77
  ```
@@ -87,7 +89,7 @@ class BooksController < ApplicationController
87
89
  @books = Book.all
88
90
 
89
91
  # temporary surrounding with TraceLocation#trace
90
- TraceLocation.trace(format: :markdown, ignore: /activesupport|rbenv|concurrent-ruby/) do
92
+ TraceLocation.trace(format: :md, ignore: /activesupport|rbenv|concurrent-ruby/) do
91
93
  render json: @books
92
94
  end
93
95
  end
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'trace_location'
4
+ require 'trace_location/cli'
5
+
6
+ TraceLocation::CLI.new(ARGV).run
@@ -21,7 +21,8 @@ module TraceLocation # :nodoc:
21
21
  Report.build(result.events, result.return_value, options).generate
22
22
  true
23
23
  rescue StandardError => e
24
- $stdout.puts "Failure: #{e.message}"
24
+ $stderr.puts "Failure: TraceLocation got an unexpected error."
25
+ $stderr.puts e.full_message
25
26
  false
26
27
  end
27
28
 
@@ -0,0 +1,59 @@
1
+ require 'optparse'
2
+
3
+ module TraceLocation
4
+ class CLI
5
+ attr_reader :argv
6
+
7
+ def initialize(argv)
8
+ @argv = argv
9
+ end
10
+
11
+ def run
12
+ opt = OptionParser.new
13
+ opt.on('-f FORMAT', '--format=FORMAT', 'Report format (default: :md)', &:to_sym)
14
+ opt.on('-m REGEXP', '--match=REGEXP') { |str| Regexp.new(str) }
15
+ opt.on('-i REGEXP', '--ignore=REGEXP') { |str| Regexp.new(str) }
16
+ opt.on('-d DIR', '--dest-dir=DIR')
17
+ opt.on('-e code')
18
+
19
+ params = {}
20
+ opt.order!(argv, into: params)
21
+ params.transform_keys! { |k| k.to_s.gsub('-', '_').to_sym }
22
+
23
+ if code = params.delete(:e)
24
+ exec_code code, params
25
+ else
26
+ file = argv.shift
27
+ unless file
28
+ puts opt.help
29
+ exit 1
30
+ end
31
+
32
+ exec_command file, params
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def exec_command(cmd, params)
39
+ path =
40
+ if File.exist?(cmd)
41
+ cmd
42
+ else
43
+ `which #{cmd}`.chomp
44
+ end
45
+
46
+ $PROGRAM_NAME = cmd
47
+
48
+ TraceLocation.trace(params) do
49
+ load path
50
+ end
51
+ end
52
+
53
+ def exec_code(code, params)
54
+ TraceLocation.trace(params) do
55
+ eval code
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'binding_of_caller'
4
3
  require 'method_source'
5
4
 
6
5
  module TraceLocation
@@ -14,16 +13,22 @@ module TraceLocation
14
13
  hierarchy = 0
15
14
  id = 0
16
15
  cache = {}
16
+ method_source_cache = {}
17
17
 
18
18
  tracer = TracePoint.new(:call, :return) do |trace_point|
19
- next if match && !trace_point.path.to_s.match?(/#{match}/)
20
- next if ignore && trace_point.path.to_s.match?(/#{ignore}/)
19
+ next if match && !trace_point.path.to_s.match?(/#{Array(match).join('|')}/)
20
+ next if ignore && trace_point.path.to_s.match?(/#{Array(ignore).join('|')}/)
21
21
 
22
22
  id += 1
23
- caller_path, caller_lineno = trace_point.binding.of_caller(2).source_location
23
+ caller_loc = caller_locations(2, 1)[0]
24
+ caller_path = caller_loc.absolute_path
25
+ caller_lineno = caller_loc.lineno
24
26
  location_cache_key = "#{caller_path}:#{caller_lineno}"
25
27
 
26
28
  mes = extract_method_from(trace_point)
29
+ next if mes.source_location[0].match?(/\A(?:<internal:.+>|\(eval\))\z/)
30
+
31
+ method_source = method_source_cache[mes] ||= remove_indent(mes.source)
27
32
 
28
33
  case trace_point.event
29
34
  when :call
@@ -38,7 +43,7 @@ module TraceLocation
38
43
  caller_lineno: caller_lineno,
39
44
  owner: mes.owner,
40
45
  name: mes.name,
41
- source: remove_indent(mes.source),
46
+ source: method_source,
42
47
  hierarchy: hierarchy,
43
48
  is_module: trace_point.self.is_a?(Module)
44
49
  )
@@ -56,7 +61,7 @@ module TraceLocation
56
61
  caller_lineno: caller_lineno,
57
62
  owner: mes.owner,
58
63
  name: mes.name,
59
- source: remove_indent(mes.source),
64
+ source: method_source,
60
65
  hierarchy: hierarchy,
61
66
  is_module: trace_point.self.is_a?(Module)
62
67
  )
@@ -81,8 +86,8 @@ module TraceLocation
81
86
  end
82
87
 
83
88
  def remove_indent(source)
84
- indent = source.split("\n").first.match(/\A(\s+).+\z/)[1]
85
- source.split("\n").map { |line| line.gsub(/\A#{indent}/, '') }.join("\n")
89
+ indent = source[/\A(\s*)/, 1]
90
+ source.gsub(/^#{indent}/, '')
86
91
  end
87
92
  end
88
93
  end
@@ -7,7 +7,7 @@ module TraceLocation
7
7
  def initialize
8
8
  @current_dir = Dir.pwd
9
9
  @dest_dir = Dir.pwd
10
- @default_format = :markdown
10
+ @default_format = :md
11
11
  end
12
12
  end
13
13
  end
@@ -9,6 +9,7 @@ module TraceLocation
9
9
  GENERATORS = {
10
10
  csv: ::TraceLocation::Generator::Csv,
11
11
  log: ::TraceLocation::Generator::Log,
12
+ md: ::TraceLocation::Generator::Markdown,
12
13
  markdown: ::TraceLocation::Generator::Markdown
13
14
  }.freeze
14
15
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TraceLocation
4
- VERSION = '0.9.3.1'
4
+ VERSION = '0.11.0'
5
5
  end
@@ -7,8 +7,8 @@ require 'trace_location/version'
7
7
  Gem::Specification.new do |s|
8
8
  s.name = 'trace_location'
9
9
  s.version = TraceLocation::VERSION
10
- s.authors = ['Yoshiyuki Hirano']
11
- s.email = ['yhirano@me.com']
10
+ s.authors = ['Yoshiyuki Hirano', 'Misaki Shioi']
11
+ s.email = ['yhirano@me.com', 'shioi.mm@gmail.com']
12
12
  s.homepage = 'https://github.com/yhirano55/trace_location'
13
13
  s.summary = 'helps you get tracing the source location of codes'
14
14
  s.description = %(TraceLocation helps you get tracing the source location of codes, and helps you can get reading the huge open souce libraries in Ruby)
@@ -21,9 +21,8 @@ Gem::Specification.new do |s|
21
21
  s.bindir = 'exe'
22
22
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  s.require_paths = ['lib']
24
- s.required_ruby_version = '>= 2.5.0'
24
+ s.required_ruby_version = '>= 2.6.0'
25
25
 
26
- s.add_dependency 'binding_of_caller'
27
26
  s.add_dependency 'method_source'
28
27
 
29
28
  s.add_development_dependency 'bundler'
metadata CHANGED
@@ -1,29 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trace_location
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshiyuki Hirano
8
+ - Misaki Shioi
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2019-06-07 00:00:00.000000000 Z
12
+ date: 2020-08-12 00:00:00.000000000 Z
12
13
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: binding_of_caller
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
14
  - !ruby/object:Gem::Dependency
28
15
  name: method_source
29
16
  requirement: !ruby/object:Gem::Requirement
@@ -84,7 +71,9 @@ description: TraceLocation helps you get tracing the source location of codes, a
84
71
  helps you can get reading the huge open souce libraries in Ruby
85
72
  email:
86
73
  - yhirano@me.com
87
- executables: []
74
+ - shioi.mm@gmail.com
75
+ executables:
76
+ - trace_location
88
77
  extensions: []
89
78
  extra_rdoc_files: []
90
79
  files:
@@ -114,7 +103,9 @@ files:
114
103
  - examples/rendering_process/result.csv
115
104
  - examples/rendering_process/result.log
116
105
  - examples/rendering_process/result.md
106
+ - exe/trace_location
117
107
  - lib/trace_location.rb
108
+ - lib/trace_location/cli.rb
118
109
  - lib/trace_location/collector.rb
119
110
  - lib/trace_location/config.rb
120
111
  - lib/trace_location/event.rb
@@ -139,14 +130,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
130
  requirements:
140
131
  - - ">="
141
132
  - !ruby/object:Gem::Version
142
- version: 2.5.0
133
+ version: 2.6.0
143
134
  required_rubygems_version: !ruby/object:Gem::Requirement
144
135
  requirements:
145
136
  - - ">="
146
137
  - !ruby/object:Gem::Version
147
138
  version: '0'
148
139
  requirements: []
149
- rubygems_version: 3.0.3
140
+ rubygems_version: 3.1.2
150
141
  signing_key:
151
142
  specification_version: 4
152
143
  summary: helps you get tracing the source location of codes