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 CHANGED
@@ -26,3 +26,7 @@
26
26
  - 0.2.15
27
27
 
28
28
  * :includes like active record to_xml to_json
29
+
30
+ 21. Aug 2009
31
+
32
+ * refactored HashSerializer to be much clearer
@@ -8,7 +8,7 @@ module Restful
8
8
 
9
9
  def initialize(name)
10
10
  self.name = name
11
- self.type = :hash
11
+ self.type = :map
12
12
  self.values = []
13
13
  end
14
14
 
@@ -6,18 +6,18 @@ module Restful
6
6
  class Base
7
7
  cattr_accessor :serializers
8
8
 
9
- def serialize(resource, options = {}) # implement me.
9
+ def serialize(resource, options = {})
10
10
  raise NotImplementedError.new
11
11
  end
12
12
 
13
- def deserialize(resource, options = {}) # implement me.
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
- # .serialize(:xml, Resource.new(:animal => "cow"))
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 formatted_value(value)
32
- return value unless value.respond_to?(:value)
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
- return nil if value.value.blank? && value.extended_type != :false_class
35
- case value.extended_type
36
- when :datetime
37
- value.value.xmlschema
38
- when :time
39
- value.value.xmlschema
40
- when :date
41
- value.value.to_s(:db)
42
- else
43
- value.value
44
- end
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
- # AR params hash.
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(resource, options = {})
13
- case resource
14
- when Restful::ApiModel::Collection then serialize_collection(resource)
15
- when Restful::ApiModel::Resource then serialize_tuples(resource.values, resource.full_url)
16
- when Restful::ApiModel::Map then serialize_map(resource)
17
- else
18
- serialize_tuples(resource.values, resource.full_url)
19
- end
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
- values = { :total_entries => entries, collection.name => values }
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 serialize_map(map)
35
- map.values.inject({}) do |memo, attribute|
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 serialize_value(value)
49
- case value.type
50
- when :collection then serialize_collection(value)
51
- when :link then value.value
52
- when :resource then serialize(value)
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
- hasher = Restful::Serializers::HashSerializer.new
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, formatted_value(value), decorations(value))
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.15"
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"
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper.rb'
2
2
 
3
- context "params serializer" do
3
+ context "xml serializer" do
4
4
  setup do
5
5
  Person.restful_publish(:name, :current_location, :pets, :wallet, :created_at)
6
6
  Pet.restful_publish(:name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purzelrakete-restful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.15
4
+ version: 0.2.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bornkessel