Sha256: 8fb230b8735b7e4e7b3ab79fe1088290267d437381970e47c6cf533c6744ddc5
Contents?: true
Size: 1.49 KB
Versions: 2
Compression:
Stored size: 1.49 KB
Contents
# Represents a completion mission specified by :object in Bond.complete. Unlike other missions, this # one needs to both match the mission condition and have the current object being completed have # an ancestor specified by :object. class Bond::Missions::ObjectMission < Bond::Mission #:stopdoc: attr_reader :object_condition def initialize(options={}) @object_condition = options.delete(:object) @object_condition = /^#{Regexp.quote(@object_condition.to_s)}$/ unless @object_condition.is_a?(Regexp) options[:on] = /^((\.?[^.]+)+)\.([^.]*)$/ @eval_binding = options[:eval_binding] super end def handle_valid_match(input) match = super if match && eval_object(match) && (match = @evaled_object.class.ancestors.any? {|e| e.to_s =~ @object_condition }) @list_prefix = @matched[1] + "." @input = @matched[3] @input.instance_variable_set("@object", @evaled_object) @input.instance_eval("def self.object; @object ; end") @action ||= lambda {|e| default_action(e.object) } else match = false end match end def eval_object(match) @matched = match @evaled_object = begin eval("#{match[1]}", eval_binding); rescue Exception; nil end end def default_action(obj) obj.methods.map {|e| e.to_s} - OPERATORS end def eval_binding @eval_binding ||= default_eval_binding end def default_eval_binding Object.const_defined?(:IRB) ? IRB.CurrentContext.workspace.binding : ::TOPLEVEL_BINDING end #:startdoc: end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
cldwalker-bond-0.1.1 | lib/bond/missions/object_mission.rb |
bond-0.1.1 | lib/bond/missions/object_mission.rb |