class CSL::Style::Choose::Block

Attributes

conditionals[R]

Public Class Methods

matches?(nodename) click to toggle source
# File lib/csl/style/choose.rb, line 14
def matches?(nodename)
  nodename === ':if' || nodename === ':elseif' || nodename === ':else'
end

Public Instance Methods

conditions() click to toggle source
# File lib/csl/style/choose.rb, line 19
def conditions
  attributes_for(*Schema.attr(:conditionals)).map do |name, values|
    extract_type_and_matcher_from(name) << values.to_s.split(/\s+/)
  end
end
matcher(match = attributes[:match]) click to toggle source
# File lib/csl/style/choose.rb, line 25
def matcher(match = attributes[:match])
  case match.to_s
  when 'any'
    :any?
  when 'none'
    :none?
  else
    :all?
  end
end

Private Instance Methods

extract_type_and_matcher_from(attribute) click to toggle source
# File lib/csl/style/choose.rb, line 38
def extract_type_and_matcher_from(attribute)
  type, match = attribute.to_s.split(/-(any|all|none)$/, 2)

  # subtle: if the default matcher is :none? and there
  # is no override we want to use :any? inside the nested
  # lists to avoid double negation during evaluation of
  # the entire expression!

  if match.nil?
    match = matcher
    [type.to_sym, match == :none? ? :any? : matcher]
  else
    [type.to_sym, matcher(match)]
  end
end