super_hash 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/super_hash.rb +43 -0
  2. metadata +112 -0
data/lib/super_hash.rb ADDED
@@ -0,0 +1,43 @@
1
+ require 'delegate'
2
+ require 'active_support/core_ext'
3
+
4
+ class SuperHash < Delegator
5
+ attr_accessor :attributes
6
+
7
+ def initialize(attributes = {})
8
+ self.attributes = ActiveSupport::HashWithIndifferentAccess.new attributes
9
+ self.coerce!
10
+ self.define_key_methods!
11
+ end
12
+
13
+ def coerce!
14
+ self.attributes.each do |key, value|
15
+ case value
16
+ when Hash
17
+ self.attributes[key] = SuperHash.new value
18
+ when Array
19
+ value.each_with_index do |array_value, index|
20
+ value[index] = SuperHash.new(array_value) if array_value.is_a?(Hash)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ def define_key_methods!
27
+ self.attributes.each do |key, value|
28
+ unless self.respond_to?(key.to_sym)
29
+ self.class.send(:define_method, key.to_sym) do
30
+ self.attributes[key]
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def __getobj__
37
+ @attributes
38
+ end
39
+
40
+ def to_json(options={})
41
+ @attributes.to_json options
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: super_hash
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Christopher Chow
9
+ - Carl Woodward
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-12-13 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: i18n
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: activesupport
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: json_spec
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ description: Allow struct like behaviour for Hashes. Supports arbitrary nesting and
80
+ doesn't break the existing Hash interface.
81
+ email: chris@chowie.net
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/super_hash.rb
87
+ homepage: https://github.com/Soliah/super_hash
88
+ licenses: []
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 1.8.24
108
+ signing_key:
109
+ specification_version: 3
110
+ summary: Struct like behaviour for Hashes.
111
+ test_files: []
112
+ has_rdoc: