Class: Sass::Util::NormalizedMap

Inherits:
Object
  • Object
show all
Defined in:
.ruby-sass/lib/sass/util/normalized_map.rb

Overview

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.

Instance Method Summary (collapse)

Constructor Details

#initialize(map = nil) ⇒ NormalizedMap

Create a normalized map



10
11
12
13
14
15
# File '.ruby-sass/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

Constructor Details

#initialize(map = nil) ⇒ NormalizedMap

Create a normalized map



10
11
12
13
14
15
# File '.ruby-sass/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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



110
111
112
113
114
115
# File '.ruby-sass/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

Instance Method Details

#[](k) ⇒ Object



42
43
44
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 42

def [](k)
  @map[normalize(k)]
end

#[]=(k, v) ⇒ Object



34
35
36
37
38
39
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 34

def []=(k, v)
  normalized = normalize(k)
  @map[normalized] = v
  @key_strings[normalized] = k
  v
end

#as_storedHash

Returns Hash with the keys as they were stored (before normalization).

Returns:

  • (Hash)

    Hash with the keys as they were stored (before normalization).



59
60
61
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 59

def as_stored
  Sass::Util.map_keys(@map) {|k| @key_strings[k]}
end

#delete(k) ⇒ Object



52
53
54
55
56
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 52

def delete(k)
  normalized = normalize(k)
  @key_strings.delete(normalized)
  @map.delete(normalized)
end

#denormalize(key) ⇒ String

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.

Returns:

  • (String)


29
30
31
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 29

def denormalize(key)
  @key_strings[normalize(key)] || key
end

#dupObject



95
96
97
98
99
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 95

def dup
  d = super
  d.send(:instance_variable_set, "@map", @map.dup)
  d
end

#eachObject



75
76
77
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 75

def each
  @map.each {|k, v| yield(k, v)}
end

#empty?Boolean

Returns:

  • (Boolean)


63
64
65
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 63

def empty?
  @map.empty?
end

#has_key?(k) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 47

def has_key?(k)
  @map.has_key?(normalize(k))
end

#keysObject



71
72
73
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 71

def keys
  @map.keys
end

#mapObject



91
92
93
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 91

def map
  @map.map {|k, v| yield(k, v)}
end

#normalize(key) ⇒ Object

Specifies how to transform the key.

This can be overridden to create other normalization behaviors.



20
21
22
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 20

def normalize(key)
  key.tr("-", "_")
end

#respond_to_missing?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


117
118
119
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 117

def respond_to_missing?(method, include_private = false)
  @map.respond_to?(method, include_private)
end

#sizeObject



79
80
81
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 79

def size
  @map.size
end

#sort_byObject



101
102
103
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 101

def sort_by
  @map.sort_by {|k, v| yield k, v}
end

#to_aObject



87
88
89
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 87

def to_a
  @map.to_a
end

#to_hashObject



83
84
85
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 83

def to_hash
  @map.dup
end

#update(map) ⇒ Object



105
106
107
108
# File '.ruby-sass/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

#valuesObject



67
68
69
# File '.ruby-sass/lib/sass/util/normalized_map.rb', line 67

def values
  @map.values
end