ariadne 0.0.4 → 0.0.6

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: 5d15963f0e72fcd20333f6227ced3e4dba5e3d5a7c2cc295440dcc98c9bb863a
4
- data.tar.gz: bd90b66bad183442d7661fd72566ef11223d45f705817bcae2b2026efc928a3a
3
+ metadata.gz: e535df4d44ee5c90e5b93476249641ddf9a5a34264e69fda50d0559c17deb453
4
+ data.tar.gz: 42311c562c1bd5f2dac05d99f2fc0623ac5c3bfb26320bae4f8d0c246b867936
5
5
  SHA512:
6
- metadata.gz: 42c4370c8b426696d7b336fc42e40c60509569f60e1260a37aa952c1ee013b8a0ef94784032907574d256eb53071e5d8563ec5a9539b555e5abb08d4165b4bff
7
- data.tar.gz: 30d1d3b263dee8c331d9f8d23b8bf8b9e422fd66b7f24a9488f2b4c3b8dc464a461201a0820475231628904a9a071d3ee496e8cd5cb27b0803818ecf2fce4bab
6
+ metadata.gz: 24c4e890adacdb42d81c3c3f36fbb1bca05db60f3bc71fdf8eddc0a97eebe76e9edd6e5e9b2cdfc27b621e0fa478304feb6befb49cebfbf709f157f208884ce3
7
+ data.tar.gz: ea9e7d7e09af8e5d52e7d22cf3231ec9a69daec8da26c7dbef47c9f788f31f64e6fc8bc520a8c6d453e9ae9f76971378d3e889a93472c258c2fee0f336b2ee72
data/lib/ariadne/log.rb CHANGED
@@ -1,79 +1,96 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "open3"
4
- require "ariadne/helpers/text"
5
- require "ariadne/helpers/value_format"
3
+ require "colorize"
6
4
 
7
5
  module Ariadne
8
6
  class Log
9
- include Helpers::Text
10
- include Helpers::ValueFormat
7
+ TEXTS = {
8
+ rank: :white,
9
+ depth_dashes: :white,
10
+ class_name: :green,
11
+ prefix: :blue,
12
+ method_name: :blue,
13
+ parameters: :magenta,
14
+ return_value_type: :yellow
15
+ }.freeze
11
16
 
12
17
  def initialize(seam)
13
18
  @seam = seam
14
19
  end
15
20
 
16
21
  def call
17
- puts text
22
+ puts log
18
23
  write_log
19
24
  end
20
25
 
21
26
  private
22
27
 
23
- def write_log
24
- File.open(Ariadne::Thread::LOG_FILE, "a") { _1.puts text.bleach }
28
+ def log
29
+ @log ||=
30
+ TEXTS.map do |method, color|
31
+ __send__(method).colorize(color)
32
+ end.join
25
33
  end
26
34
 
27
- def text
28
- @text ||=
29
- Text(
30
- [
31
- rank,
32
- " ",
33
- depth_dashes,
34
- class_name,
35
- prefix,
36
- method_name,
37
- parameters,
38
- return_value
39
- ].join
40
- )
35
+ def write_log
36
+ File.open(Ariadne::Thread::LOG_FILE, "a") { _1.puts log.uncolorize }
41
37
  end
42
38
 
43
39
  def rank
44
- Text(@seam.rank.to_s.rjust(4)).gray
40
+ @seam.rank.to_s.rjust(4)
45
41
  end
46
42
 
47
43
  def depth_dashes
48
- Text("-" * @seam.depth).gray.tap { _1 << " " if @seam.depth.positive? }
44
+ str = +" "
45
+ if @seam.depth.positive?
46
+ str << ("-" * @seam.depth)
47
+ str << " "
48
+ end
49
+ str
49
50
  end
50
51
 
51
52
  def class_name
52
- Text(@seam.klass.name).green
53
+ @seam.klass.name
53
54
  end
54
55
 
55
56
  def prefix
56
- Text(@seam.prefix).gray
57
+ @seam.prefix
57
58
  end
58
59
 
59
60
  def method_name
60
- Text(@seam.method_name).cyan
61
+ @seam.method_name.to_s
61
62
  end
62
63
 
63
- def return_value
64
- value = Text(cast(@seam.return_value)).truncate(50)
65
- value = type(@seam.return_value) ? "<#{type(@seam.return_value)}> #{value}" : value
66
- Text(" -> #{value}").yellow
64
+ def return_value_type
65
+ value = type(@seam.return_value)
66
+ " -> #{value}"
67
67
  end
68
68
 
69
69
  def parameters
70
- str =
71
- @seam.parameters.map do |parameter|
72
- arg = Text(cast(parameter.arg)).truncate(50)
73
- arg = type(parameter.arg) ? "<#{type(parameter.arg)}> #{arg}" : arg
74
- "#{parameter.param}: #{arg}"
75
- end.join(", ")
76
- Text(str.empty? ? "" : "(#{str})").magenta
70
+ return "" if @seam.parameters.empty?
71
+
72
+ [
73
+ "(",
74
+ @seam.parameters.flat_map { "#{_1.param}: #{arg(_1)}" }.join(", "),
75
+ ")"
76
+ ].join
77
+ end
78
+
79
+ def arg(parameter)
80
+ if parameter.type == :rest || %i[* ** &].include?(parameter.param)
81
+ parameter.arg.map { type(_1) }.join(", ")
82
+ else
83
+ type(parameter.arg)
84
+ end
85
+ end
86
+
87
+ def type(arg)
88
+ case arg
89
+ when "<?>" then "<?>"
90
+ when TrueClass, FalseClass then "Boolean"
91
+ when NilClass then "nil"
92
+ else arg.class.to_s
93
+ end
77
94
  end
