class Object

::TODO

String.find_method(:new) [:new, Class] or [] if none found “”.find_method(:to_s) # finds instance methods or signleton [:to_s, Comparable] [:wow, Singleton]

String.local_methods  might also be cool!
String.inherited_methods as well

Public Class Methods

better_be_defined(sym) click to toggle source
# File lib/betterobject.rb, line 13
def self.better_be_defined(sym)
  raise "unknown generator #{sym.inspect}" unless  @@better_object_valid_methods.include? sym
end
better_be_different(old_sym, new_sym) click to toggle source
# File lib/betterobject.rb, line 17
def self.better_be_different(old_sym, new_sym)
  raise "unrecognize #{old_sym.inspect}" unless @@better_object_valid_methods.include? old_sym
  raise "new name must be differenct that existing generator" if @@better_object_valid_methods.include? new_sym 
end
better_be_object() click to toggle source

The following are standard class methods

# File lib/betterobject.rb, line 9
def self.better_be_object
  raise "must call from Object" unless self==Object
end
better_define(meth_name, code, type, doc="*Undocumented*", rm=nil) click to toggle source
# File lib/betterobject.rb, line 182
def self.better_define(meth_name, code, type, doc="*Undocumented*", rm=nil)
  better_be_object
  hash = {}
  hash[:code] = code
  hash[:explain] = doc
  hash[:type] = type
  hash[:rm] = rm unless rm.nil?
  @@better_object_valid_methods[meth_name] = hash
end
better_explain(sym=nil, pts=true) click to toggle source
# File lib/betterobject.rb, line 90
def self.better_explain(sym=nil, pts=true)
  better_be_object
  if @@better_object_valid_methods.include? sym
    str = @@better_object_valid_methods[sym][:explain]
  else
    if sym.nil?
      str = "valid parameters to the method are:\n:"
      meths = better_list.join ", :"
      str += meths.to_s
      str += "\n\nUsage:\n\nObject.better_explain(:one_of_the_above)\n"
    else
      str = "Undefined parameter #{sym.inspect}"
    end
  end
  return str unless pts
  puts str
  sym
end
better_get_definition(sym) click to toggle source
# File lib/betterobject.rb, line 196
def self.better_get_definition(sym)  # redo this with hash= way
  better_be_object
  better_be_defined(sym)
  rec = @@better_object_valid_methods[sym]
  puts " {  :type => :" + rec[:type].to_s + ","
  puts "    :explain => " + '"' + rec[:explain] + '",'
  puts "    :code =>"
  puts "<<'CODE'"
  term = rec[:rm].nil? ? "" :  ","
  puts rec[:code]
  puts "CODE" + term
  unless rec[:rm].nil?
    puts "    :rm =>"
    puts "<<'CODE'"
    puts rec[:rm]
    puts "CODE"
  end
  puts "}"
end
better_install(*sym) click to toggle source
# File lib/betterobject.rb, line 216
def self.better_install(*sym)
  if sym.first.class == Array
    sym = sym.first
    sym.each { |m| better_install m }
    return true
  else
    if sym.count==1
      sym = sym.first
    else
      sym.each { |m| better_install m }
      return true  # todo ... they may all be false ...
    end 
  end
  better_be_object
  better_be_defined(sym)    
  return false if @@better_installed_methods.include? sym
  return false if @@better_object_valid_methods[sym][:skip]
  @@better_installed_methods[sym]=true    
  code = @@better_object_valid_methods[sym][:code].gsub(/BO_METH_NAME/,sym.to_s)    
  class_eval code
  true
end
better_install_all() click to toggle source
# File lib/betterobject.rb, line 192
def self.better_install_all
   @@better_object_valid_methods.keys.each {|m| better_install m}
end
better_install_as!(old_sym, new_sym) click to toggle source
# File lib/betterobject.rb, line 239
def self.better_install_as!(old_sym, new_sym)  
  better_be_object
  better_be_defined(old_sym)
  better_be_different(old_sym, new_sym)   
  code = @@better_object_valid_methods[old_sym][:code].gsub(/BO_METH_NAME/,new_sym.to_s)    
  class_eval code
  true
end
better_installed() click to toggle source
# File lib/betterobject.rb, line 109
def self.better_installed
  better_be_object
  @@better_installed_methods.keys.sort
end
better_installed_class_methods() click to toggle source
# File lib/betterobject.rb, line 115
def self.better_installed_class_methods
  better_be_object
  rtn = []
  @@better_installed_methods.keys.each do |key|
    rtn.push key if @@better_object_valid_methods[key][:type]==:class
    rtn.push key if @@better_object_valid_methods[key][:type]==:both
  end
  return rtn.sort
