module Kernel
Public Instance Methods
pd(args)
click to toggle source
For easier puts debugging (pd). Defined in Kernel
module which is included into Object class so this method is accessible from everywhere. Output is sent to standard error stream (stderr) so it could be further separated from standard output like this:
rails s 2>> error then you can tail -f error to watch error stream output. Examples: pd('something') => ============================================================ something ============================================================ pd(data: 'something', data_color: 'magenta', lines: :none) => something pd(name: 'Yogurt') => ============================================================ name: Yogurt ============================================================ pd(data: 1, symbol: '-', margin: 1) => ------------------------------------------------------------ 1 ------------------------------------------------------------ pd(data: {a: 1, b: 3}, symbol: '*') => ************************************************************ a: 1 b: 3 ************************************************************
# File lib/puts_debug.rb, line 44 def pd(args) params = nil if args.is_a? Hash if args[:data].nil? params = { data: args } else params = args end else params = { data: args } end # parameters data = params[:data] symbol = params[:symbol] || '=' line_color = params[:color] || 'red' data_color = params[:data_color] || nil margin = params[:margin] || 0 lines = params[:lines] || :both title = params[:title] epilogue = params[:epilogue] # locals line_str = Rainbow(symbol * 60).try(line_color) margin_str = "\n" * margin $stderr.puts margin_str if margin > 0 && lines.in?([:both, :top]) $stderr.puts line_str if lines.in?([:both, :top]) if title.present? title_str = if title.ends_with? ':' "#{title}\n" else "#{title}:\n" end $stderr.puts Rainbow(title_str).try(line_color) end data_str = case data when Hash data.map { |k, v| "#{k}: #{v}" }.join("\n") when Array data.map { |v| "#{v}" }.join(",\n") else data.to_s end data_str = Rainbow(data_str).try(data_color) if data_color.present? $stderr.puts data_str if title.present? $stderr.puts '' end $stderr.puts Rainbow(epilogue).try(line_color) if epilogue.present? if lines.present? $stderr.puts line_str if lines.in?([:both, :bottom]) $stderr.puts margin_str if margin > 0 && lines.in?([:both, :bottom]) end end