class Syncify::Hint::BasicHint

Attributes

allowed[RW]
allowed?[RW]
association[RW]
from_class[RW]
to_class[RW]

Public Class Methods

new(from_class: nil, association: nil, to_class: nil, allowed:) click to toggle source
# File lib/syncify/hint/basic_hint.rb, line 7
def initialize(from_class: nil, association: nil, to_class: nil, allowed:)
  @from_class = from_class
  @association = association
  @to_class = to_class
  @allowed = allowed
end

Public Instance Methods

applicable?(candidate_association) click to toggle source
# File lib/syncify/hint/basic_hint.rb, line 14
def applicable?(candidate_association)
  evaluate_from(candidate_association) &&
    evaluate_association(candidate_association) &&
    evaluate_to_class(candidate_association)
end

Private Instance Methods

evaluate_association(candidate_association) click to toggle source
# File lib/syncify/hint/basic_hint.rb, line 31
def evaluate_association(candidate_association)
  return true if association.nil?

  if association.is_a? Regexp
    candidate_association.name =~ association ? true : false
  else
    Array.wrap(association).include? candidate_association.name
  end
end
evaluate_from(candidate_association) click to toggle source
# File lib/syncify/hint/basic_hint.rb, line 26
def evaluate_from(candidate_association)
  from_class.nil? ||
    Array.wrap(from_class).include?(candidate_association.active_record)
end
evaluate_to_class(candidate_association) click to toggle source
# File lib/syncify/hint/basic_hint.rb, line 41
def evaluate_to_class(candidate_association)
  return true if to_class.nil?

  if candidate_association.polymorphic?
    associated_classes = Syncify::Association::PolymorphicAssociation.identify_to_classes(
      candidate_association.active_record,
      candidate_association.name
    )

    (Array.wrap(to_class) & associated_classes).any?
  else
    Array.wrap(to_class).include?(candidate_association.klass)
  end
end