diff options
author | Florian Frank <flori@ping.de> | 2012-04-27 20:03:16 +0200 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2012-04-28 03:18:03 +0200 |
commit | 2e402dc8771a2de8c3cc83fcd1fb4240afd77576 (patch) | |
tree | 77cd7ca75ee36ed0ef207915974bc5d0ac4ac044 /lib/json/generic_object.rb | |
parent | 93b31b8b588461901ed5ae0dc4e961ea3adbc55e (diff) | |
download | json-2e402dc8771a2de8c3cc83fcd1fb4240afd77576.tar.gz |
Add JSON::GenericObject
Diffstat (limited to 'lib/json/generic_object.rb')
-rw-r--r-- | lib/json/generic_object.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/json/generic_object.rb b/lib/json/generic_object.rb new file mode 100644 index 0000000..7f3dbbd --- /dev/null +++ b/lib/json/generic_object.rb @@ -0,0 +1,39 @@ +require 'ostruct' + +module JSON + class GenericObject < OpenStruct + class << self + alias [] new + + def json_create(data) + data = data.dup + data.delete JSON.create_id + self[data] + end + end + + def to_hash + table + end + + def [](name) + table[name.to_sym] + end + + def []=(name, value) + __send__ "#{name}=", value + end + + def |(other) + self.class[other.to_hash.merge(to_hash)] + end + + def as_json(*) + { JSON.create_id => self.class.name }.merge to_hash + end + + def to_json(*a) + as_json.to_json(*a) + end + end +end |