ref: refs/heads/jr-basemodel
commit 5ae976bdb6d864f66281e5393eaae28e0ad85b21
Author: Josef Reidinger
Date: Wed Dec 9 17:29:14 2009 +0100
add json serialization to base model
---
webservice/lib/base_model/serialization.rb | 3 +-
.../lib/base_model/serializers/json_serializer.rb | 23 ++++++++++++++++++++
webservice/test/unit/base_model_test.rb | 10 ++++++++
3 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/webservice/lib/base_model/serialization.rb b/webservice/lib/base_model/serialization.rb
index 56a8a86..f822afa 100644
--- a/webservice/lib/base_model/serialization.rb
+++ b/webservice/lib/base_model/serialization.rb
@@ -1,7 +1,7 @@
module BaseModel
module Serialization
class Serializer
- attr_reader :options
+ attr_reader :options, :attributes
def initialize(model,options={})
@model = model
@@ -35,3 +35,4 @@ module BaseModel
end
end
require 'base_model/serializers/xml_serializer'
+require 'base_model/serializers/json_serializer'
diff --git a/webservice/lib/base_model/serializers/json_serializer.rb b/webservice/lib/base_model/serializers/json_serializer.rb
new file mode 100644
index 0000000..f67e0bb
--- /dev/null
+++ b/webservice/lib/base_model/serializers/json_serializer.rb
@@ -0,0 +1,23 @@
+require 'active_support/json'
+module BaseModel
+ module Serialization
+ def to_json(options={},&block)
+ super
+ end
+
+ def from_json(json)
+ hash = ActiveSupport::JSON.decode(json)
+ load(hash.values.first)
+ end
+
+ def as_json(options={})
+ hash = {}
+ Serializer.new(self,options).attributes.each do |attr|
+ hash[attr.to_s[1..-1]] = instance_variable_get(attr)
+ end
+ hash = { self.class.model_name.singular => hash }
+ hash
+ end
+
+ end
+end
diff --git a/webservice/test/unit/base_model_test.rb b/webservice/test/unit/base_model_test.rb
index 0e9c1b0..7be9418 100644
--- a/webservice/test/unit/base_model_test.rb
+++ b/webservice/test/unit/base_model_test.rb
@@ -63,4 +63,14 @@ MASS_DATA = { :arg1 => "last", :arg2 => "5", :callback_used => false }
assert_equal "last", test2.arg1
assert_equal "5", test2.arg2
end
+
+ def test_json_serialization
+ test= Test.new(MASS_DATA)
+ json = test.to_json
+ assert json
+ test2 = Test.new
+ test2.from_json json
+ assert_equal "last", test2.arg1
+ assert_equal "5", test2.arg2
+ end
end
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org