class Symbol

Public Class Methods

generate(key=nil) click to toggle source

Generate a unique symbol.

Symbol.generate => :-1

If key is given the new symbol will be prefixed with it.

Symbol.generate(:foo) => :foo-1

TODO: Is the generated symbol format acceptable?

CREDIT: Trans

# File lib/core/facets/symbol/generate.rb, line 15
def self.generate(key=nil)
  key = key.to_sym if key
  @symbol_generate_counter ||= {}
  @symbol_generate_counter[key] ||= 0
  num = @symbol_generate_counter[key] += 1
  ("#{key}-%X" % num).to_sym
end

Public Instance Methods

chomp(seperator) click to toggle source

Just like String#chomp.

:ab.chomp(:b)  #=> :a

CREDIT: Trans

# File lib/core/facets/symbol/chomp.rb, line 9
def chomp(seperator)
  to_s.chomp(seperator.to_s).to_sym
end
clone?() click to toggle source
# File lib/core/facets/duplicable.rb, line 25
def clone? ; false ; end
dup?() click to toggle source
# File lib/core/facets/duplicable.rb, line 24
def dup?   ; false ; end
lchomp(seperator) click to toggle source

Just like String#lchomp.

:ab.lchomp(:a)  #=> :b

CREDIT: Trans

# File lib/core/facets/symbol/chomp.rb, line 19
def lchomp(seperator)
  to_s.reverse.chomp(seperator.to_s).reverse.to_sym
end
not?() click to toggle source

Does a symbol have a "not" sign?

"friend".to_sym.not?   #=> false
"~friend".to_sym.not?  #=> true

CREDIT: Trans

# File lib/core/facets/symbol/not.rb, line 10
def not?
  self.to_s.slice(0,1) == '~'
end
plain?() click to toggle source
# File lib/core/facets/symbol/plain.rb, line 3
def plain?
  c = to_s[-1,1]
  !(c == '=' || c == '?')
end
query?() click to toggle source
# File lib/core/facets/symbol/plain.rb, line 12
def query?
  to_s[-1,1] == '?'
end
re_s() click to toggle source

Convert symbol to string, apply string method and convert back to symbol via a fluent interface.

:HELLO.re_s.downcase
# File lib/core/facets/symbol/re_s.rb, line 11
def re_s
  @re_s ||= Functor.new do |op, *a|
    to_s.send(op, *a).to_sym
  end
end
setter?() click to toggle source
# File lib/core/facets/symbol/plain.rb, line 8
def setter?
  to_s[-1,1] == '='
end
succ() click to toggle source

Successor method for symobol. This simply converts the symbol to a string uses String#succ and then converts it back to a symbol.

:a.succ => :b

TODO: Make this work more like a simple character dial?

# File lib/core/facets/symbol/succ.rb, line 13
def succ
  self.to_s.succ.intern
end
thrown?() { || ... } click to toggle source

Does the block throw the symbol?

# File lib/core/facets/symbol/thrown.rb, line 5
def thrown?
  catch(self) do
    begin
      yield
      true
    rescue ArgumentError => err     # 1.9 exception
      #msg += ", not #{err.message.split(/ /).last}"
      false
    rescue NameError => err         # 1.8 exception
      #msg += ", not #{err.name.inspect}"
      false
    end
  end
end
to_proc() click to toggle source

Turn a symbol into a proc calling the method to which it refers.

up = :upcase.to_proc
up.call("hello")  #=> HELLO

More useful is the fact that this allows & to be used to coerce Symbol into Proc.

%w{foo bar qux}.map(&:upcase)   #=> ["FOO","BAR","QUX"]
[1, 2, 3].inject(&:+)           #=> 6

And other conveniences such as:

%{john terry fiona}.map(&:capitalize)   # -> %{John Terry Fiona}
sum = numbers.inject(&:+)

TODO: This will be deprecated as of Ruby 1.9, since it will become standard Ruby.

CREDIT: Florian Gross (orignal), Nobuhiro Imai (current)

# File lib/core/facets/symbol/to_proc.rb, line 26
def to_proc
  Proc.new{|*args| args.shift.__send__(self, *args)}
end
variablize() click to toggle source

Prepend an "@" to the beginning of a symbol to make a instance variable name. This also replaces non-valid characters with underscores.

# File lib/core/facets/symbol/variablize.rb, line 7
def variablize
  "@#{self}".gsub(%r\W/, '_').to_sym
end
~() click to toggle source

Add a "not" sign to the front of a symbol.

~:friend    #=> :"~friend"

CREDIT: Trans

# File lib/core/facets/symbol/not.rb, line 20
def ~
  if self.to_s.slice(0,1) == '~'
    "#{self.to_s[1..-1]}".to_sym
  else
    "~#{self}".to_sym
  end
end