Class Sass::Script::Operation
In: lib/sass/script/operation.rb
Parent: Node
Haml::Util Engine Color SyntaxError UnitConversionError StandardError AbstractSequence CommaSequence Sequence SimpleSequence Simple Parent Universal Class SelectorPseudoClass Id Pseudo Attribute Interpolation Element Node Operation Literal UnaryOperation StringInterpolation Funcall Interpolation Variable Lexer CssLexer Number Bool String Parser Parser CssParser EvaluationContext StaticParser SassParser CssParser Node DebugNode IfNode CommentNode ForNode PropNode MixinNode DirectiveNode ExtendNode VariableNode WarnNode RootNode WhileNode RuleNode MixinDefNode Enumerable ImportNode Merb::BootLoader MerbBootLoader Repl CSS Environment Rack StalenessChecker lib/sass/repl.rb lib/sass/css.rb lib/sass/environment.rb lib/sass/error.rb lib/sass/engine.rb lib/sass/selector/simple_sequence.rb lib/sass/selector/abstract_sequence.rb lib/sass/selector/sequence.rb lib/sass/selector/comma_sequence.rb lib/sass/selector/simple.rb lib/sass/selector.rb Selector lib/sass/script/css_parser.rb lib/sass/script/lexer.rb lib/sass/script/color.rb lib/sass/script/string.rb lib/sass/script/unary_operation.rb lib/sass/script/variable.rb lib/sass/script/funcall.rb lib/sass/script/string_interpolation.rb lib/sass/script/operation.rb lib/sass/script/bool.rb lib/sass/script/parser.rb lib/sass/script/literal.rb lib/sass/script/node.rb lib/sass/script/interpolation.rb lib/sass/script/css_lexer.rb lib/sass/script/number.rb lib/sass/script/functions.rb Functions Script lib/sass/scss/sass_parser.rb lib/sass/scss/static_parser.rb lib/sass/scss/parser.rb lib/sass/scss/css_parser.rb ScriptLexer ScriptParser RX SCSS Files Callbacks lib/sass/tree/while_node.rb lib/sass/tree/if_node.rb lib/sass/tree/mixin_def_node.rb lib/sass/tree/debug_node.rb lib/sass/tree/root_node.rb lib/sass/tree/for_node.rb lib/sass/tree/import_node.rb lib/sass/tree/prop_node.rb lib/sass/tree/node.rb lib/sass/tree/comment_node.rb lib/sass/tree/extend_node.rb lib/sass/tree/mixin_node.rb lib/sass/tree/warn_node.rb lib/sass/tree/directive_node.rb lib/sass/tree/rule_node.rb lib/sass/tree/variable_node.rb Tree lib/sass/plugin/rack.rb lib/sass/plugin/staleness_checker.rb lib/sass/plugin/merb.rb Plugin Sass dot/m_85_0.png

A SassScript parse node representing a binary operation, such as `$a + $b` or `"foo" + 1`.

Methods

Attributes

operand1  [R] 
operand2  [R] 
operator  [R] 

Public Class methods

@param operand1 [Script::Node] The parse-tree node

  for the right-hand side of the operator

@param operand2 [Script::Node] The parse-tree node

  for the left-hand side of the operator

@param operator [Symbol] The operator to perform.

  This should be one of the binary operator names in {Lexer::OPERATORS}

[Source]

    # File lib/sass/script/operation.rb, line 24
24:     def initialize(operand1, operand2, operator)
25:       @operand1 = operand1
26:       @operand2 = operand2
27:       @operator = operator
28:       super()
29:     end

Public Instance methods

Returns the operands for this operation.

@return [Array<Node>] @see Node#children

[Source]

    # File lib/sass/script/operation.rb, line 54
54:     def children
55:       [@operand1, @operand2]
56:     end

@return [String] A human-readable s-expression representation of the operation

[Source]

    # File lib/sass/script/operation.rb, line 32
32:     def inspect
33:       "(#{@operator.inspect} #{@operand1.inspect} #{@operand2.inspect})"
34:     end

@see Node#to_sass

[Source]

    # File lib/sass/script/operation.rb, line 37
37:     def to_sass(opts = {})
38:       pred = Sass::Script::Parser.precedence_of(@operator)
39:       o1 = operand_to_sass pred, @operand1, opts
40:       o2 = operand_to_sass pred, @operand2, opts
41:       sep =
42:         case @operator
43:         when :comma; ", "
44:         when :concat; " "
45:         else; " #{Lexer::OPERATORS_REVERSE[@operator]} "
46:         end
47:       "#{o1}#{sep}#{o2}"
48:     end

Protected Instance methods

Evaluates the operation.

@param environment [Sass::Environment] The environment in which to evaluate the SassScript @return [Literal] The SassScript object that is the value of the operation @raise [Sass::SyntaxError] if the operation is undefined for the operands

[Source]

    # File lib/sass/script/operation.rb, line 65
65:     def _perform(environment)
66:       literal1 = @operand1.perform(environment)
67:       literal2 = @operand2.perform(environment)
68: 
69:       if @operator == :concat && context == :equals
70:         literal1 = Sass::Script::String.new(literal1.value) if literal1.is_a?(Sass::Script::String)
71:         literal2 = Sass::Script::String.new(literal2.value) if literal2.is_a?(Sass::Script::String)
72:       end
73: 
74:       begin
75:         res = literal1.send(@operator, literal2)
76:         res.options = environment.options
77:         res
78:       rescue NoMethodError => e
79:         raise e unless e.name.to_s == @operator.to_s
80:         raise Sass::SyntaxError.new("Undefined operation: \"#{literal1} #{@operator} #{literal2}\".")
81:       end
82:     end

Private Instance methods

[Source]

    # File lib/sass/script/operation.rb, line 86
86:     def operand_to_sass(pred, op, opts = {})
87:       return "(#{op.to_sass(opts)})" if op.is_a?(Operation) &&
88:         Sass::Script::Parser.precedence_of(op.operator) < pred
89:       op.to_sass(opts)
90:     end

[Validate]