angry_hash 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
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.0.4"
8
+ s.version = "0.0.5"
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-05-19}
12
+ s.date = %q{2010-06-02}
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.files = [
data/examples/dup_eg.rb CHANGED
@@ -66,3 +66,23 @@ eg 'duping copies symbols' do
66
66
  Assert( ! ah2.database.isg_sandbox_v5.server.nil? )
67
67
  Assert( ah2.database.isg_sandbox_v5.server == @original['database']['isg_sandbox_v5']['server'] )
68
68
  end
69
+
70
+ module Extendo
71
+ def as_dag
72
+ dag = dup
73
+ dag
74
+ end
75
+ end
76
+
77
+ eg 'duping from ext' do
78
+ ah = AngryHash[ @original ]
79
+ ah.extend(Extendo)
80
+
81
+ ah2 = ah.as_dag
82
+
83
+ Show( AngryHash.shooper )
84
+ Show( ah.__id__ )
85
+ Show( ah2.__id__ )
86
+
87
+ Show( ah2 )
88
+ end
data/lib/angry_hash.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  class AngryHash < Hash
2
+ def self.shooper
3
+ "mooper"
4
+ end
2
5
 
3
6
  def self.[](other)
4
7
  super(__convert(other))
@@ -164,54 +167,38 @@ class AngryHash < Hash
164
167
 
165
168
 
166
169
  # duplicating convert
167
- def self.__convert(hash,cycle_watch={})
170
+ def self.__convert(hash,cycle_watch=[])
168
171
  new_hash = hash.inject(AngryHash.new) do |hash,(k,v)|
169
172
  hash.regular_writer( __convert_key(k), __convert_value(v,cycle_watch) )
170
173
  hash
171
174
  end
172
175
 
173
- #puts "re-extend? #{AngryHash === hash} #{hash.__extending_modules.inspect if (AngryHash === hash)}"
174
- #if AngryHash === hash && hash.__extended?
175
- #puts "rex"
176
- #hash.__extending_modules.each {|mod| puts "rexmod=#{mod}"; new_hash.extend(mod)}
177
- #end
178
-
179
176
  new_hash
180
177
  end
181
178
 
182
- #def __extending_modules
183
- #@extending_modules ||= []
184
- #end
185
- #def __extended?
186
- #!__extending_modules.empty?
187
- #end
188
- #def extend(mod)
189
- #puts "extending with #{mod}"
190
- #__extending_modules << mod
191
- #puts "extending mods: #{__extending_modules.inspect}"
192
- #super
193
- #end
194
-
179
+ def self.__convert_value(v,cycle_watch=[])
180
+ id = v.__id__
195
181
 
182
+ return if cycle_watch.include? id
196
183
 
197
- def self.__convert_value(v,cycle_watch={})
198
- return if cycle_watch.key?(v.__id__)
184
+ begin
185
+ cycle_watch << id
199
186
 
200
- original_v = v
201
- v = v.to_hash if v.respond_to?(:to_hash)
187
+ original_v = v
188
+ v = v.to_hash if v.respond_to?(:to_hash)
202
189
 
203
- case v
204
- when Hash
205
- cycle_watch[original_v.__id__] = true
206
- __convert(v,cycle_watch)
207
- when Array
208
- cycle_watch[original_v.__id__] = true
209
- v.map {|vv| __convert_value(vv,cycle_watch)}
210
- when Fixnum,Symbol,NilClass,TrueClass,FalseClass,Float
211
- v
212
- else
213
- cycle_watch[original_v.__id__] = true
214
- v.dup
190
+ case v
191
+ when Hash
192
+ __convert(v,cycle_watch)
193
+ when Array
194
+ v.map {|vv| __convert_value(vv,cycle_watch)}
195
+ when Fixnum,Symbol,NilClass,TrueClass,FalseClass,Float
196
+ v
197
+ else
198
+ v.dup
199
+ end
200
+ ensure
201
+ cycle_watch.pop
215
202
  end
216
203
  end
217
204
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
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-05-19 00:00:00 +10:00
17
+ date: 2010-06-02 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies: []
20
20