class Alfred::Handler::Autocomplete
Public Class Methods
new(alfred, opts = {})
click to toggle source
Calls superclass method
Alfred::Handler::Base::new
# File lib/alfred/handler/autocomplete.rb, line 8 def initialize(alfred, opts = {}) super @settings = { :handler => 'Autocomplete' , :items => {} , :fuzzy_score => 0.5 , }.update(opts) if @settings[:items].empty? @load_from_workflow_setting = true else @load_from_workflow_setting = false end end
Public Instance Methods
add_fuzzy_match_feedback(items, before, query, base_item, to_feedback)
click to toggle source
# File lib/alfred/handler/autocomplete.rb, line 51 def add_fuzzy_match_feedback(items, before, query, base_item, to_feedback) matcher = FuzzyMatch.new(items, :read => :complete) matcher.find_all_with_score(query).each do |item, dice_similar, leven_similar| next if item[:complete].size < query.size if (item[:complete].start_with?(query) or dice_similar > @settings[:fuzzy_score] or leven_similar > @settings[:fuzzy_score]) base_item[:autocomplete] = "#{(before + [item[:complete]]).join(' ')} " to_feedback.add_item(base_item.update(item)) end end end
on_feedback()
click to toggle source
# File lib/alfred/handler/autocomplete.rb, line 25 def on_feedback if @load_from_workflow_setting @settings[:items].merge! @core.workflow_setting[:autocomplete] end before, option, tail = @core.last_option base_item ={ :match? => :always_match? , :subtitle => "↩ to autocomplete" , :valid => 'no' , :icon => ::Alfred::Feedback.CoreServicesIcon('ForwardArrowIcon') , } if @settings[:items].has_key? tail unify_items(@settings[:items][tail]).each do |item| base_item[:autocomplete] = "#{(before + [tail, item[:complete]]).join(' ')} " feedback.add_item(base_item.update(item)) end else add_fuzzy_match_feedback(unify_items(@settings[:items][option]), before, tail, base_item, feedback) end end
unify_items(items)
click to toggle source
# File lib/alfred/handler/autocomplete.rb, line 66 def unify_items(items) return [] unless items items.map do |item| if item.is_a? String {:title => item, :complete => item} elsif item.is_a? Hash unless item.has_key? :complete item[:complete] = item[:title] end item else raise InvalidArgument, "autocomplete handler can only accept string or hash" end end end