angry_hash 0.2.1 → 0.2.2

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.
data/Changelog.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## 0.2.2
2
+
3
+ Changes:
4
+ - `#to_normal_hash` can now return a hash with symbol keys. The default is still to use string keys as is default within `AngryHash`.
5
+
6
+ ## 0.2.1
7
+
8
+ Changes:
9
+
10
+ - In `#merge` & friends `other` hash is now converted to an AngryHash before conversion.
11
+ This ensures subhashes in `other` but not `this` end up as AngryHashes in `this` after merging.
12
+
1
13
  ## 0.2.0
2
14
 
3
15
  Features:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/angry_hash.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{angry_hash}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Lachie Cox"]
12
- s.date = %q{2010-08-28}
12
+ s.date = %q{2010-08-30}
13
13
  s.description = %q{A stabler mash with different emphases. Used in plus2 projects AngryMob and Igor.}
14
14
  s.email = %q{lachie@plus2.com.au}
15
15
  s.extra_rdoc_files = [
@@ -41,7 +41,8 @@ Gem::Specification.new do |s|
41
41
  "examples/dup_eg.rb",
42
42
  "examples/eg_helper.rb",
43
43
  "examples/extension_tracking.rb",
44
- "examples/merge_eg.rb"
44
+ "examples/merge_eg.rb",
45
+ "examples/normal_hash.eg.rb"
45
46
  ]
46
47
 
47
48
  if s.respond_to? :specification_version then
@@ -0,0 +1,11 @@
1
+ require 'eg_helper'
2
+
3
+ eg 'to normal hash' do
4
+ ah = AngryHash[:a => 1, :b => {:c => :d}]
5
+ Assert( ah.to_normal_hash == {'a' => 1, 'b' => {'c' => :d}} )
6
+ end
7
+
8
+ eg 'to normal hash with symbol keys' do
9
+ ah = AngryHash[:a => 1, :b => {'c' => :d}]
10
+ Assert( ah.to_normal_hash(:symbols) == {:a => 1, :b => {:c => :d}} )
11
+ end
data/lib/angry_hash.rb CHANGED
@@ -99,24 +99,33 @@ class AngryHash < Hash
99
99
  self
100
100
  end
101
101
 
102
- def to_normal_hash
103
- __to_hash(self)
102
+ def to_normal_hash(keys=nil)
103
+ __to_hash(self,keys)
104
104
  end
105
- def __to_hash(value,cycle_guard={})
105
+
106
+ def __to_hash(value,keys,cycle_guard={})
106
107
  return cycle_guard[value.hash] if cycle_guard.key?(value.hash)
107
108
 
108
109
  case value
109
110
  when Hash
110
111
  new_hash = cycle_guard[value.hash] = {}
111
112
 
112
- value.inject(new_hash) do |hash,(k,v)|
113
- hash[k] = __to_hash(v,cycle_guard)
114
- hash
113
+ if keys == :symbols
114
+ # TODO DRY
115
+ value.inject(new_hash) do |hash,(k,v)|
116
+ hash[k.to_sym] = __to_hash(v,keys,cycle_guard)
117
+ hash
118
+ end
119
+ else
120
+ value.inject(new_hash) do |hash,(k,v)|
121
+ hash[k] = __to_hash(v,keys,cycle_guard)
122
+ hash
123
+ end
115
124
  end
116
125
  when Array
117
126
  new_array = cycle_guard[value.hash] = []
118
127
 
119
- value.each {|v| new_array << __to_hash(v,cycle_guard)}
128
+ value.each {|v| new_array << __to_hash(v,keys,cycle_guard)}
120
129
  else
121
130
  value
122
131
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lachie Cox
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-28 00:00:00 +10:00
17
+ date: 2010-08-30 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -79,3 +79,4 @@ test_files:
79
79
  - examples/eg_helper.rb
80
80
  - examples/extension_tracking.rb
81
81
  - examples/merge_eg.rb
82
+ - examples/normal_hash.eg.rb