プロジェクト

全般

プロフィール

機能 #1002 » 0002-.patch

Satoshi Okuno, 2017-03-26 12:58

差分を表示:

core/plugin/intent_selector/intent_selector.rb
31 31
  # [uri:] 開くURI。 _model:_ を渡している場合は、省略してもよい
32 32
  def intent_open(intents, model: nil, uri: model.uri)
33 33
    recommended, suggested = divide_intents(intents, uri, specified_model_slug(model))
34
    if recommended.size == 1
34
    if recommended.size >= 1
35 35
      Plugin::Intent::IntentToken.open(
36 36
        uri: uri,
37 37
        model: model,
......
119 119
  # ==== Return
120 120
  # 条件に対して推奨されるintentの配列と、intentsに指定されたそれ以外の値の配列
121 121
  def divide_intents(intents, uri, model_slug)
122
    intent_slugs = UserConfig[:intent_selector_rules].select{|record|
122
    # モデル + URL(URLマッチ文字列が長い順)
123
    intent_slugs_with_model = UserConfig[:intent_selector_rules].select{|record|
123 124
      model_slug == record[:model].to_s && uri.to_s.start_with?(record[:str])
124
    }.map{|record|
125
      record[:intent].to_sym
126
    }
127
    intents.partition{|intent| intent_slugs.include?(intent.slug) }
125
    }.sort {|a, b| a[:str].length <=> b[:str.length] }.reverse
126

  
127
    # URLのみ(URLマッチ文字列が長い順)
128
    intens_slugs_without_model = UserConfig[:intent_selector_rules].select{|record|
129
      record[:model] == nil && uri.to_s.start_with?(record[:str])
130
    }.sort {|a, b| a[:str].length <=> b[:str.length] }.reverse
131

  
132
    intent_slugs = (intent_slugs_with_model + intens_slugs_without_model).map { |record| record[:intent] }
133

  
134
    intents.partition{|intent| intent_slugs.include?(intent.slug.to_sym) }
128 135
  end
129 136

  
130 137
  # _model_ のmodel slugを文字列で得る。
(2-2/2)