機能 #1002 » 0002-.patch
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を文字列で得る。 |