# class Sass::Util::NormalizedMap

A hash that normalizes its string keys while still allowing you to get back to the original keys that were stored. If several different values normalize to the same value, whichever is stored last wins.

### Public Class Methods

new(map = nil) click to toggle source

Create a normalized map

    # File lib/sass/util/normalized_map.rb, line 10
    def initialize(map = nil)
      @key_strings = {}
      @map = {}

      map.each {|key, value| self[key] = value} if map
    end

### Public Instance Methods

[](k) click to toggle source

@private

    # File lib/sass/util/normalized_map.rb, line 42
    def [](k)
      @map[normalize(k)]
    end

[]=(k, v) click to toggle source

@private

    # File lib/sass/util/normalized_map.rb, line 34
    def []=(k, v)
      normalized = normalize(k)
      @map[normalized] = v
      @key_strings[normalized] = k
      v
    end

as_stored() click to toggle source

@return [Hash] Hash with the keys as they were stored (before normalization).

    # File lib/sass/util/normalized_map.rb, line 59
    def as_stored
      Sass::Util.map_keys(@map) {|k| @key_strings[k]}
    end

delete(k) click to toggle source

@private

    # File lib/sass/util/normalized_map.rb, line 52
    def delete(k)
      normalized = normalize(k)
      @key_strings.delete(normalized)
      @map.delete(normalized)
    end

denormalize(key) click to toggle source

Returns the version of `key` as it was stored before normalization. If `key` isn't in the map, returns it as it was passed in.

@return [String]

    # File lib/sass/util/normalized_map.rb, line 29
    def denormalize(key)
      @key_strings[normalize(key)] || key
    end

dup() click to toggle source
Calls superclass method

    # File lib/sass/util/normalized_map.rb, line 95
    def dup
      d = super
      d.send(:instance_variable_set, "@map", @map.dup)
      d
    end

each() { |k, v| ... } click to toggle source

    # File lib/sass/util/normalized_map.rb, line 75
    def each
      @map.each {|k, v| yield(k, v)}
    end

empty?() click to toggle source

    # File lib/sass/util/normalized_map.rb, line 63
    def empty?
      @map.empty?
    end

has_key?(k) click to toggle source

@private

    # File lib/sass/util/normalized_map.rb, line 47
    def has_key?(k)
      @map.has_key?(normalize(k))
    end

keys() click to toggle source

    # File lib/sass/util/normalized_map.rb, line 71
    def keys
      @map.keys
    end

map() { |k, v| ... } click to toggle source

    # File lib/sass/util/normalized_map.rb, line 91
    def map
      @map.map {|k, v| yield(k, v)}
    end

method_missing(method, *args, &block) click to toggle source

    # File lib/sass/util/normalized_map.rb, line 110
    def method_missing(method, *args, &block)
      if Sass.tests_running
        raise ArgumentError.new("The method #{method} must be implemented explicitly")
      end
      @map.send(method, *args, &block)
    end

normalize(key) click to toggle source

Specifies how to transform the key.

This can be overridden to create other normalization behaviors.

    # File lib/sass/util/normalized_map.rb, line 20
    def normalize(key)
      key.tr("-", "_")
    end

respond_to_missing?(method, include_private = false) click to toggle source

    # File lib/sass/util/normalized_map.rb, line 117
    def respond_to_missing?(method, include_private = false)
      @map.respond_to?(method, include_private)
    end

size() click to toggle source

    # File lib/sass/util/normalized_map.rb, line 79
    def size
      @map.size
    end

sort_by() { |k, v| ... } click to toggle source

    # File lib/sass/util/normalized_map.rb, line 101
    def sort_by
      @map.sort_by {|k, v| yield k, v}
    end

to_a() click to toggle source

    # File lib/sass/util/normalized_map.rb, line 87
    def to_a
      @map.to_a
    end

to_hash() click to toggle source

    # File lib/sass/util/normalized_map.rb, line 83
    def to_hash
      @map.dup
    end

update(map) click to toggle source

    # File lib/sass/util/normalized_map.rb, line 105
    def update(map)
      map = map.as_stored if map.is_a?(NormalizedMap)
      map.each {|k, v| self[k] = v}
    end

values() click to toggle source

    # File lib/sass/util/normalized_map.rb, line 67
    def values
      @map.values
    end