blob: 039a8c01a2d5bdbd8697474b46abf94a7d536662 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# -*- coding: utf-8 -*-
module Plugin::Spell
Spell = Struct.new(:name, :constraint, :condition, :proc) do
def match(models, optional)
Set.new(constraint.map{|a| Diva::Model(a) }) == Set.new(models.map{|a| a.class }) and condition?(models)
end
def call(models, optional)
order = constraint.map{|a| Diva::Model(a) }
proc.call(*models.sort_by{|m| order.index(m.class) }, optional)
end
def condition?(models, optional)
if condition
order = constraint.map{|a| Diva::Model(a) }
condition.call(*models.sort_by{|m| order.index(m.class) }, optional)
else
true
end
end
end
end
|