class Sass::Script::Tree::MapLiteral

A class representing a map literal. When resolved, this returns a {Sass::Script::Node::Map}.

Attributes

pairs[R]

The key/value pairs that make up this map node. This isn’t a Hash so that we can detect key collisions once all the keys have been performed.

@return [Array<(Node, Node)>]

Public Class Methods

new(pairs) click to toggle source

Creates a new map literal.

@param pairs [Array<(Node, Node)>] See {#pairs}

# File lib/sass/script/tree/map_literal.rb, line 14
def initialize(pairs)
  @pairs = pairs
end

Public Instance Methods

children() click to toggle source

@see Node#children

# File lib/sass/script/tree/map_literal.rb, line 19
def children
  @pairs.flatten
end
deep_copy() click to toggle source

@see Node#deep_copy

# File lib/sass/script/tree/map_literal.rb, line 40
def deep_copy
  node = dup
  node.instance_variable_set('@pairs',
    pairs.map {|(k, v)| [k.deep_copy, v.deep_copy]})
  node
end
inspect(opts = {})
Alias for: to_sass
to_sass(opts = {}) click to toggle source

@see Node#to_sass

# File lib/sass/script/tree/map_literal.rb, line 24
def to_sass(opts = {})
  return "()" if pairs.empty?

  to_sass = lambda do |value|
    if value.is_a?(ListLiteral) && value.separator == :comma
      "(#{value.to_sass(opts)})"
    else
      value.to_sass(opts)
    end
  end

  "(" + pairs.map {|(k, v)| "#{to_sass[k]}: #{to_sass[v]}"}.join(', ') + ")"
end
Also aliased as: inspect

Protected Instance Methods

_perform(environment) click to toggle source

@see Node#_perform

# File lib/sass/script/tree/map_literal.rb, line 50
def _perform(environment)
  keys = Set.new
  map = Sass::Script::Value::Map.new(Hash[pairs.map do |(k, v)|
    k, v = k.perform(environment), v.perform(environment)
    if keys.include?(k)
      raise Sass::SyntaxError.new("Duplicate key #{k.inspect} in map #{to_sass}.")
    end
    keys << k
    [k, v]
  end])
  map.options = options
  map
end