right_support 2.8.25 → 2.8.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/features/serialization.feature +5 -1
- data/lib/right_support/data/serializer.rb +10 -3
- data/lib/right_support/data/unknown_type.rb +43 -0
- data/lib/right_support/data.rb +1 -0
- data/right_support.gemspec +5 -4
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6010fe3e9ebbaa222eacaf224b0576a36e350f7c
|
4
|
+
data.tar.gz: a4a49a381d7a250a19230b0a3cd848436a51f221
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a74303a4224cd7bc1ffa4bb3d65df38b4664baa9c55ba31f63327696ff598756c7898d6de68ac625caa8f0e453e5811c73adf8b725a9dc709ebdf200d5f09189
|
7
|
+
data.tar.gz: 9f1d6b77e03702c6e8f83e04633f5fe8708d79f4a790dfbae77a4c860b5da1772576405db4d30d00f8eb19cb15b21d9591b3a91b575806702bd212b68f88cd91
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.8.
|
1
|
+
2.8.26
|
@@ -104,5 +104,9 @@ Feature: JSON serialization
|
|
104
104
|
|
105
105
|
Scenario: unrecognized Ruby object class
|
106
106
|
When I unserialize the JSON value: {"_ruby_class":"DoesNotExist","hello":"world"}
|
107
|
-
Then the unserialized object should be an
|
107
|
+
Then the unserialized object should be an RightSupport::Data::UnknownType
|
108
108
|
And the unserialized object should have a "hello" attribute with value: "world"
|
109
|
+
|
110
|
+
Scenario: unrecognized Ruby object class
|
111
|
+
When I serialize the Ruby value: RightSupport::Data::UnknownType.new("DoesNotExist", {"hello" => "world"})
|
112
|
+
Then the serialized value should be: {"_ruby_class":"DoesNotExist","hello":"world"}
|
@@ -210,6 +210,12 @@ module RightSupport::Data
|
|
210
210
|
# Ruby Class/Module needs special handling - no instance vars
|
211
211
|
{ @marker => object.class.name,
|
212
212
|
CLASS_ESCAPE_KEY => object.name }
|
213
|
+
when UnknownType
|
214
|
+
# An unknown Ruby type that got deserialized and needs to be round-tripped.
|
215
|
+
object.marshal_dump.inject({@marker => object.__typename__}) do |result, (k,v)|
|
216
|
+
result[k.to_s] = object_to_jsonish(v)
|
217
|
+
result
|
218
|
+
end
|
213
219
|
else
|
214
220
|
# Generic serialized object; convert to Hash.
|
215
221
|
hash = {}
|
@@ -257,6 +263,7 @@ module RightSupport::Data
|
|
257
263
|
jsonish = Time.at(hash.delete(TIME_ESCAPE_KEY))
|
258
264
|
else
|
259
265
|
# Generic serialized object
|
266
|
+
klassname = klass
|
260
267
|
klass = klass.to_const
|
261
268
|
|
262
269
|
if klass
|
@@ -267,9 +274,9 @@ module RightSupport::Data
|
|
267
274
|
jsonish.instance_variable_set("@#{k}", jsonish_to_object(v))
|
268
275
|
end
|
269
276
|
else
|
270
|
-
|
271
|
-
#
|
272
|
-
jsonish =
|
277
|
+
# Objects of unknown types are represented by a special derivative of OpenStruct
|
278
|
+
# so we can round-trip them later.
|
279
|
+
jsonish = UnknownType.new(klassname, hash.inject({}) do |result, (k, v)|
|
273
280
|
result[k] = jsonish_to_object(v)
|
274
281
|
result
|
275
282
|
end)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
|
23
|
+
require 'ostruct'
|
24
|
+
|
25
|
+
module RightSupport::Data
|
26
|
+
# A type that can be instantiated by the DataSerializer (or anyone else) when an unknown Ruby
|
27
|
+
# type is encountered in serialized data. It functions like an OpenStruct, but it has a distinct
|
28
|
+
# type identity so the DataSerializer can work with it.
|
29
|
+
#
|
30
|
+
# UnknownType remembers the original Ruby type name of the serialized object so it can be
|
31
|
+
# dumped back to a serialization stream without losing type identity or attribute information.
|
32
|
+
class UnknownType < OpenStruct
|
33
|
+
attr_reader :__typename__
|
34
|
+
|
35
|
+
# Construct a new object representing a serialized object of unknown type.
|
36
|
+
# @param [String] typename
|
37
|
+
# @param [Hash] attributes
|
38
|
+
def initialize(typename, attributes)
|
39
|
+
@__typename__ = typename
|
40
|
+
super(attributes)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/right_support/data.rb
CHANGED
data/right_support.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: right_support 2.8.
|
5
|
+
# stub: right_support 2.8.26 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "right_support"
|
9
|
-
s.version = "2.8.
|
9
|
+
s.version = "2.8.26"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Tony Spataro", "Sergey Sergyenko", "Ryan Williamson", "Lee Kirchhoff", "Alexey Karpik", "Scott Messier"]
|
14
|
-
s.date = "2014-08-
|
14
|
+
s.date = "2014-08-06"
|
15
15
|
s.description = "A toolkit of useful, reusable foundation code created by RightScale."
|
16
16
|
s.email = "support@rightscale.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -54,6 +54,7 @@ Gem::Specification.new do |s|
|
|
54
54
|
"lib/right_support/data.rb",
|
55
55
|
"lib/right_support/data/hash_tools.rb",
|
56
56
|
"lib/right_support/data/serializer.rb",
|
57
|
+
"lib/right_support/data/unknown_type.rb",
|
57
58
|
"lib/right_support/data/uuid.rb",
|
58
59
|
"lib/right_support/db.rb",
|
59
60
|
"lib/right_support/db/cassandra_model.rb",
|
@@ -140,7 +141,7 @@ Gem::Specification.new do |s|
|
|
140
141
|
]
|
141
142
|
s.homepage = "https://github.com/rightscale/right_support"
|
142
143
|
s.licenses = ["MIT"]
|
143
|
-
s.rubygems_version = "2.2.
|
144
|
+
s.rubygems_version = "2.2.2"
|
144
145
|
s.summary = "Reusable foundation code."
|
145
146
|
end
|
146
147
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.8.
|
4
|
+
version: 2.8.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Spataro
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2014-08-
|
16
|
+
date: 2014-08-06 00:00:00.000000000 Z
|
17
17
|
dependencies: []
|
18
18
|
description: A toolkit of useful, reusable foundation code created by RightScale.
|
19
19
|
email: support@rightscale.com
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- lib/right_support/data.rb
|
59
59
|
- lib/right_support/data/hash_tools.rb
|
60
60
|
- lib/right_support/data/serializer.rb
|
61
|
+
- lib/right_support/data/unknown_type.rb
|
61
62
|
- lib/right_support/data/uuid.rb
|
62
63
|
- lib/right_support/db.rb
|
63
64
|
- lib/right_support/db/cassandra_model.rb
|
@@ -161,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
162
|
version: '0'
|
162
163
|
requirements: []
|
163
164
|
rubyforge_project:
|
164
|
-
rubygems_version: 2.2.
|
165
|
+
rubygems_version: 2.2.2
|
165
166
|
signing_key:
|
166
167
|
specification_version: 4
|
167
168
|
summary: Reusable foundation code.
|