README.md in trace_location-0.9.3 vs README.md in trace_location-0.9.3.1

- old
+ new

@@ -18,358 +18,83 @@ $ gem install trace_location ## Usage -You just surround the code which you want to track the process. +### Example: Track establish connection in Active Record -### Example 01. Track the validation process of Active Record - -``` -% bin/rails c - -irb(main):001:0> book = Book.new(title: "My Book Title") -irb(main):002:0> TraceLocation.trace(ignore: /active_support/) { book.validate } -Created at /path/to/sampleapp/log/trace_location-2019060401061559579741.md -=> true -``` - -Then you can get a markdown file like this: - --- - -Generated by [trace_location](https://github.com/yhirano55/trace_location) at 2019-06-04 01:35:41 +0900 - -<details open> -<summary>activerecord-5.2.3/lib/active_record/validations.rb:65</summary> - -##### ActiveRecord::Validations#valid? ```ruby -def valid?(context = nil) - context ||= default_validation_context - output = super(context) - errors.empty? && output -end -# called from (irb):2 -``` +config = Rails.application.config.database_configuration[Rails.env] -</details> -<details open> -<summary>activerecord-5.2.3/lib/active_record/validations.rb:75</summary> - -##### ActiveRecord::Validations#default_validation_context -```ruby -def default_validation_context - new_record? ? :create : :update +TraceLocation.trace do + # You just surround you want to track the process. + ActiveRecord::Base.establish_connection(config) end -# called from activerecord-5.2.3/lib/active_record/validations.rb:66 ``` -</details> -<details open> -<summary>activerecord-5.2.3/lib/active_record/persistence.rb:231</summary> +Then you can get logs like this: [.md](https://github.com/yhirano55/trace_location/blob/master/examples/active_record_establish_connection/result.md), [.log](https://github.com/yhirano55/trace_location/blob/master/examples/active_record_establish_connection/result.log), [.csv](https://github.com/yhirano55/trace_location/blob/master/examples/active_record_establish_connection/result.csv) -##### ActiveRecord::Persistence#new_record? -```ruby -def new_record? - sync_with_transaction_state - @new_record -end -# called from activerecord-5.2.3/lib/active_record/validations.rb:76 -``` +### Trace method options -</details> -<details open> -<summary>activerecord-5.2.3/lib/active_record/transactions.rb:490</summary> +| name | content | example | +|:-----|:--------|:--------| +| format | `:markdown`, `:log`, `:csv` (default: `:markdown`) | `:markdown` | +| match | Regexp for allow list | `/activerecord/` | +| ignore | Regexp for deny list | `/bootsnap\|activesupport/` | -##### ActiveRecord::Transactions#sync_with_transaction_state -```ruby -def sync_with_transaction_state - update_attributes_from_transaction_state(@transaction_state) -end -# called from activerecord-5.2.3/lib/active_record/persistence.rb:232 -``` +## More examples -</details> -<details open> -<summary>activerecord-5.2.3/lib/active_record/transactions.rb:494</summary> +### Example: Track the validation process of Active Record -##### ActiveRecord::Transactions#update_attributes_from_transaction_state ```ruby -def update_attributes_from_transaction_state(transaction_state) - if transaction_state && transaction_state.finalized? - restore_transaction_record_state(transaction_state.fully_rolledback?) if transaction_state.rolledback? - force_clear_transaction_record_state if transaction_state.fully_committed? - clear_transaction_record_state if transaction_state.fully_completed? - end -end -# called from activerecord-5.2.3/lib/active_record/transactions.rb:491 +book = Book.new(title: "My Book Title") +TraceLocation.trace(match: /activerecord/) { book.validate } ``` -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/validations.rb:336</summary> +Results: [.md](https://github.com/yhirano55/trace_location/blob/master/examples/active_record_validation_process/result.md), [.log](https://github.com/yhirano55/trace_location/blob/master/examples/active_record_validation_process/result.log), [.csv](https://github.com/yhirano55/trace_location/blob/master/examples/active_record_validation_process/result.csv) -##### ActiveModel::Validations#valid? -```ruby -def valid?(context = nil) - current_context, self.validation_context = validation_context, context - errors.clear - run_validations! -ensure - self.validation_context = current_context -end -# called from activerecord-5.2.3/lib/active_record/validations.rb:67 -``` +### Example: Track the lifecycle of Rails application -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/validations.rb:303</summary> - -##### ActiveModel::Validations#errors ```ruby -def errors - @errors ||= Errors.new(self) -end -# called from activemodel-5.2.3/lib/active_model/validations.rb:338 -``` +env = Rack::MockRequest.env_for('http://localhost:3000/books') -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:74</summary> - -##### ActiveModel::Errors#initialize -```ruby -def initialize(base) - @base = base - @messages = apply_default_array({}) - @details = apply_default_array({}) +TraceLocation.trace do + status, headers, body = Rails.application.call(env) end -# called from activemodel-5.2.3/lib/active_model/validations.rb:304 ``` -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:470</summary> +Results: [.md](https://github.com/yhirano55/trace_location/blob/master/examples/lifecycle_of_rails_application/result.md), [.log](https://github.com/yhirano55/trace_location/blob/master/examples/lifecycle_of_rails_application/result.log), [.csv](https://github.com/yhirano55/trace_location/blob/master/examples/lifecycle_of_rails_application/result.csv) -##### ActiveModel::Errors#apply_default_array -```ruby -def apply_default_array(hash) - hash.default_proc = proc { |h, key| h[key] = [] } - hash -end -# called from activemodel-5.2.3/lib/active_model/errors.rb:76 -``` +### Example: Track the `has_secure_password` in User model -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:470</summary> - -##### ActiveModel::Errors#apply_default_array ```ruby -def apply_default_array(hash) - hash.default_proc = proc { |h, key| h[key] = [] } - hash -end -# called from activemodel-5.2.3/lib/active_model/errors.rb:77 +class User < ApplicationRecord + # temporary surrounding with TraceLocation#trace + Trace.location(format: :markdown, ignore: /activesupport/) do + has_secure_password + end ``` -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:115</summary> +Results: [.md](https://github.com/yhirano55/trace_location/blob/master/examples/has_secure_password/result.md), [.log](https://github.com/yhirano55/trace_location/blob/master/examples/has_secure_password/result.log), [.csv](https://github.com/yhirano55/trace_location/blob/master/examples/has_secure_password/result.csv) -##### ActiveModel::Errors#clear -```ruby -def clear - messages.clear - details.clear -end -# called from activemodel-5.2.3/lib/active_model/validations.rb:338 -``` +### Example: Track the rendering process of action in controller class -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/validations/callbacks.rb:117</summary> - -##### ActiveModel::Validations::Callbacks#run_validations! ```ruby -def run_validations! - _run_validation_callbacks { super } -end -# called from activemodel-5.2.3/lib/active_model/validations.rb:339 -``` +class BooksController < ApplicationController + before_action :set_book, only: [:show, :update, :destroy] -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/validations.rb:408</summary> + # GET /books + def index + @books = Book.all -##### ActiveModel::Validations#run_validations! -```ruby -def run_validations! - _run_validate_callbacks - errors.empty? -end -# called from activemodel-5.2.3/lib/active_model/validations/callbacks.rb:118 + # temporary surrounding with TraceLocation#trace + TraceLocation.trace(format: :markdown, ignore: /activesupport|rbenv|concurrent-ruby/) do + render json: @books + end + end ``` -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/validations.rb:303</summary> - -##### ActiveModel::Validations#errors -```ruby -def errors - @errors ||= Errors.new(self) -end -# called from activemodel-5.2.3/lib/active_model/validations.rb:410 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:209</summary> - -##### ActiveModel::Errors#empty? -```ruby -def empty? - size.zero? -end -# called from activemodel-5.2.3/lib/active_model/validations.rb:410 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:179</summary> - -##### ActiveModel::Errors#size -```ruby -def size - values.flatten.size -end -# called from activemodel-5.2.3/lib/active_model/errors.rb:210 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:188</summary> - -##### ActiveModel::Errors#values -```ruby -def values - messages.select do |key, value| - !value.empty? - end.values -end -# called from activemodel-5.2.3/lib/active_model/errors.rb:180 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/validations.rb:303</summary> - -##### ActiveModel::Validations#errors -```ruby -def errors - @errors ||= Errors.new(self) -end -# called from activerecord-5.2.3/lib/active_record/validations.rb:68 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:209</summary> - -##### ActiveModel::Errors#empty? -```ruby -def empty? - size.zero? -end -# called from activerecord-5.2.3/lib/active_record/validations.rb:68 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:179</summary> - -##### ActiveModel::Errors#size -```ruby -def size - values.flatten.size -end -# called from activemodel-5.2.3/lib/active_model/errors.rb:210 -``` - -</details> -<details open> -<summary>activemodel-5.2.3/lib/active_model/errors.rb:188</summary> - -##### ActiveModel::Errors#values -```ruby -def values - messages.select do |key, value| - !value.empty? - end.values -end -# called from activemodel-5.2.3/lib/active_model/errors.rb:180 -``` - -</details> - - - -### Example 02. Track the lifecycle of Rails application - - -``` -% bin/rails c - -irb(main):001:0> env = Rack::MockRequest.env_for('http://localhost:3000/books') -irb(main):002:0> TraceLocation.trace(format: :log) { status, headers, body = Rails.application.call(env) } -Created at /path/to/sampleapp/log/trace_location-2019050602051557077971.log -=> true -``` - -Then you can get a log like this: - -``` -Logged by TraceLocation gem at 2019-05-06 02:39:31 +0900 -https://github.com/yhirano55/trace_location - -[Tracing events] C: Call, R: Return - -C railties-5.2.3/lib/rails.rb:39 [Rails.application] -R railties-5.2.3/lib/rails.rb:41 [Rails.application] -C railties-5.2.3/lib/rails/engine.rb:522 [Rails::Engine#call] - C railties-5.2.3/lib/rails/application.rb:607 [Rails::Application#build_request] - C railties-5.2.3/lib/rails/engine.rb:705 [Rails::Engine#build_request] - C railties-5.2.3/lib/rails/application.rb:247 [Rails::Application#env_config] - C railties-5.2.3/lib/rails/engine.rb:528 [Rails::Engine#env_config] - R railties-5.2.3/lib/rails/engine.rb:530 [Rails::Engine#env_config] - C railties-5.2.3/lib/rails/application.rb:372 [Rails::Application#config] - R railties-5.2.3/lib/rails/application.rb:374 [Rails::Application#config] - C railties-5.2.3/lib/rails/application.rb:372 [Rails::Application#config] - R railties-5.2.3/lib/rails/application.rb:374 [Rails::Application#config] - C railties-5.2.3/lib/rails/application.rb:394 [Rails::Application#secrets] - R railties-5.2.3/lib/rails/application.rb:414 [Rails::Application#secrets] - C activesupport-5.2.3/lib/active_support/ordered_options.rb:41 [ActiveSupport::OrderedOptions#method_missing] - C activesupport-5.2.3/lib/active_support/ordered_options.rb:37 [ActiveSupport::OrderedOptions#[]] - R activesupport-5.2.3/lib/active_support/ordered_options.rb:39 [ActiveSupport::OrderedOptions#[]] - R activesupport-5.2.3/lib/active_support/ordered_options.rb:54 [ActiveSupport::OrderedOptions#method_missing] - C railties-5.2.3/lib/rails/application.rb:428 [Rails::Application#secret_key_base] - C railties-5.2.3/lib/rails.rb:72 [Rails.env] - R railties-5.2.3/lib/rails.rb:74 [Rails.env] - C activesupport-5.2.3/lib/active_support/string_inquirer.rb:26 [ActiveSupport::StringInquirer#method_missing] - R activesupport-5.2.3/lib/active_support/string_inquirer.rb:32 [ActiveSupport::StringInquirer#method_missing] - C railties-5.2.3/lib/rails/application.rb:394 [Rails::Application#secrets] - R railties-5.2.3/lib/rails/application.rb:414 [Rails::Application#secrets] - C activesupport-5.2.3/lib/active_support/ordered_options.rb:41 [ActiveSupport::OrderedOptions#method_missing] - C activesupport-5.2.3/lib/active_support/ordered_options.rb:37 [ActiveSupport::OrderedOptions#[]] - R activesupport-5.2.3/lib/active_support/ordered_options.rb:39 [ActiveSupport::OrderedOptions#[]] - R activesupport-5.2.3/lib/active_support/ordered_options.rb:54 [ActiveSupport::OrderedOptions#method_missing] - R railties-5.2.3/lib/rails/application.rb:436 [Rails::Application#secret_key_base] -.................. -(an omission) -.................. -``` +Results: [.md](https://github.com/yhirano55/trace_location/blob/master/examples/rendering_process/result.md), [.log](https://github.com/yhirano55/trace_location/blob/master/examples/rendering_process/result.log), [.csv](https://github.com/yhirano55/trace_location/blob/master/examples/rendering_process/result.csv) ## License [MIT License](https://opensource.org/licenses/MIT)