78
95
  end
79
96
  end
data/lib/ariadne/seam.rb CHANGED
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "open3"
4
- require "ariadne/parameter"
5
4
 
6
5
  module Ariadne
7
6
  class Seam
8
7
  attr_reader :rank, :depth, :klass, :method_name, :prefix, :parameters, :return_value, :binding, :path
9
8
 
9
+ Parameter = Struct.new(:type, :param, :arg)
10
+
10
11
  class << self
11
12
  # We cannot make public methods because accessing the TracePoint
12
13
  # after it has been disabled would raise a RunTimeError
@@ -44,11 +45,23 @@ module Ariadne
44
45
 
45
46
  def parameters(tracepoint)
46
47
  method = tracepoint.self.method(tracepoint.method_id)
47
- method.parameters.map do |parameter|
48
- Parameter.new(parameter, binding: tracepoint.binding)
48
+ if forwarded_parameters?(method)
49
+ [Parameter.new(:rest, "...", ["<?>"])]
50
+ else
51
+ method.parameters.flat_map do |parameter|
52
+ type = parameter.first
53
+ param = parameter.last
54
+ arg = %i[* ** &].include?(param) ? ["<?>"] : tracepoint.binding.local_variable_get(param)
55
+ Parameter.new(type, param, arg)
56
+ rescue NameError
57
+ Parameter.new(type, param, type == :rest ? ["<?>"] : "<?>")
58
+ end
49
59
  end
50
- rescue NoMethodError
51
- []
60
+ end
61
+
62
+ # return true if method's signature is like `def my_method(...)`
63
+ def forwarded_parameters?(method)
64
+ method.parameters == [%i[rest *], %i[block &]]
52
65
  end
53
66
 
54
67
  def path(tracepoint)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ariadne
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.6"
5
5
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ariadne
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edouard Piron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-24 00:00:00.000000000 Z
11
+ date: 2023-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: yard
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  description: Follow the code
98
84
  email:
99
85
  - ed.piron@gmail.com
@@ -102,10 +88,7 @@ extensions: []
102
88
  extra_rdoc_files: []
103
89
  files:
104
90
  - lib/ariadne.rb
105
- - lib/ariadne/helpers/text.rb
106
- - lib/ariadne/helpers/value_format.rb
107
91
  - lib/ariadne/log.rb
108
- - lib/ariadne/parameter.rb
109
92
  - lib/ariadne/seam.rb
110
93
  - lib/ariadne/thread.rb
111
94
  - lib/ariadne/version.rb
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ariadne
4
- module Helpers
5
- module Text
6
- class Text < String
7
- COLORS = %w[
8
- black
9
- red
10
- green
11
- yellow
12
- blue
13
- magenta
14
- cyan
15
- gray
16
- ].freeze
17
-
18
- COLORS.each.with_index do |color, index|
19
- code = index + 30
20
- define_method(color) do
21
- "\e[#{code}m#{bleach}\e[0m"
22
- end
23
- bg_code = index + 40
24
- define_method("bg_#{color}") do
25
- "\e[#{bg_code}m#{bleach}\e[0m"
26
- end
27
- end
28
-
29
- def initialize(str)
30
- super(str.to_s)
31
- end
32
-
33
- def truncate(size)
34
- if self.size > size
35
- Text.new("#{self[..size]}...")
36
- else
37
- self
38
- end
39
- end
40
-
41
- def bleach
42
- gsub(/\e\[\d{1,2}m/, "")
43
- end
44
- end
45
-
46
- def Text(str) # rubocop:disable Naming/MethodName
47
- Text.new(str)
48
- end
49
- end
50
- end
51
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ariadne
4
- module Helpers
5
- module ValueFormat
6
- RUBY_LITERALS = [
7
- NilClass,
8
- String,
9
- Integer,
10
- Float,
11
- Proc,
12
- TrueClass,
13
- FalseClass,
14
- Symbol,
15
- Array,
16
- Range,
17
- Regexp,
18
- Hash
19
- ].freeze
20
-
21
- def type(value)
22
- return if value.is_a?(Class) || RUBY_LITERALS.include?(value.class)
23
-
24
- value.class.name
25
- end
26
-
27
- def cast(value)
28
- case value
29
- when NilClass
30
- "nil"
31
- when Proc
32
- "#<Proc>"
33
- when Class
34
- value.name
35
- when String
36
- "\"#{value}\""
37
- else
38
- value.to_s
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "open3"
4
-
5
- module Ariadne
6
- class Parameter < SimpleDelegator
7
- def initialize(parameter, binding:)
8
- super(parameter)
9
- @binding = binding
10
- end
11
-
12
- def param
13
- last
14
- end
15
-
16
- def arg
17
- @binding.local_variable_get(last)
18
- rescue NameError
19
- "?"
20
- end
21
- end
22
- end