lib/mothership/inputs.rb in mothership-0.3.5 vs lib/mothership/inputs.rb in mothership-0.4.0
- old
+ new
@@ -71,20 +71,25 @@
@inputs[name] = val unless meta && meta[:forget]
val
end
- def interact(name, *args)
+ def interact(name, context, *args)
meta =
if @command
@command.inputs[name]
else
Mothership.global_option(name)
end
- if interact = meta[:interact]
- @context.instance_exec(*args, &interact)
+ interact = meta[:interact] || :"ask_#{name}"
+
+ case interact
+ when Symbol, String
+ context.send(interact, *args)
+ else
+ context.instance_exec(*args, &interact)
end
end
# search:
# 1. cache
@@ -105,12 +110,12 @@
return [true, @global[name]]
end
return [false, val] if not found
- if val == :interact && interact = meta[:interact]
- [true, context.instance_exec(*args, &interact)]
+ if val == :interact
+ [true, interact(name, context, *args)]
else
[true, convert_given(meta, context, val, *args)]
end
ensure
@current_input = before_input
@@ -134,11 +139,11 @@
[true, where[name]]
elsif where.key?(singular)
[true, [where[singular]]]
else
# no value given; set as default
- [false, default_for(meta, context, *args)]
+ [false, default_for(name, meta, context, *args)]
end
end
def convert_given(meta, context, given, *args)
if convert = meta[:from_given]
@@ -151,30 +156,30 @@
end
else
case meta[:type]
when :integer, :number, :numeric
given.to_i
- when :float
+ when :float, :floating
given.to_f
- when :boolean
+ when :bool, :boolean
given == "true"
else
given
end
end
end
- def default_for(meta, context, *args)
+ def default_for(name, meta, context, *args)
if meta.key?(:default)
default = meta[:default]
if default.respond_to? :to_proc
context.instance_exec(*args, &default)
else
default
end
- elsif interact = meta[:interact]
- context.instance_exec(*args, &interact)
+ elsif meta[:interact] || context.respond_to?(:"ask_#{name}", true)
+ interact(name, context, *args)
elsif meta[:type] == :boolean
false
elsif meta[:argument] == :splat
[]
end