lib/csl/style/choose.rb in csl-1.0.0.pre22 vs lib/csl/style/choose.rb in csl-1.0.0.pre23
- old
+ new
@@ -11,34 +11,42 @@
class << self
def matches?(nodename)
nodename.to_s =~ /^if(-else)?|else$/
end
end
-
+
def conditions
attributes_for(*Schema.attr(:conditionals)).map do |name, values|
extract_type_and_matcher_from(name) << values.to_s.split(/\s+/)
end
end
- def matcher(match = nil)
- match ||= attributes[:match]
-
+ def matcher(match = attributes[:match])
case match
when 'any'
:any?
when 'none'
:none?
else
:all?
end
end
-
+
private
def extract_type_and_matcher_from(attribute)
type, match = attribute.to_s.split(/-(any|all|none)$/, 2)
- [type.to_sym, matcher(match)]
+
+ # subtle: if the default matcher is :none? and there
+ # is no override we to use :any? in the nested lists
+ # to avoid double negation during evaluation
+
+ if match.nil?
+ match = matcher
+ [type.to_sym, match == :none? ? :any? : matcher]
+ else
+ [type.to_sym, matcher(match)]
+ end
end
end
end
end
\ No newline at end of file