Class: StringifyHash
- Inherits:
-
Hash
- Object
- Hash
- StringifyHash
- Defined in:
- lib/stringify-hash.rb,
lib/stringify-hash/version.rb
Overview
and recursively merges hashes
Defined Under Namespace
Modules: Version
Constant Summary collapse
- DIV =
The dividor between elements when StringifyHash is dumped
' '- EOL =
The end of line when dumping
"\n"
Instance Method Summary collapse
-
#[](k) ⇒ nil, Object
Get value for given key, search for both k as String and k as Symbol, if not present return nil.
-
#[]=(k, v) ⇒ Object
Set Symbol key to Object value.
-
#as_coll(opening, closing, in_lvl, in_inc, &block) ⇒ Object
Helper for formatting collections Computes the indentation level for elements of the collection Yields indentation to block to so the caller can create map of element strings Places delimiters in the correct location Joins everything with correct EOL.
-
#delete(k) ⇒ Object?
Determine key=>value entry in StringifyHash, remove both value at String key and value at Symbol key.
-
#dump ⇒ String
Pretty print the options as JSON.
-
#fmt_assoc(coll, in_lvl = 0, in_inc = DIV) ⇒ String
Pretty prints an associative collection.
-
#fmt_basic(value) ⇒ String
Pretty prints primitive JSON values.
-
#fmt_collection(collection, in_lvl = 0, in_inc = DIV) ⇒ String
Pretty prints a collection.
-
#fmt_list(coll, in_lvl = 0, in_inc = DIV) ⇒ String
Pretty prints a list collection.
-
#fmt_value(value, in_lvl = 0, in_inc = DIV) ⇒ Object
Chooses between collection and primitive formatting.
-
#has_key?(k) ⇒ Boolean
Determine if key is stored in ObjectHash.
-
#merge(hash) ⇒ StringifyHash
Create new StringifyHash from recursively merged self with an OptionsHash or Hash.
-
#merge!(hash) ⇒ StringifyHash
Recursively merge self with an StringifyHash or Hash.
-
#rmerge(base, hash) ⇒ StringifyHash
Recursively merge and StringifyHash with an OptionsHash or Hash.
Instance Method Details
#[](k) ⇒ nil, Object
Get value for given key, search for both k as String and k as Symbol, if not present return nil
24 25 26 |
# File 'lib/stringify-hash.rb', line 24 def [] k super(k.to_s) || super(k.to_sym) end |
#[]=(k, v) ⇒ Object
Set Symbol key to Object value
37 38 39 |
# File 'lib/stringify-hash.rb', line 37 def []=k,v super(k.to_sym, v) end |
#as_coll(opening, closing, in_lvl, in_inc, &block) ⇒ Object
Helper for formatting collections Computes the indentation level for elements of the collection Yields indentation to block to so the caller can create map of element strings Places delimiters in the correct location Joins everything with correct EOL
!@visibility private
146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/stringify-hash.rb', line 146 def as_coll( opening, closing, in_lvl, in_inc, &block ) delim_indent = in_inc * in_lvl elem_indent = in_inc * (in_lvl + 1) open_brace = opening close_brace = delim_indent + closing fmtd_coll = block.call( elem_indent ) str_coll = fmtd_coll.join( ',' + EOL ) return open_brace + EOL + str_coll + EOL + close_brace end |
#delete(k) ⇒ Object?
Determine key=>value entry in StringifyHash, remove both value at String key and value at Symbol key
deletes both k as String and k as Symbol
nil if no Object deleted
66 67 68 |
# File 'lib/stringify-hash.rb', line 66 def delete k super(k.to_s) || super(k.to_sym) end |
#dump ⇒ String
Pretty print the options as JSON
296 297 298 |
# File 'lib/stringify-hash.rb', line 296 def dump fmt_collection( self, 0, DIV ) end |
#fmt_assoc(coll, in_lvl = 0, in_inc = DIV) ⇒ String
Pretty prints an associative collection
203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/stringify-hash.rb', line 203 def fmt_assoc( coll, in_lvl = 0, in_inc = DIV ) if coll.empty? return '{}' else as_coll '{', '}', in_lvl, in_inc do |elem_indent| coll.map do |key, value| assoc_line = elem_indent + '"' + key.to_s + '"' + ': ' assoc_line += fmt_value( value, in_lvl, in_inc ) end end end end |
#fmt_basic(value) ⇒ String
Pretty prints primitive JSON values
275 276 277 278 279 280 281 |
# File 'lib/stringify-hash.rb', line 275 def fmt_basic( value ) case value when Numeric, TrueClass, FalseClass then value.to_s when NilClass then "null" else "\"#{value}\"" end end |
#fmt_collection(collection, in_lvl = 0, in_inc = DIV) ⇒ String
Pretty prints a collection
178 179 180 181 182 183 184 185 186 |
# File 'lib/stringify-hash.rb', line 178 def fmt_collection( collection, in_lvl = 0, in_inc = DIV ) if collection.respond_to? :each_pair string = fmt_assoc( collection, in_lvl, in_inc ) else string = fmt_list( collection, in_lvl, in_inc ) end return string end |
#fmt_list(coll, in_lvl = 0, in_inc = DIV) ⇒ String
Pretty prints a list collection
231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/stringify-hash.rb', line 231 def fmt_list( coll, in_lvl = 0, in_inc = DIV ) if coll.empty? return '[]' else as_coll '[', ']', in_lvl, in_inc do |indent| coll.map do |el| indent + fmt_value( el, in_lvl, in_inc ) end end end end |
#fmt_value(value, in_lvl = 0, in_inc = DIV) ⇒ Object
Chooses between collection and primitive formatting
!@visibility private
246 247 248 249 250 251 252 |
# File 'lib/stringify-hash.rb', line 246 def fmt_value( value, in_lvl = 0, in_inc = DIV ) if value.kind_of? Enumerable and not value.is_a? String fmt_collection( value, in_lvl + 1, in_inc ) else fmt_basic( value ) end end |
#has_key?(k) ⇒ Boolean
Determine if key is stored in ObjectHash
50 51 52 |
# File 'lib/stringify-hash.rb', line 50 def has_key? k super(k.to_s) || super(k.to_sym) end |
#merge(hash) ⇒ StringifyHash
Create new StringifyHash from recursively merged self with an OptionsHash or Hash
113 114 115 116 117 |
# File 'lib/stringify-hash.rb', line 113 def merge hash #make a deep copy into an empty hash object merged_hash = rmerge(StringifyHash.new, self) rmerge(merged_hash, hash) end |
#merge!(hash) ⇒ StringifyHash
Recursively merge self with an StringifyHash or Hash
133 134 135 |
# File 'lib/stringify-hash.rb', line 133 def merge! hash rmerge(self, hash) end |
#rmerge(base, hash) ⇒ StringifyHash
Recursively merge and StringifyHash with an OptionsHash or Hash
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/stringify-hash.rb', line 85 def rmerge base, hash return base unless hash.is_a?(Hash) || hash.is_a?(StringifyHash) hash.each do |key, v| if (base[key].is_a?(Hash) || base[key].is_a?(StringifyHash)) && (hash[key].is_a?(Hash) || hash[key].is_a?(OptionsHash)) rmerge(base[key], hash[key]) elsif hash[key].is_a?(Hash) base[key] = StringifyHash.new.merge(hash[key]) else base[key]= hash[key] end end base end |