Class: VersionSerializer::Versioner

Inherits:
Object
  • Object
show all
Defined in:
lib/version_serializers/versioner.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#class_nameObject

Returns the value of attribute class_name.



4
5
6
# File 'lib/version_serializers/versioner.rb', line 4

def class_name
  @class_name
end

#request_versionObject

Returns the value of attribute request_version.



4
5
6
# File 'lib/version_serializers/versioner.rb', line 4

def request_version
  @request_version
end

Class Method Details

.get_rendering_opts(resource, version, namespace = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/version_serializers/versioner.rb', line 10

def self.get_rendering_opts(resource, version, namespace=nil)
  resource_class_name = resource.class.to_s
  serializer_key = :serializer
  if resource.is_a? Enumerable
    serializer_key = :each_serializer
    if resource.is_a? ActiveRecord::Relation
      resource_class_name = resource_class_name.split("::").tap(&:pop).join("::")
    else
      return { json: resource } if resource.empty?
      resource_class_name = resource.first.class.to_s
    end
  end
  resource_class_name.prepend("#{namespace}/") if namespace
  serializer_class = get_serializer(resource_class_name, version)
  { json: resource, serializer_key => serializer_class }
end

.get_serializer(name, version) ⇒ Object



6
7
8
# File 'lib/version_serializers/versioner.rb', line 6

def self.get_serializer(name, version)
  send(:new, version, "#{name}_serializer".classify).get
end

Instance Method Details

#getObject



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/version_serializers/versioner.rb', line 27

def get
  "V#{request_version}::#{class_name}".constantize
rescue NameError
  previous_version = request_version.to_i - 1

  if previous_version == 0
    raise NameError
  else
    self.class.new(previous_version, class_name).get
  end
end