module Nazar

Constants

VERSION

Public Class Methods

disable!() click to toggle source
# File lib/nazar.rb, line 88
def disable!
  disable_shorthand_method! if @defined_shorthand_method

  return unless @enabled

  disable_for_irb! if defined?(IRB)
  disable_for_pry! if defined?(Pry)

  @enabled = false
end
enable!(extensions: [:active_record, :csv]) click to toggle source
# File lib/nazar.rb, line 35
def enable!(extensions: [:active_record, :csv])
  return if @enabled

  load_extensions!(extensions)
  enable_repl!

  enable_shorthand_method! if Nazar.config.enable_shorthand_method

  @enabled = true
end
formatters() click to toggle source
# File lib/nazar.rb, line 31
def formatters
  @formatters ||= Set.new
end
load!(extensions: [:active_record, :csv]) click to toggle source
# File lib/nazar.rb, line 46
def load!(extensions: [:active_record, :csv])
  load_extensions!(extensions)
  enable_shorthand_method! if Nazar.config.enable_shorthand_method

  true
end
load_active_record!() click to toggle source
# File lib/nazar.rb, line 59
def load_active_record!
  require 'active_record'

  register_formatter!('ActiveRecordCollection', 'nazar/formatter/active_record_collection')
  register_formatter!('ActiveRecordItem', 'nazar/formatter/active_record_item')
end
load_csv!() click to toggle source
# File lib/nazar.rb, line 53
def load_csv!
  require 'csv'

  register_formatter!('CSVTable', 'nazar/formatter/csv_table')
end
load_sequel!() click to toggle source
# File lib/nazar.rb, line 66
def load_sequel!
  require 'sequel'

  register_formatter!('SequelCollection', 'nazar/formatter/sequel_collection')
  register_formatter!('SequelItem', 'nazar/formatter/sequel_item')
end
pry_proc() click to toggle source
# File lib/nazar.rb, line 79
def pry_proc
  return unless defined?(Pry)

  proc do |output, value, instance|
    renderer = Nazar::Renderer.new(value)
    renderer.valid? ? renderer.render : @__original_pry_print.call(output, value, instance)
  end
end
register_formatter!(klass_name, path) click to toggle source
# File lib/nazar.rb, line 73
def register_formatter!(klass_name, path)
  require path

  formatters << Nazar::Formatter.const_get(klass_name)
end

Private Class Methods

__(item) click to toggle source
# File lib/nazar.rb, line 140
def __(item)
  Nazar::Renderer.new(item, use_generic_formatter: true).render
end
disable_for_irb!() click to toggle source
# File lib/nazar.rb, line 154
def disable_for_irb!
  ::IRB::Irb.send(:alias_method, :output_value, :__original_output_value__)
end
disable_for_pry!() click to toggle source
# File lib/nazar.rb, line 158
def disable_for_pry!
  Pry.toplevel_binding.eval(
    'pry_instance.config.print = Nazar.instance_variable_get(:@__original_pry_print)',
    __FILE__,
    __LINE__
  )
end
disable_shorthand_method!() click to toggle source
# File lib/nazar.rb, line 146
def disable_shorthand_method!
  @defined_shorthand_method = nil

  Object.class_eval do
    undef_method :__
  end
end
enable_for_irb!() click to toggle source
# File lib/nazar.rb, line 112
def enable_for_irb!
  ::IRB::Irb.class_eval do
    alias_method :__original_output_value__, :output_value
    def output_value(omit = false) # rubocop:disable Style/OptionalBooleanParameter
      renderer = Nazar::Renderer.new(@context.last_value)
      renderer.valid? ? renderer.render : __original_output_value__(omit)
    end
  end
end
enable_for_pry!() click to toggle source
# File lib/nazar.rb, line 122
def enable_for_pry!
  @__original_pry_print ||= Pry.config.print

  if Pry.toplevel_binding.local_variable_defined?(:pry_instance)
    Pry.toplevel_binding.eval('pry_instance.config.print = Nazar.pry_proc', __FILE__, __LINE__)
  else
    Pry.config.print = Nazar.pry_proc
  end
end
enable_repl!() click to toggle source
# File lib/nazar.rb, line 107
def enable_repl!
  enable_for_irb! if defined?(IRB)
  enable_for_pry! if defined?(Pry)
end
enable_shorthand_method!() click to toggle source
# File lib/nazar.rb, line 132
def enable_shorthand_method!
  if Object.respond_to?(:__)
    return warn Pastel.new.red("Already defined Object#__() method, Nazar won't redefine it.")
  end

  @defined_shorthand_method = true

  Object.class_eval do
    def __(item)
      Nazar::Renderer.new(item, use_generic_formatter: true).render
    end
  end
end
load_extensions!(extensions) click to toggle source
# File lib/nazar.rb, line 101
def load_extensions!(extensions)
  load_active_record! if extensions.include?(:active_record)
  load_csv! if extensions.include?(:csv)
  load_sequel! if extensions.include?(:sequel)
end
output_value(omit = false) click to toggle source
# File lib/nazar.rb, line 115
def output_value(omit = false) # rubocop:disable Style/OptionalBooleanParameter
  renderer = Nazar::Renderer.new(@context.last_value)
  renderer.valid? ? renderer.render : __original_output_value__(omit)
end