hash_magick 0.0.0

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/hash_magick.rb +107 -0
  3. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 65190ab03f5ae6811390b4d77ea32073a7d12a3e
4
+ data.tar.gz: 113eab34380af3d6a93105d577c5deec339a76b0
5
+ SHA512:
6
+ metadata.gz: 4c3d35b6325bbc40e086f5179aa9c8aafcdb6e7fbb6cd456359895fef9957b0fdb82c0cdce3d8346f183077c03e9d7f1ae06454b0c20e71621b9d8b5179433c7
7
+ data.tar.gz: d2d3325e007f4346b9cb2b2ad3d4f61ef5dd4c2c5082e21ef4b863dd353ad607f1a863d82b3b9aa297c29590021bd3cb62f53988b98a8d6aeea5d9d8ef5cdbf1
@@ -0,0 +1,107 @@
1
+ class HashMagick
2
+ def self.welcome
3
+ puts "Welcome to HashMagick."
4
+ puts "Warning: Test. Do not use. Probably flammable."
5
+ end
6
+
7
+ def nestle_array(array,nested)
8
+ array.each do |line|
9
+ merge_to_category_hash(line,nested)
10
+ end
11
+ nested
12
+ end
13
+
14
+ def merge_to_category_hash(line,nested)
15
+ categories = line.split(/\s?:\s?/)
16
+ to_merge = {}
17
+ #puts "#{line}"
18
+ categories.each_with_index do |category, i|
19
+ target_key = categories[i]
20
+ new_value = categories[i+1] ? categories[i+1] : 0
21
+
22
+ deep_merge_add(nested, target_key, new_value)
23
+ end
24
+ end
25
+
26
+ def deep_merge_add(nested,target_k,new_v,top=true) #this is used build a nested hash from scratch, using an array
27
+ if target_k == "PomParsley"
28
+ #puts "#{target_k} => #{new_v} MERGES INTO #{nested}"
29
+ end
30
+
31
+ if target_k == "PomParsley" and nested == {"Blender Class"=>0, "Corgi"=>0}
32
+ #puts "YOU FOUND ME! I'm about to do a very bad THING!"
33
+ # only merge if it's at the top level!!!
34
+ end
35
+ new_v = {new_v => 0} if new_v.class == String
36
+ if hash_has_key?(nested,target_k)
37
+ #puts "I have the key!"
38
+ if nested.keys.include?(target_k)
39
+ if nested[target_k].class == Hash
40
+ nested[target_k].merge!(new_v)
41
+ else
42
+ nested[target_k] = new_v
43
+ end
44
+ else
45
+ nested.each do |k,v|
46
+ deep_merge_add(v,target_k,new_v,false) if v.class == Hash
47
+ end
48
+ end
49
+ else
50
+
51
+ if top
52
+ #puts "I don't have the key and IMA MERGE ANYWAY!"
53
+ nested.merge!({target_k => new_v})
54
+ end
55
+ end
56
+ # if target_k == "PomParsley"
57
+ # puts "!! #{target_k} => #{new_v} NOW IN #{nested}"
58
+ # end
59
+ end
60
+
61
+ def hash_has_key?(hash,key)
62
+ if hash.keys.include?(key)
63
+ return true
64
+ else
65
+ hash.each do |k,v|
66
+ return hash_has_key?(v,key) if v.class == Hash
67
+ end
68
+ end
69
+ false
70
+ end
71
+
72
+ def nestle_flat_hash(flat,nested)
73
+ flat.each { |k,v| merge_at_key(nested,k,v) }
74
+ return nested
75
+ end
76
+
77
+ def merge_at_key(nested,target_k,new_v) #this is for restructuring a flat hash to nested
78
+ if hash_has_key?(nested,target_k)
79
+ if nested.keys.include?(target_k)
80
+ if nested[target_k].class != Hash
81
+ nested.merge!({target_k => new_v}) { |k,v1,v2| v1+v2 }
82
+ else #if v is hash, it means the key has children, so add a "Misc" category for top-level category activity
83
+
84
+ # NOTE: commented code erroneously subtracts value
85
+
86
+ # extant_values = nested[target_k].values.inject(:+)
87
+ # nested[target_k].merge!({"Misc" => new_v-extant_values}) { |k,v1,v2| v1+v2 }
88
+
89
+ nested[target_k].merge!({"Misc" => new_v}) { |k,v1,v2| v1+v2 }
90
+
91
+
92
+ end
93
+ else
94
+ nested.each do |k,v|
95
+ merge_at_key(v,target_k,new_v) if v.class == Hash
96
+ end
97
+ end
98
+ else
99
+ nested.merge!({target_k => new_v})
100
+ end
101
+ end
102
+
103
+ def add_to_key(target_hash,target_key,value) #could refactor with *target_hashes
104
+ target_hash.merge!({ target_key => value }) { |k, old_v, new_v| old_v + new_v }
105
+ end
106
+
107
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash_magick
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - George A. Michel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: For nesting flat hashes, etcetera.
14
+ email: sarumonakuba@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/hash_magick.rb
20
+ homepage: http://rubygems.org/gems/hash_magick
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.0.3
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Hash Magick!
44
+ test_files: []
45
+ has_rdoc: