Class: Sass::Script::StringInterpolation

Inherits:
Node
  • Object
show all
Defined in:
lib/sass/script/string_interpolation.rb

Overview

A SassScript object representing #{} interpolation within a string.

See Also:

Instance Attribute Summary

Attributes inherited from Node

#context, #line, #options

Instance Method Summary collapse

Methods inherited from Node

#dasherize, #perform

Constructor Details

#initialize(before, mid, after) ⇒ StringInterpolation

Interpolation in a string is of the form "before #{mid} after", where before and after may include more interpolation.

Parameters:

  • before (Node)

    The string before the interpolation

  • mid (Node)

    The SassScript within the interpolation

  • after (Node)

    The string after the interpolation



12
13
14
15
16
# File 'lib/sass/script/string_interpolation.rb', line 12

def initialize(before, mid, after)
  @before = before
  @mid = mid
  @after = after
end

Instance Method Details

#_perform(environment) ⇒ Sass::Script::String (protected)

Evaluates the interpolation.

Parameters:

  • environment (Sass::Environment)

    The environment in which to evaluate the SassScript

Returns:



68
69
70
71
72
73
74
75
76
# File 'lib/sass/script/string_interpolation.rb', line 68

def _perform(environment)
  res = ""
  before = @before.perform(environment)
  res << before.value
  mid = @mid.perform(environment)
  res << (mid.is_a?(Sass::Script::String) ? mid.value : mid.to_s)
  res << @after.perform(environment).value
  Sass::Script::String.new(res, before.type)
end

#childrenArray<Node>

Returns the three components of the interpolation, before, mid, and after.

Returns:

See Also:



58
59
60
# File 'lib/sass/script/string_interpolation.rb', line 58

def children
  [@before, @mid, @after].compact
end

#inspectString

Returns A human-readable s-expression representation of the interpolation.

Returns:

  • (String)

    A human-readable s-expression representation of the interpolation



19
20
21
# File 'lib/sass/script/string_interpolation.rb', line 19

def inspect
  "(string_interpolation #{@before.inspect} #{@mid.inspect} #{@after.inspect})"
end

#to_sass(opts = {})

See Also:



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/sass/script/string_interpolation.rb', line 24

def to_sass(opts = {})
  # We can get rid of all of this when we remove the deprecated :equals context
  before_unquote, before_quote_char, before_str = parse_str(@before.to_sass(opts))
  after_unquote, after_quote_char, after_str = parse_str(@after.to_sass(opts))
  unquote = before_unquote || after_unquote ||
    (before_quote_char && !after_quote_char && !after_str.empty?) ||
    (!before_quote_char && after_quote_char && !before_str.empty?)
  quote_char =
    if before_quote_char && after_quote_char && before_quote_char != after_quote_char
      before_str.gsub!("\\'", "'")
      before_str.gsub!('"', "\\\"")
      after_str.gsub!("\\'", "'")
      after_str.gsub!('"', "\\\"")
      '"'
    else
      before_quote_char || after_quote_char
    end

  res = ""
  res << 'unquote(' if unquote
  res << quote_char if quote_char
  res << before_str
  res << '#{' << @mid.to_sass(opts) << '}'
  res << after_str
  res << quote_char if quote_char
  res << ')' if unquote
  res
end