class Less::Node::Expression
Attributes
delimiter[RW]
parent[RW]
Public Class Methods
new(ary, parent = nil, delimiter = ' ')
click to toggle source
Calls superclass method
# File lib/less/engine/nodes/property.rb, line 136 def initialize ary, parent = nil, delimiter = ' ' self.parent = parent self.delimiter = delimiter # puts "new expression #{ary} |#{delimiter}|" super(ary.is_a?(Array) ? ary : [ary].flatten) end
Public Instance Methods
delimiter=(d)
click to toggle source
# File lib/less/engine/nodes/property.rb, line 158 def delimiter= d @delimiter = d.strip + ' ' end
entities()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 146 def entities; select {|i| i.kind_of? Entity } end
evaluate(env = nil)
click to toggle source
Evaluates the expression and instantiates a new Literal with the result ex: [#111, +, #111] will evaluate to a Color node, with value #222
# File lib/less/engine/nodes/property.rb, line 188 def evaluate env = nil # puts "expression #{self.inspect} env: #{env ? env.variables : "nil"}" if size > 2 or !terminal? # puts " SIZE > 2 or !terminal" # puts "--- sub evaluation ---" # Replace self with an evaluated sub-expression evaled = self.class.new(map {|e| e.respond_to?(:evaluate) ? e.evaluate(env) : e }, parent, delimiter) #5 # puts "======================" # puts "evaled => #{evaled.inspect}" unit = evaled.literals.map do |node| node.unit end.compact.uniq.tap do |ary| raise MixedUnitsError, evaled * ' ' if ary.size > 1 && !evaled.operators.empty? end.join entity = evaled.literals.find {|e| e.unit == unit } || evaled.literals.first || evaled.entities.first result = evaled.operators.empty?? evaled : eval(evaled.to_ruby.join) # puts "entity is a #{entity.class}" # puts "delimiter is |#{@delimiter}|" case result when Entity then result when Expression then result.one?? result.first : self.class.new(result, parent, delimiter) else entity.class.new(result, *(unit if entity.class == Node::Number)) end elsif size == 1 if first.is_a? Variable first.evaluate(env) elsif first.is_a? Function first.evaluate(env) else first end else self end end
expressions()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 143 def expressions; select {|i| i.kind_of? Expression } end
flatten()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 162 def flatten self end
inspect()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 154 def inspect '[' + map {|i| i.inspect }.join(', ') + ']' end
literals()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 147 def literals; select {|i| i.kind_of? Literal } end
operators()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 145 def operators; select {|i| i.is_a? Operator } end
parent=(obj)
click to toggle source
# File lib/less/engine/nodes/property.rb, line 149 def parent= obj @parent = obj each {|e| e.parent = obj if e.respond_to? :parent } end
terminal?()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 166 def terminal? expressions.empty? #&& variables.empty? end
to_css(env = nil)
click to toggle source
# File lib/less/engine/nodes/property.rb, line 170 def to_css env = nil # puts "TOCSS, delim: |#{@delimiter}|" map do |i| i.parent = self.parent i.respond_to?(:to_css) ? i.to_css() : i.to_s end * @delimiter end
to_ruby()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 178 def to_ruby map do |i| i.respond_to?(:to_ruby) ? i.to_ruby : i.to_s end end
variables()
click to toggle source
# File lib/less/engine/nodes/property.rb, line 144 def variables; select {|i| i.kind_of? Variable } end