purzelrakete-restful 0.2.15 → 0.2.16
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.
- data/CHANGES.markdown +4 -0
- data/lib/restful/apimodel/map.rb +1 -1
- data/lib/restful/serializers/base.rb +17 -16
- data/lib/restful/serializers/hash_serializer.rb +22 -34
- data/lib/restful/serializers/json_serializer.rb +1 -3
- data/lib/restful/serializers/xml_serializer.rb +1 -1
- data/restful.gemspec +1 -1
- data/test/serializers/xml_serializer_test.rb +1 -1
- metadata +1 -1
data/CHANGES.markdown
CHANGED
data/lib/restful/apimodel/map.rb
CHANGED
@@ -6,18 +6,18 @@ module Restful
|
|
6
6
|
class Base
|
7
7
|
cattr_accessor :serializers
|
8
8
|
|
9
|
-
def serialize(resource, options = {})
|
9
|
+
def serialize(resource, options = {})
|
10
10
|
raise NotImplementedError.new
|
11
11
|
end
|
12
12
|
|
13
|
-
def deserialize(resource, options = {})
|
13
|
+
def deserialize(resource, options = {})
|
14
14
|
raise NotImplementedError.new
|
15
15
|
end
|
16
16
|
|
17
17
|
#
|
18
18
|
# Grabs a serializer, given...
|
19
19
|
#
|
20
|
-
#
|
20
|
+
# #serialize :xml, Resource.new(:animal => "cow")
|
21
21
|
#
|
22
22
|
def self.serializer(type)
|
23
23
|
serializers[type].new
|
@@ -28,20 +28,21 @@ module Restful
|
|
28
28
|
self.serializers[key] = self
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
return
|
31
|
+
def serialize_attribute(attribute)
|
32
|
+
return formatted_ruby_type(attribute) unless attribute.respond_to?(:value)
|
33
|
+
return nil if attribute.value.blank? && attribute.extended_type != :false_class
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
formatted_ruby_type(attribute.value)
|
36
|
+
end
|
37
|
+
|
38
|
+
def formatted_ruby_type(obj)
|
39
|
+
case obj
|
40
|
+
when DateTime then obj.xmlschema
|
41
|
+
when Time then obj.xmlschema
|
42
|
+
when Date then obj.to_s(:db)
|
43
|
+
else
|
44
|
+
obj
|
45
|
+
end
|
45
46
|
end
|
46
47
|
|
47
48
|
protected
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'restful/serializers/base'
|
2
2
|
|
3
3
|
#
|
4
|
-
#
|
4
|
+
# Vanilla Hash.
|
5
5
|
#
|
6
6
|
module Restful
|
7
7
|
module Serializers
|
@@ -9,49 +9,37 @@ module Restful
|
|
9
9
|
|
10
10
|
serializer_name :hash
|
11
11
|
|
12
|
-
def serialize(
|
13
|
-
case
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
def serialize(obj, options = {})
|
13
|
+
case obj.type
|
14
|
+
when :link then obj.value
|
15
|
+
when :simple_attribute then serialize(obj.value)
|
16
|
+
when :collection then serialize_collection(obj)
|
17
|
+
when :map then serialize_array_of_apimodels(obj.values)
|
18
|
+
when :resource then serialize_array_of_apimodels(obj.values, { "restful_url" => obj.full_url })
|
19
|
+
else
|
20
|
+
formatted_ruby_type(obj)
|
21
|
+
end
|
20
22
|
end
|
21
|
-
|
23
|
+
|
22
24
|
private
|
23
25
|
|
24
26
|
def serialize_collection(collection)
|
25
|
-
values = collection.value.map { |r| serialize(r) }
|
26
|
-
|
27
27
|
if entries = collection.total_entries
|
28
|
-
|
28
|
+
{ :total_entries => entries, collection.name => serialize_unpaginated_collection(collection) }
|
29
|
+
else
|
30
|
+
serialize_unpaginated_collection(collection)
|
29
31
|
end
|
30
|
-
|
31
|
-
values
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
|
36
|
-
memo[attribute.name] = serialize_value(attribute.value)
|
37
|
-
memo
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def serialize_tuples(tuples, url)
|
42
|
-
tuples.inject({ "restful_url" => url }) do |params, value|
|
43
|
-
params[value.name.to_s.tr("-", "_").to_sym] = serialize_value(value)
|
44
|
-
params
|
45
|
-
end
|
34
|
+
def serialize_unpaginated_collection(collection)
|
35
|
+
collection.value.map { |r| serialize(r) }
|
46
36
|
end
|
47
37
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
else formatted_value(value)
|
54
|
-
end
|
38
|
+
def serialize_array_of_apimodels(apimodels, defaults = {})
|
39
|
+
apimodels.inject(defaults) do |memo, apimodel|
|
40
|
+
memo[apimodel.name.to_s.underscore.to_sym] = serialize(apimodel)
|
41
|
+
memo
|
42
|
+
end
|
55
43
|
end
|
56
44
|
end
|
57
45
|
end
|
@@ -11,9 +11,7 @@ module Restful
|
|
11
11
|
serializer_name :json
|
12
12
|
|
13
13
|
def serialize(resource, options = {})
|
14
|
-
|
15
|
-
hash = hasher.serialize(resource, options)
|
16
|
-
Yajl::Encoder.encode(hash)
|
14
|
+
Yajl::Encoder.encode HashSerializer.new.serialize(resource, options)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -71,7 +71,7 @@ module Restful
|
|
71
71
|
if value.extended_type == :hash
|
72
72
|
build_hash(builder, value)
|
73
73
|
else
|
74
|
-
builder.tag!(value.name.to_s.dasherize,
|
74
|
+
builder.tag!(value.name.to_s.dasherize, serialize_attribute(value), decorations(value))
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
data/restful.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "restful"
|
3
|
-
s.version = "0.2.
|
3
|
+
s.version = "0.2.16"
|
4
4
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
5
5
|
s.authors = ["Daniel Bornkessel", "Rany Keddo"]
|
6
6
|
s.date = "2009-08-11"
|