Module: OpenApiAnnotator::SerializerAnnotatable::ClassMethods

Defined in:
lib/open_api_annotator/serializer_annotatable.rb

Instance Method Summary collapse

Instance Method Details

#attribute(attr, options = {}, &block) ⇒ Object



10
11
12
13
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 10

def attribute(attr, options = {}, &block)
  validate_open_api_options(attr, options)
  super(attr, options, &block)
end

#belongs_to(name, options = {}, &block) ⇒ Object



25
26
27
28
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 25

def belongs_to(name, options = {}, &block)
  validate_open_api_options(name, options)
  super(name, options, &block)
end

#has_many(name, options = {}, &block) ⇒ Object



15
16
17
18
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 15

def has_many(name, options = {}, &block)
  validate_open_api_options(name, options)
  super(name, options, &block)
end

#has_one(name, options = {}, &block) ⇒ Object



20
21
22
23
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 20

def has_one(name, options = {}, &block)
  validate_open_api_options(name, options)
  super(name, options, &block)
end

#open_api_attributesObject



85
86
87
88
89
90
91
92
93
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 85

def open_api_attributes
  _attributes_data.values.reject { |attribute|
    attribute.name.to_s.start_with?("_")
  }.map { |attribute|
    serializer_class = attribute.options[:serializer]
    type = serializer_class ? [serializer_class.open_api_resource_name] : attribute.options[:type]
    Attribute.new(attribute.name.to_sym, type, attribute.options[:format], attribute.options[:nullable])
  }
end

#open_api_belongs_to_associationsObject



75
76
77
78
79
80
81
82
83
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 75

def open_api_belongs_to_associations
  _reflections.values.select { |reflection|
    reflection.is_a?(ActiveModel::Serializer::BelongsToReflection)
  }.map do |reflection|
    serializer_class = reflection.options[:serializer]
    type = serializer_class ? [serializer_class.open_api_resource_name] : reflection.options[:type]
    Association.new(reflection.name.to_sym, type, reflection.options[:nullable])
  end
end

#open_api_has_many_associationsObject



55
56
57
58
59
60
61
62
63
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 55

def open_api_has_many_associations
  _reflections.values.select { |reflection|
    reflection.is_a?(ActiveModel::Serializer::HasManyReflection)
  }.map do |reflection|
    serializer_class = reflection.options[:serializer]
    type = serializer_class ? [serializer_class.open_api_resource_name] : reflection.options[:type]
    Association.new(reflection.name.to_sym, type, reflection.options[:nullable])
  end
end

#open_api_has_one_associationsObject



65
66
67
68
69
70
71
72
73
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 65

def open_api_has_one_associations
  _reflections.values.select { |reflection|
    reflection.is_a?(ActiveModel::Serializer::HasOneReflection)
  }.map do |reflection|
    serializer_class = reflection.options[:serializer]
    type = serializer_class ? [serializer_class.open_api_resource_name] : reflection.options[:type]
    Association.new(reflection.name.to_sym, type, reflection.options[:nullable])
  end
end

#open_api_resource_nameObject



95
96
97
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 95

def open_api_resource_name
  name.remove(/Serializer\z/)
end

#skip_open_api_validation!Object



6
7
8
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 6

def skip_open_api_validation!
  @open_api_validation_skipped = true
end

#validate_open_api_format!(format) ⇒ Object



50
51
52
53
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 50

def validate_open_api_format!(format)
  @open_api_format_validator ||= FormatValidator.new
  @open_api_format_validator.validate!(format)
end

#validate_open_api_nullable!(type) ⇒ Object



45
46
47
48
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 45

def validate_open_api_nullable!(type)
  @open_api_nullable_validator ||= NullableValidator.new
  @open_api_nullable_validator.validate!(type)
end

#validate_open_api_options(field, options) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 30

def validate_open_api_options(field, options)
  return if @open_api_validation_skipped

  validate_open_api_type!(options[:type])
  validate_open_api_format!(options[:format])
  validate_open_api_nullable!(options[:nullable])
rescue ValidationError => e
  Rails.logger.warn(e.message)
end

#validate_open_api_type!(type) ⇒ Object



40
41
42
43
# File 'lib/open_api_annotator/serializer_annotatable.rb', line 40

def validate_open_api_type!(type)
  @open_api_type_validator ||= TypeValidator.new
  @open_api_type_validator.validate!(type)
end