Advertisement
Zeriab

attr_sec_accessor module add-on advanced

Sep 24th, 2011
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.97 KB | None | 0 0
  1. class Module
  2.   def attr_sec_accessor(sym, *args, &block)
  3.     if block.nil? # default actions
  4.       args = [0] if args.size == 0 #default = 0
  5.       if args.size < 2 # One pair
  6.         attr_writer sym
  7.         attr_sec_reader sym, *args
  8.       else # loads of methods followed by a default value.
  9.         default = args[-1]
  10.         syms = [sym].concat(args)
  11.         syms.pop
  12.         for sym in syms
  13.           attr_writer sym
  14.           attr_sec_reader sym, default
  15.         end
  16.       end
  17.     else # when a block is given
  18.       # currently just pair sematics
  19.       args.unshift(sym)
  20.       i = 0
  21.       while i < args.size
  22.         attr_writer args[i]
  23.         attr_sec_reader args[i], args[i+1]
  24.         i += 2
  25.       end
  26.     end
  27.   end
  28.  
  29.   def attr_sec_reader(sym, default = 0)
  30.     sym = sym.id2name
  31.     string = "def #{sym};" +
  32.              "  @#{sym} = #{default}  if @#{sym}.nil?;" +
  33.              "  @#{sym};" +
  34.              "end;"
  35.     module_eval(string)
  36.   end
  37. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement