Class: Ixtlan::Babel::Factory
- Inherits:
-
Object
- Object
- Ixtlan::Babel::Factory
show all
- Defined in:
- lib/ixtlan/babel/factory.rb
Defined Under Namespace
Classes: EmptyArraySerializer
Constant Summary
collapse
- NANOSECONDS_IN_DAY =
86400*10**6
- TIME_TO_S =
Proc.new do |t|
t.strftime('%Y-%m-%dT%H:%M:%S.') + ("%06d" % t.usec) + t.strftime('%z')
end
- DATE_TIME_TO_S =
Proc.new do |dt|
dt.strftime('%Y-%m-%dT%H:%M:%S.') + ("%06d" % (dt.sec_fraction * NANOSECONDS_IN_DAY ) )[0..6] + dt.strftime('%z')
end
- DEFAULT_MAP =
{
'DateTime' => DATE_TIME_TO_S,
'ActiveSupport::TimeWithZone' => TIME_TO_S,
'Time' => TIME_TO_S
}
Instance Method Summary
collapse
Constructor Details
#initialize(custom_serializers = {}) ⇒ Factory
Returns a new instance of Factory.
48
49
50
51
|
# File 'lib/ixtlan/babel/factory.rb', line 48
def initialize(custom_serializers = {})
@map = DEFAULT_MAP.dup
@map.merge!(custom_serializers)
end
|
Instance Method Details
#add(clazz, &block) ⇒ Object
53
54
55
|
# File 'lib/ixtlan/babel/factory.rb', line 53
def add( clazz, &block )
@map[ clazz.to_s ] = block
end
|
#const_retrieve(const) ⇒ Object
84
85
86
87
88
89
90
|
# File 'lib/ixtlan/babel/factory.rb', line 84
def const_retrieve( const )
obj = Object
const.split(/::/).each do |part|
obj = obj.const_get( part )
end
obj
end
|
#new(resource) ⇒ Object
75
76
77
78
|
# File 'lib/ixtlan/babel/factory.rb', line 75
def new( resource )
warn 'DEPRECATED use new_serializer instead'
new_serializer( resource )
end
|
#new_filter(clazz) ⇒ Object
80
81
82
|
# File 'lib/ixtlan/babel/factory.rb', line 80
def new_filter( clazz )
const_retrieve( "#{clazz}Filter" ).new( clazz )
end
|
#new_serializer(resource) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/ixtlan/babel/factory.rb', line 57
def new_serializer( resource )
if resource.respond_to?(:model)
model = resource.model
elsif resource.respond_to?( :collect) && !resource.respond_to?( :to_hash)
if resource.empty?
return EmptyArraySerializer.new
else
r = resource.first
model = r.respond_to?( :model ) ? r.model : r.class
end
else
model = resource.class
end
ser = const_retrieve( "#{model}Serializer" ).new( resource )
ser.add_custom_serializers( @map )
ser
end
|