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