Sha256: 36fc5f514e60434cd68c65f682f19bd82b39bc47dc582ec25bffb12cc0097758
Contents?: true
Size: 1.57 KB
Versions: 2
Compression:
Stored size: 1.57 KB
Contents
# A mission which completes an object's methods. For this mission to match, # the condition must match and the current object must have an ancestor that matches :object. # Note: To access to the current object being completed on within an action, use the input's # object attribute. # # ==== Bond.complete Options: # [*:object*] String representing a module/class of object whose methods are completed. # [*:action*] If an action is not specified, the default action is to complete an object's # non-operator methods. # # ===== Example: # Bond.complete(:object=>ActiveRecord::Base) {|input| input.object.class.instance_methods(false) } class Bond::ObjectMission < Bond::Mission #:stopdoc: OBJECTS = %w<\S+> + Bond::Mission::OBJECTS CONDITION = '(OBJECTS)\.(\w*(?:\?|!)?)$' def initialize(options={}) @object_condition = /^#{options[:object]}$/ options[:on] ||= Regexp.new condition_with_objects super end def unique_id "#{@object_condition.inspect}+#{@on.inspect}" end def do_match(input) super && eval_object(@matched[1]) && @evaled_object.class.respond_to?(:ancestors) && @evaled_object.class.ancestors.any? {|e| e.to_s =~ @object_condition } end def after_match(input) @completion_prefix = @matched[1] + "." @action ||= lambda {|e| default_action(e.object) } create_input @matched[2], :object=>@evaled_object end def default_action(obj) obj.methods.map {|e| e.to_s} - OPERATORS end def match_message "Matches completion for object with ancestor matching #{@object_condition.inspect}." end #:startdoc: end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
bond-0.2.1 | lib/bond/missions/object_mission.rb |
bond-0.2.0 | lib/bond/missions/object_mission.rb |