[ create a new paste ] login | about

Link: http://codepad.org/CFnnJgBN    [ raw code | output | fork ]

Ruby, pasted on Jul 6:
module HasFlags
  def method_missing(sym, *args)
    type = sym.to_s[-1..-1]
    if type == "?"
      @_flags ||= {}
      return @_flags[sym.to_s[0..-2].intern] ? true : false
    end

    if type == "!"
      @_flags ||= {}
      sym = sym.to_s[0..-2].intern
      if @_flags[sym]
        @_flags.delete(sym)
      else
        @_flags[sym] = true
      end
      return
    end
    raise
  end
end

player = Object.new # Anything
player.extend(HasFlags)

# Query to see if something has flags.
if player.is_a?(HasFlags)
  puts "Yeap."
end

# toggle flags
player.drunk!
player.mute!
player.anything_else_to_set!

puts player.drunk?
puts player.mute?
puts player.some_flag_never_mentioned?

# still fails on other method missings.
begin 
  puts player.fail()
rescue
  puts "Failed."
end


Output:
1
2
3
4
5
Yeap.
true
true
false
Failed.


Create a new paste based on this one


Comments: