angry_hash 0.0.1 → 0.0.3

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/Rakefile CHANGED
@@ -7,6 +7,8 @@ begin
7
7
  gemspec.email = "lachie@plus2.com.au"
8
8
  gemspec.homepage = "http://github.com/plus2/angry_hash"
9
9
  gemspec.authors = ["Lachie Cox"]
10
+ gemspec.test_files = []
11
+ gemspec.executables = []
10
12
  end
11
13
  Jeweler::GemcutterTasks.new
12
14
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.3
@@ -0,0 +1,41 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{angry_hash}
8
+ s.version = "0.0.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Lachie Cox"]
12
+ s.date = %q{2010-04-29}
13
+ s.description = %q{A stabler mash with different emphases. Used in plus2 projects AngryMob and Igor.}
14
+ s.email = %q{lachie@plus2.com.au}
15
+ s.files = [
16
+ ".gitignore",
17
+ "Rakefile",
18
+ "VERSION",
19
+ "angry_hash.gemspec",
20
+ "examples/creation_eg.rb",
21
+ "examples/eg_helper.rb",
22
+ "lib/angry_hash.rb",
23
+ "lib/angry_hash/merge_string.rb"
24
+ ]
25
+ s.homepage = %q{http://github.com/plus2/angry_hash}
26
+ s.rdoc_options = ["--charset=UTF-8"]
27
+ s.require_paths = ["lib"]
28
+ s.rubygems_version = %q{1.3.6}
29
+ s.summary = %q{A stabler mash with different emphases.}
30
+
31
+ if s.respond_to? :specification_version then
32
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
33
+ s.specification_version = 3
34
+
35
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
36
+ else
37
+ end
38
+ else
39
+ end
40
+ end
41
+
@@ -0,0 +1,38 @@
1
+ require 'eg_helper'
2
+
3
+ eg.helpers do
4
+ def oids(v)
5
+ sub = case v
6
+ when Hash
7
+ hh = {}
8
+ v.each {|kk,vv| hh[kk] = oids(vv)}
9
+ hh
10
+ when Array
11
+ v.map {|vv| oids(vv)}
12
+ else
13
+ v
14
+ end
15
+
16
+ n = {:class => v.class, :oid => v.__id__, :sub => sub}
17
+ if v.respond_to?(:__id__)
18
+ n[:oid] = v.__id__
19
+ else
20
+ n[:oid] = 0
21
+ end
22
+ n
23
+ end
24
+ end
25
+
26
+ eg 'creation duplicates' do
27
+ a1 = AngryHash[ :a => { :b => 1 }, :c => [ 1, :d, {:e => :f}, nil, true, false, 1.0, [ 'x', 'y' ] ] ]
28
+ a2 = AngryHash[ a1 ]
29
+
30
+ pp oids(a1)
31
+ pp oids(a2)
32
+
33
+ Check(a1.c[2].__id__ != a2.c[2].__id__).is(true)
34
+ Check(a1.c[7].__id__ != a2.c[7].__id__).is(true)
35
+ end
36
+
37
+ eg 'cycle detection' do
38
+ end
@@ -0,0 +1,6 @@
1
+ require 'pathname'
2
+ root = Pathname('../..').expand_path(__FILE__)
3
+ require 'pp'
4
+ require 'exemplor'
5
+ $:.unshift root+'lib'
6
+ require 'angry_hash'
data/lib/angry_hash.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  class AngryHash < Hash
2
+
2
3
  def self.[](other)
3
4
  super(__convert(other))
4
5
  end
@@ -61,6 +62,30 @@ class AngryHash < Hash
61
62
  self
62
63
  end
63
64
 
65
+ def to_normal_hash
66
+ __to_hash(self)
67
+ end
68
+ def __to_hash(value,cycle_guard={})
69
+ return cycle_guard[value.hash] if cycle_guard.key?(value.hash)
70
+
71
+ case value
72
+ when Hash
73
+ new_hash = cycle_guard[value.hash] = {}
74
+
75
+ value.inject(new_hash) do |hash,(k,v)|
76
+ hash[k] = __to_hash(v,cycle_guard)
77
+ hash
78
+ end
79
+ when Array
80
+ new_array = cycle_guard[value.hash] = []
81
+
82
+ value.each {|v| new_array << __to_hash(v,cycle_guard)}
83
+ else
84
+ value
85
+ end
86
+ end
87
+
88
+
64
89
  def method_missing(method,*args,&blk)
65
90
  method_s = method.to_s
66
91
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 3
9
+ version: 0.0.3
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-03-11 00:00:00 +11:00
17
+ date: 2010-04-29 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -30,6 +30,9 @@ files:
30
30
  - .gitignore
31
31
  - Rakefile
32
32
  - VERSION
33
+ - angry_hash.gemspec
34
+ - examples/creation_eg.rb
35
+ - examples/eg_helper.rb
33
36
  - lib/angry_hash.rb
34
37
  - lib/angry_hash/merge_string.rb
35
38
  has_rdoc: true