8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/babushka/accepts_list_for.rb', line 8
def accepts_list_for method_name, *args
opts = {:type => 'list'}.merge args.
default = args.shift
file, line = caller.first.split(':', 2)
line = line.to_i
module_eval <<-LOL, file, line
def #{method_name} *args, &block
if !args.empty? && !block.nil?
raise ArgumentError, "You can supply arguments or a block, but not both."
elsif args.empty? && block.nil?
#{opts[:type]}_for #{method_name.inspect}, #{default.inspect}
else
store_#{opts[:type]}_for #{method_name.inspect}, block || [*args].flatten, #{opts[:choose_with].inspect}
self
end
end
LOL
end
|