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