happy_hash 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/happy_hash.rb +41 -0
  3. data/lib/string.rb +11 -0
  4. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7a703785de898829d8aa39c93529ccf381dc2a5c
4
+ data.tar.gz: ef388b2641fc073d5e0984b31a6c7eda86d023a1
5
+ SHA512:
6
+ metadata.gz: 9e13d67a22597204d80930ca557b750c55f1bf71fbfc92dce1cee6a7e7da4cbba86c63a48d08f54893a3f8560cbc37cb73f17aba9105b17f7947a72d55fd91a8
7
+ data.tar.gz: e0c278b9113dabe51681443c1defb49f5e5554cccfb5502f181948d9d09532217be6f54a06e0606179f2cc91524686f04661bdba12256c0e39d4fd99d0b5c3fc
data/lib/happy_hash.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'string'
2
+
3
+ class Hash
4
+
5
+ def happy_hash(down_case=false)
6
+ sym_keys(self, down_case)
7
+ end
8
+
9
+
10
+ def sym_keys(hash, down_case=false)
11
+ hash.inject({}) { |result, (key, value)|
12
+ new_key = case key
13
+ when String then (down_case ? key.downcase.to_sym : key.underscore.to_sym)
14
+ else key
15
+ end
16
+ new_value = case value
17
+ when Hash then sym_keys(value, down_case)
18
+ when Array then sym_array(value, down_case)
19
+ else value
20
+ end
21
+
22
+ result[new_key] = new_value
23
+
24
+ result
25
+ }
26
+ end
27
+
28
+ private
29
+ def sym_array(array, down_case=false)
30
+ array.map do |value|
31
+ case value
32
+ when Hash then sym_keys(value, down_case)
33
+ when Array then sym_array(value, down_case)
34
+ else
35
+ value
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+
data/lib/string.rb ADDED
@@ -0,0 +1,11 @@
1
+ class String
2
+ def underscore
3
+ self.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr("-", "_").
7
+ downcase
8
+ end
9
+ end
10
+
11
+
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: happy_hash
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ronnie Howell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: rhowell@tribune.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/string.rb
20
+ - lib/happy_hash.rb
21
+ homepage: http://rubygems.org/gems/happy_hash
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.1.11
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Make your hashes happy! Converts strings to symbols, even inside arrays inside
45
+ hashes. Optionally converts Uppercased strings to snake case
46
+ test_files: []