trace_location 0.9.3 → 0.10.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.
@@ -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
 
@@ -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] == '<internal:prelude>'
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
  )
@@ -70,15 +75,19 @@ module TraceLocation
70
75
 
71
76
  def extract_method_from(trace_point)
72
77
  if trace_point.self.is_a?(Module)
73
- ::Module.instance_method(:method).bind(trace_point.self).call(trace_point.method_id)
78
+ ::Module.instance_method(:method)
79
+ .bind(trace_point.self)
80
+ .call(trace_point.method_id)
74
81
  else
75
- ::Kernel.instance_method(:method).bind(trace_point.self).call(trace_point.method_id)
82
+ ::Kernel.instance_method(:method)
83
+ .bind(trace_point.self)
84
+ .call(trace_point.method_id)
76
85
  end
77
86
  end
78
87
 
79
88
  def remove_indent(source)
80
- indent = source.split("\n").first.match(/\A(\s+).+\z/)[1]
81
- source.split("\n").map { |line| line.gsub(/\A#{indent}/, '') }.join("\n")
89
+ indent = source[/\A(\s*)/, 1]
90
+ source.gsub(/^#{indent}/, '')
82
91
  end
83
92
  end
84
93
  end
@@ -2,12 +2,12 @@
2
2
 
3
3
  module TraceLocation
4
4
  class Config # :nodoc:
5
- attr_accessor :gems_dir, :dest_dir, :default_format
5
+ attr_accessor :current_dir, :dest_dir, :default_format
6
6
 
7
7
  def initialize
8
- @gems_dir = File.join(Gem.path[0], 'gems')
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
 
10
10
  def initialize(events, return_value, options)
11
11
  super
12
+ @current_dir = ::TraceLocation.config.current_dir
12
13
  @dest_dir = options.fetch(:dest_dir) { ::TraceLocation.config.dest_dir }
13
14
  @file_path = File.join(@dest_dir, "trace_location-#{Time.now.strftime('%Y%m%d%H%m%s')}.csv")
14
15
  end
@@ -21,7 +22,7 @@ module TraceLocation
21
22
 
22
23
  private
23
24
 
24
- attr_reader :events, :return_value, :dest_dir, :file_path
25
+ attr_reader :events, :return_value, :current_dir, :dest_dir, :file_path
25
26
 
26
27
  def setup_dir
27
28
  FileUtils.mkdir_p(dest_dir)
@@ -32,7 +33,16 @@ module TraceLocation
32
33
  csv << ATTRIBUTES
33
34
 
34
35
  events.each do |event|
35
- csv << ATTRIBUTES.map { |attr| event.public_send(attr) }
36
+ csv << [
37
+ event.id,
38
+ event.event,
39
+ event.path.to_s.gsub(%r{#{current_dir}/}, ''),
40
+ event.lineno,
41
+ event.caller_path.to_s.gsub(%r{#{current_dir}/}, ''),
42
+ event.caller_lineno,
43
+ event.owner_with_name,
44
+ event.hierarchy
45
+ ]
36
46
  end
37
47
  end
38
48
  end
@@ -11,7 +11,7 @@ module TraceLocation
11
11
 
12
12
  def initialize(events, return_value, options)
13
13
  super
14
- @gems_dir = ::TraceLocation.config.gems_dir
14
+ @current_dir = ::TraceLocation.config.current_dir
15
15
  @dest_dir = options.fetch(:dest_dir) { ::TraceLocation.config.dest_dir }
16
16
  @current = Time.now
17
17
  @filename = "trace_location-#{@current.strftime('%Y%m%d%H%m%s')}.log"
@@ -26,7 +26,7 @@ module TraceLocation
26
26
 
27
27
  private
28
28
 
29
- attr_reader :events, :return_value, :gems_dir, :dest_dir, :current, :filename, :file_path
29
+ attr_reader :events, :return_value, :current_dir, :dest_dir, :current, :filename, :file_path
30
30
 
31
31
  def setup_dir
32
32
  FileUtils.mkdir_p(dest_dir)
@@ -46,12 +46,11 @@ module TraceLocation
46
46
  end
47
47
 
48
48
  def format_events(events)
49
- events.select(&:valid?).map do |e|
50
- indent = indent(e.hierarchy)
51
- event = EVENTS[e.event]
52
- path = e.path.to_s.gsub(%r{#{gems_dir}/}, '')
49
+ events.select(&:valid?).map do |event|
50
+ indent = indent(event.hierarchy)
51
+ path = event.path.to_s.gsub(%r{#{current_dir}/}, '')
53
52
 
54
- %(#{indent}#{event} #{path}:#{e.lineno} [#{e.owner_with_name}])
53
+ %(#{indent}#{EVENTS[event.event]} #{path}:#{event.lineno} [#{event.owner_with_name}])
55
54
  end
56
55
  end
57
56
 
@@ -5,7 +5,7 @@ module TraceLocation
5
5
  class Markdown < Base # :nodoc:
6
6
  def initialize(events, return_value, options)
7
7
  super
8
- @gems_dir = ::TraceLocation.config.gems_dir
8
+ @current_dir = ::TraceLocation.config.current_dir
9
9
  @dest_dir = options.fetch(:dest_dir) { ::TraceLocation.config.dest_dir }
10
10
  @current = Time.now
11
11
  @filename = "trace_location-#{@current.strftime('%Y%m%d%H%m%s')}.md"
@@ -20,7 +20,7 @@ module TraceLocation
20
20
 
21
21
  private
22
22
 
23
- attr_reader :events, :return_value, :gems_dir, :dest_dir, :current, :filename, :file_path
23
+ attr_reader :events, :return_value, :current_dir, :dest_dir, :current, :filename, :file_path
24
24
 
25
25
  def setup_dir
26
26
  FileUtils.mkdir_p(dest_dir)
@@ -34,8 +34,9 @@ module TraceLocation
34
34
  MARKDOWN
35
35
 
36
36
  events.select(&:call?).each do |e|
37
- path = e.path.to_s.gsub(%r{#{gems_dir}/}, '')
38
- caller_path = e.caller_path.to_s.gsub(%r{#{gems_dir}/}, '')
37
+ path = e.path.to_s.gsub(%r{#{current_dir}/}, '')
38
+ caller_path = e.caller_path.to_s.gsub(%r{#{current_dir}/}, '')
39
+
39
40
  io.write <<~MARKDOWN
40
41
  <details open>
41
42
  <summary>#{path}:#{e.lineno}</summary>
@@ -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'
4
+ VERSION = '0.10.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
4
+ version: 0.10.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-06 00:00:00.000000000 Z
12
+ date: 2020-06-20 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,6 +71,7 @@ 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
74
+ - shioi.mm@gmail.com
87
75
  executables: []
88
76
  extensions: []
89
77
  extra_rdoc_files: []
@@ -92,7 +80,6 @@ files:
92
80
  - ".rspec"
93
81
  - ".rubocop.yml"
94
82
  - ".travis.yml"
95
- - CHANGELOG.md
96
83
  - Gemfile
97
84
  - Gemfile.lock
98
85
  - LICENSE.txt
@@ -100,6 +87,21 @@ files:
100
87
  - Rakefile
101
88
  - bin/console
102
89
  - bin/setup
90
+ - examples/active_record_establish_connection/result.csv
91
+ - examples/active_record_establish_connection/result.log
92
+ - examples/active_record_establish_connection/result.md
93
+ - examples/active_record_validation_process/result.csv
94
+ - examples/active_record_validation_process/result.log
95
+ - examples/active_record_validation_process/result.md
96
+ - examples/has_secure_password/result.csv
97
+ - examples/has_secure_password/result.log
98
+ - examples/has_secure_password/result.md
99
+ - examples/lifecycle_of_rails_application/result.csv
100
+ - examples/lifecycle_of_rails_application/result.log
101
+ - examples/lifecycle_of_rails_application/result.md
102
+ - examples/rendering_process/result.csv
103
+ - examples/rendering_process/result.log
104
+ - examples/rendering_process/result.md
103
105
  - lib/trace_location.rb
104
106
  - lib/trace_location/collector.rb
105
107
  - lib/trace_location/config.rb
@@ -125,14 +127,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
127
  requirements:
126
128
  - - ">="
127
129
  - !ruby/object:Gem::Version
128
- version: 2.5.0
130
+ version: 2.6.0
129
131
  required_rubygems_version: !ruby/object:Gem::Requirement
130
132
  requirements:
131
133
  - - ">="
132
134
  - !ruby/object:Gem::Version
133
135
  version: '0'
134
136
  requirements: []
135
- rubygems_version: 3.0.3
137
+ rubygems_version: 3.1.2
136
138
  signing_key:
137
139
  specification_version: 4
138
140
  summary: helps you get tracing the source location of codes
@@ -1,19 +0,0 @@
1
- ## v0.3.0
2
-
3
- - Log path is shorten
4
- - Use gems_dir instead of root_dir
5
- - Don't collect not including gems_dir
6
- - Fix Regexp
7
-
8
- ## v0.2.0
9
-
10
- - Refactoring: Separate Collector/Report/Generator
11
- - Display class method or instance method
12
-
13
- ## v0.1.1
14
-
15
- - Update README
16
-
17
- ## v0.1.0
18
-
19
- - Initial Release