BigBigDoudou / ariadne

Follow the thread

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ariadne

Follow your code with the Ariadne's Thread! šŸ§µ

example

Usage

Run it with:

require 'ariadne/thread'

# Initialize a new Ariadne Thread
thread = Ariadne::Thread.new

# Or if you want to output only when the code is in specific paths or when it is not,
# use the params `include_paths` and `exclude_paths`/
# The default path is the root of the repository,
# in order not to display logs from the gems.
thread = Ariadne::Thread.new(
  include_paths: ["app/models", "app/services"],
  exclude_paths: ["app/services/helpers"],
)

# Then, pass a block to the #call method to output the thread
thread.call do
  Services::CreateUsers.new(names: ["Jane Doe"]).call do |user|
    user.role = :engineer
    user.admin = true
  end
end
#  0 Services::CreateUsers#initialize(names: Array) -> Array
#  1 Services::CreateUsers#call -> Boolean
#  2 - User.build(name: String) -> User
#  3 -- User#initialize(name: String) -> String
#  4 -- User.generate_access_key -> Integer
#  5 -- User#access_key=(value: Integer) -> Integer
#  6 - User#role=(value: Symbol) -> Symbol
#  7 - User#admin=(value: Boolean) -> Boolean
#  8 - Services::CreateUsers#generate_email(user: User) -> String
#  9 -- Services::GenerateEmail#initialize(user: User) -> User
# 10 -- Services::GenerateEmail#call -> String
# 11 --- Services::GenerateEmail#domain -> String
# 12 - User#email=(value: String) -> String
# 13 - User.import(users: Array) -> Boolean
# 14 -- User#validate -> Boolean
# 15 --- User#access_key? -> Boolean

# read the seams (1 method call -> 1 seam)
seams = thread.seams
seams.size # 16
seams.map(&:depth).max # 3
seams.map(&:klass).uniq # [Services::CreateUsers, User, Services::GenerateEmail]

Reading the logs:

  • 8 is the iteration. Each time a method is called, it adds 1.
  • - is the depth (one dash by level of depth). It starts at 0. Each time a method is called inside another method, it adds a level of depth.
  • Services::CreateUsers is the name of the class.
  • # is the method prefix (. for a class method, # for an instance method).
  • generate_email is the name of the method.
  • user is the name of the parameter.
  • User is the type of the argument passed for this parameter.
  • -> String is the type of the value returned by the method.

The logs are outputed in the terminal and in the thread.log file.

Installation

Add this line to your application's Gemfile:

group :development do
  gem "ariadne"
end

And then execute:

$ bundle

Or install it yourself as:

$ gem install ariadne

Contributing

This gem is still a work in progress. You can use GitHub issue to start a discussion.

License

The gem is available as open source under the terms of the MIT License.

About

Follow the thread

License:MIT License


Languages

Language:Ruby 100.0%