end
better_installed_instance_methods() click to toggle source
# File lib/betterobject.rb, line 125
def self.better_installed_instance_methods
  better_be_object
  rtn = []
  @@better_installed_methods.keys.each do |key|
    rtn.push key if @@better_object_valid_methods[key][:type]==:instance
    rtn.push key if @@better_object_valid_methods[key][:type]==:both
  end
  return rtn.sort
end
better_list(include_skip=false) click to toggle source
# File lib/betterobject.rb, line 22
def self.better_list(include_skip=false)
  better_be_object
  rtn = []
  # @@better_object_valid_methods.keys.sort
  @@better_object_valid_methods.each_pair do |key,rec|
    rtn.push key unless rec[:skip]
  end
  return rtn.sort
end
better_rename(old_sym, new_sym) click to toggle source
# File lib/betterobject.rb, line 248
def self.better_rename(old_sym, new_sym)
  better_be_object
  better_be_defined(old_sym)
  better_be_different(old_sym, new_sym)   
  raise "cannot rename installed generator" if @@better_installed_methods.keys.include? old_sym
  rec = @@better_object_valid_methods[old_sym]
  @@better_object_valid_methods[new_sym] = rec
  @@better_object_valid_methods.delete old_sym    
end
better_skip(*sym) click to toggle source
# File lib/betterobject.rb, line 32
def self.better_skip(*sym)
  if sym.first.class == Array
    sym = sym.first
    sym.each { |m| better_skip m }
    return true
  else
    if sym.count==1
      sym = sym.first
    else
      sym.each { |m| better_skip m }
      return true
    end
  end
  better_be_object    
  raise "unknown generator #{sym.inspect}" unless  @@better_object_valid_methods.include? sym
  @@better_object_valid_methods[sym][:skip]=true
end
better_skipped() click to toggle source
# File lib/betterobject.rb, line 63
def self.better_skipped()
  better_be_object
  rtn = []
  @@better_object_valid_methods.each_pair do |key,val|
    if val[:skip]
      rtn.push key
    end
  end
  return rtn.sort
end
better_source_code(sym, return_string=false, inner_only = false, kind = :code) click to toggle source
# File lib/betterobject.rb, line 74
def self.better_source_code(sym, return_string=false, inner_only = false, kind = :code)
  better_be_object
  better_be_defined(sym)
  raise "expecting (:code, :rm) 4th parameter and got #{kind.inspect}" unless (kind==:code || kind==:rm)
  return nil unless @@better_object_valid_methods[sym][kind]
  str = "\n"
  str += "class Object\n" unless inner_only
  str += @@better_object_valid_methods[sym][kind]
  str += "\n" unless str[-1]=="\n"
  str += "end\n" unless inner_only
  str = str.gsub(/BO_METH_NAME/,sym.to_s)
  return str if return_string
  puts str
  sym
end
better_uninstall(*sym) click to toggle source
# File lib/betterobject.rb, line 139
def self.better_uninstall(*sym)
  if sym.first.class == Array
    sym = sym.first
    sym.each { |m| better_uninstall m }
    return true
  else
    if sym.count==1
      sym = sym.first
    else
      sym.each { |m| better_uninstall m }
      return true
    end 
  end
  better_be_object
  better_be_defined(sym)
  return false unless @@better_installed_methods.include? sym
  return false if @@better_object_valid_methods[sym][:skip]
  obj = @@better_object_valid_methods[sym]
  if obj[:rm]
    code = obj[:rm].gsub(/BO_METH_NAME/,sym.to_s)    
    class_eval code
    @@better_installed_methods.delete sym
    return true
  end
  cmd = "undef #{sym}" 
  tp = obj[:type]  
  if tp==:instance || tp==:both
    eval cmd rescue :never_mind  # don't care if already undefined
  end
  if tp==:class || tp==:both
    # This loses the local variable `cmd`
    # class << self
    #   eval cmd
    # end
    # this sould do the trick ...
    singleton_class.class_eval do
      eval cmd rescue :never_mind  # don't care if already undefined
    end
  end
  @@better_installed_methods.delete sym
  true
end
better_uninstall_all() click to toggle source
# File lib/betterobject.rb, line 135
def self.better_uninstall_all
   @@better_installed_methods.keys.each {|m| better_uninstall m}
end
better_unskip(*sym) click to toggle source
# File lib/betterobject.rb, line 50
def self.better_unskip(*sym)
  if sym.first.class == Array
    sym = sym.first
    sym.each { |m| better_unskip m }
    return true
  else
    sym = sym.first  
  end
  better_be_object
  better_be_defined(sym)
  @@better_object_valid_methods[sym][:skip]=false
end