Class: Symbol
- Defined in:
- lib/core/facets/object/dup.rb,
lib/core/facets/symbol/not.rb,
lib/core/facets/symbol/as_s.rb,
lib/core/facets/symbol/succ.rb,
lib/core/facets/symbol/chomp.rb,
lib/core/facets/symbol/plain.rb,
lib/core/facets/symbol/op_div.rb,
lib/core/facets/symbol/thrown.rb,
lib/core/facets/symbol/to_proc.rb,
lib/core/facets/symbol/generate.rb,
lib/core/facets/symbol/variablize.rb
Class Method Summary collapse
-
.generate(key = nil) ⇒ Object
Generate a unique symbol.
Instance Method Summary collapse
-
#/(path) ⇒ Object
Join with path as a file path.
-
#as_s ⇒ Object
Convert symbol to string, apply string method and convert back to symbol via a fluent interface.
-
#bang? ⇒ Boolean
Symbol ends in ‘!`.
-
#chomp(seperator) ⇒ Object
Just like String#chomp.
- #clone? ⇒ Boolean
-
#dup! ⇒ Object
Since Symbol is immutable it cannot be duplicated.
- #dup? ⇒ Boolean
-
#lchomp(seperator) ⇒ Object
Just like String#lchomp.
-
#not? ⇒ Boolean
Does a symbol have a “not” sign?.
-
#plain? ⇒ Boolean
Symbol does not end in ‘!`, `=`, or `?`.
-
#query? ⇒ Boolean
Symbol ends in ‘?`.
-
#setter? ⇒ Boolean
Symbol ends in ‘=`.
-
#succ(n = 1) ⇒ Object
Successor method for symobol.
-
#thrown? ⇒ Boolean
Does the block throw the symbol?.
-
#to_proc ⇒ Object
Turn a symbol into a proc calling the method to which it refers.
-
#variablize ⇒ Object
Prepend an “@” to the beginning of a symbol to make a instance variable name.
-
#~@ ⇒ Object
Add a “not” sign to the front of a symbol.
Class Method Details
.generate(key = nil) ⇒ Object
15 16 17 18 19 20 21 |
# 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 |
Instance Method Details
#/(path) ⇒ Object
Join with path as a file path.
-
path - The path component(s) to append. [#to_s]
Examples
(:merb / "string") #=> "merb/string"
(:merb / :symbol) #=> "merb/symbol"
Returns String of the receiver (as a path string), concatenated with path.
16 17 18 |
# File 'lib/core/facets/symbol/op_div.rb', line 16 def /(path) File.join(to_s, path.to_s) end |
#as_s ⇒ Object
Convert symbol to string, apply string method and convert back to symbol via a fluent interface.
:HELLO.as_s.downcase #=> :hello
10 11 12 13 14 |
# File 'lib/core/facets/symbol/as_s.rb', line 10 def as_s Functor.new do |op, *a| to_s.send(op, *a).to_sym end end |
#bang? ⇒ Boolean
Symbol ends in ‘!`.
:a!.bang? #=> true
:a.bang? #=> false
38 39 40 |
# File 'lib/core/facets/symbol/plain.rb', line 38 def bang? to_s[-1,1] == '!' end |
#chomp(seperator) ⇒ Object
Just like String#chomp.
:ab.chomp(:b) #=> :a
CREDIT: Trans
9 10 11 |
# File 'lib/core/facets/symbol/chomp.rb', line 9 def chomp(seperator) to_s.chomp(seperator.to_s).to_sym end |
#clone? ⇒ Boolean
67 |
# File 'lib/core/facets/object/dup.rb', line 67 def clone? ; false ; end |
#dup! ⇒ Object
Since Symbol is immutable it cannot be duplicated. For this reason #try_dup returns self
.
:a.dup! #=> :a
65 |
# File 'lib/core/facets/object/dup.rb', line 65 def dup! ; self ; end |
#dup? ⇒ Boolean
66 |
# File 'lib/core/facets/object/dup.rb', line 66 def dup? ; false ; end |
#lchomp(seperator) ⇒ Object
Just like String#lchomp.
:ab.lchomp(:a) #=> :b
CREDIT: Trans
19 20 21 |
# File 'lib/core/facets/symbol/chomp.rb', line 19 def lchomp(seperator) to_s.reverse.chomp(seperator.to_s).reverse.to_sym end |
#not? ⇒ Boolean
Does a symbol have a “not” sign?
"friend".to_sym.not? #=> false
"~friend".to_sym.not? #=> true
CREDIT: Trans
10 11 12 |
# File 'lib/core/facets/symbol/not.rb', line 10 def not? self.to_s.slice(0,1) == '~' end |
#plain? ⇒ Boolean
Symbol does not end in ‘!`, `=`, or `?`.
:a.plain? #=> true
:a?.plain? #=> false
:a!.plain? #=> false
:a=.plain? #=> false
10 11 12 13 |
# File 'lib/core/facets/symbol/plain.rb', line 10 def plain? c = to_s[-1,1] !(c == '=' || c == '?' || c == '!') end |
#query? ⇒ Boolean
Symbol ends in ‘?`.
:a?.query? #=> true
:a.query? #=> false
29 30 31 |
# File 'lib/core/facets/symbol/plain.rb', line 29 def query? to_s[-1,1] == '?' end |
#setter? ⇒ Boolean
Symbol ends in ‘=`.
:a=.setter? #=> true
:a.setter? #=> false
20 21 22 |
# File 'lib/core/facets/symbol/plain.rb', line 20 def setter? to_s[-1,1] == '=' end |
#succ(n = 1) ⇒ Object
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?
13 14 15 16 17 18 19 |
# File 'lib/core/facets/symbol/succ.rb', line 13 def succ(n=1) s = self.to_s n.times do s = s.succ end s.to_sym end |
#thrown? ⇒ Boolean
Does the block throw the symbol?
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/core/facets/symbol/thrown.rb', line 5 def thrown? catch(self) do begin yield true rescue ArgumentError => err # 1.9 exception false #msg += ", not #{err.message.split(/ /).last}" rescue NameError => err # 1.8 exception false #msg += ", not #{err.name.inspect}" end end end |
#to_proc ⇒ Object
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
TODO: This will be deprecated as of Ruby 1.9, since it will become standard Ruby.
CREDIT: Florian Gross (orignal), Nobuhiro Imai (current)
20 21 22 |
# File 'lib/core/facets/symbol/to_proc.rb', line 20 def to_proc Proc.new{|*args| args.shift.__send__(self, *args)} end |
#variablize ⇒ Object
Prepend an “@” to the beginning of a symbol to make a instance variable name. This also replaces non-valid characters with underscores.
:a.variablize #=> :"@a"
8 9 10 11 |
# File 'lib/core/facets/symbol/variablize.rb', line 8 def variablize name = to_s.gsub(/\W/, '_') "@#{name}".to_sym end |
#~@ ⇒ Object
Add a “not” sign to the front of a symbol.
(~:friend) #=> :"~friend"
CREDIT: Trans
20 21 22 23 24 25 26 |
# 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 |