super_hash 1.0.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.
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: