Class: SassC::Util::NormalizedMap
- Inherits:
-
Object
- Object
- SassC::Util::NormalizedMap
show all
- Defined in:
- lib/sassc/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
12
13
14
15
16
|
# File 'lib/sassc/util/normalized_map.rb', line 12
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
109
110
111
|
# File 'lib/sassc/util/normalized_map.rb', line 109
def method_missing(method, *args, &block)
@map.send(method, *args, &block)
end
|
Instance Method Details
#[](k) ⇒ Object
41
42
43
|
# File 'lib/sassc/util/normalized_map.rb', line 41
def [](k)
@map[normalize(k)]
end
|
#[]=(k, v) ⇒ Object
33
34
35
36
37
38
|
# File 'lib/sassc/util/normalized_map.rb', line 33
def []=(k, v)
normalized = normalize(k)
@map[normalized] = v
@key_strings[normalized] = k
v
end
|
#as_stored ⇒ Hash
Returns Hash with the keys as they were stored (before normalization).
58
59
60
|
# File 'lib/sassc/util/normalized_map.rb', line 58
def as_stored
SassC::Util.map_keys(@map) {|k| @key_strings[k]}
end
|
#delete(k) ⇒ Object
51
52
53
54
55
|
# File 'lib/sassc/util/normalized_map.rb', line 51
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.
28
29
30
|
# File 'lib/sassc/util/normalized_map.rb', line 28
def denormalize(key)
@key_strings[normalize(key)] || key
end
|
#dup ⇒ Object
94
95
96
97
98
|
# File 'lib/sassc/util/normalized_map.rb', line 94
def dup
d = super
d.send(:instance_variable_set, "@map", @map.dup)
d
end
|
#each ⇒ Object
74
75
76
|
# File 'lib/sassc/util/normalized_map.rb', line 74
def each
@map.each {|k, v| yield(k, v)}
end
|
#empty? ⇒ Boolean
62
63
64
|
# File 'lib/sassc/util/normalized_map.rb', line 62
def empty?
@map.empty?
end
|
#has_key?(k) ⇒ Boolean
46
47
48
|
# File 'lib/sassc/util/normalized_map.rb', line 46
def has_key?(k)
@map.has_key?(normalize(k))
end
|
#keys ⇒ Object
70
71
72
|
# File 'lib/sassc/util/normalized_map.rb', line 70
def keys
@map.keys
end
|
#map ⇒ Object
90
91
92
|
# File 'lib/sassc/util/normalized_map.rb', line 90
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 'lib/sassc/util/normalized_map.rb', line 20
def normalize(key)
key.tr("-", "_")
end
|
#respond_to_missing?(method, include_private = false) ⇒ Boolean
113
114
115
|
# File 'lib/sassc/util/normalized_map.rb', line 113
def respond_to_missing?(method, include_private = false)
@map.respond_to?(method, include_private)
end
|
#size ⇒ Object
78
79
80
|
# File 'lib/sassc/util/normalized_map.rb', line 78
def size
@map.size
end
|
#sort_by ⇒ Object
100
101
102
|
# File 'lib/sassc/util/normalized_map.rb', line 100
def sort_by
@map.sort_by {|k, v| yield k, v}
end
|
#to_a ⇒ Object
86
87
88
|
# File 'lib/sassc/util/normalized_map.rb', line 86
def to_a
@map.to_a
end
|
#to_hash ⇒ Object
82
83
84
|
# File 'lib/sassc/util/normalized_map.rb', line 82
def to_hash
@map.dup
end
|
#update(map) ⇒ Object
104
105
106
107
|
# File 'lib/sassc/util/normalized_map.rb', line 104
def update(map)
map = map.as_stored if map.is_a?(NormalizedMap)
map.each {|k, v| self[k] = v}
end
|
#values ⇒ Object
66
67
68
|
# File 'lib/sassc/util/normalized_map.rb', line 66
def values
@map.values
end
|