Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Module
- def attr_sec_accessor(sym, *args, &block)
- if block.nil? # default actions
- args = [0] if args.size == 0 #default = 0
- if args.size < 2 # One pair
- attr_writer sym
- attr_sec_reader sym, *args
- else # loads of methods followed by a default value.
- default = args[-1]
- syms = [sym].concat(args)
- syms.pop
- for sym in syms
- attr_writer sym
- attr_sec_reader sym, default
- end
- end
- else # when a block is given
- # currently just pair sematics
- args.unshift(sym)
- i = 0
- while i < args.size
- attr_writer args[i]
- attr_sec_reader args[i], args[i+1]
- i += 2
- end
- end
- end
- def attr_sec_reader(sym, default = 0)
- sym = sym.id2name
- string = "def #{sym};" +
- " @#{sym} = #{default} if @#{sym}.nil?;" +
- " @#{sym};" +
- "end;"
- module_eval(string)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement