Class: AnnotateRb::ModelAnnotator::ExclusionConstraintAnnotation::AnnotationBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/annotate_rb/model_annotator/exclusion_constraint_annotation/annotation_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(model, options) ⇒ AnnotationBuilder

Returns a new instance of AnnotationBuilder.



7
8
9
10
# File 'lib/annotate_rb/model_annotator/exclusion_constraint_annotation/annotation_builder.rb', line 7

def initialize(model, options)
  @model = model
  @options = options
end

Instance Method Details

#buildObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/annotate_rb/model_annotator/exclusion_constraint_annotation/annotation_builder.rb', line 12

def build
  return Components::NilComponent.new if !@options[:show_exclusion_constraints]
  return Components::NilComponent.new unless @model.connection.respond_to?(:supports_exclusion_constraints?) &&
    @model.connection.supports_exclusion_constraints? && @model.connection.respond_to?(:exclusion_constraints)

  exclusion_constraints = @model.connection.exclusion_constraints(@model.table_name)
  return Components::NilComponent.new if exclusion_constraints.empty?

  max_size = exclusion_constraints.map { |exclusion_constraint| exclusion_constraint.name.size }.max + 1

  constraints = exclusion_constraints.sort_by(&:name).map do |exclusion_constraint|
    details = "(#{exclusion_constraint.expression})"
    details += " USING #{exclusion_constraint.using}" if exclusion_constraint.using
    details += " WHERE (#{exclusion_constraint.where})" if exclusion_constraint.where
    if exclusion_constraint.deferrable
      details += " DEFERRABLE INITIALLY #{exclusion_constraint.deferrable.to_s.upcase}"
    end

    ExclusionConstraintComponent.new(exclusion_constraint.name, details, max_size)
  end

  _annotation = Annotation.new(constraints)
end