Module: JSONAPI::Resources::RelationshipsDsl::RelationshipHelperMethods

Defined in:
lib/json_api/resources/concerns/relationships_dsl.rb

Instance Method Summary collapse

Instance Method Details

#build_relationship_definitionsObject



48
49
50
51
52
53
# File 'lib/json_api/resources/concerns/relationships_dsl.rb', line 48

def build_relationship_definitions
  declared_relationships = instance_variable_defined?(:@relationships)
  rels = @relationships || []
  rels = superclass.relationship_definitions + rels if should_inherit_relationships?(declared_relationships)
  rels.uniq { |r| r[:name] }
end

#detect_polymorphic(name, options) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/json_api/resources/concerns/relationships_dsl.rb', line 63

def detect_polymorphic(name, options)
  return if options.key?(:polymorphic)

  model_klass = reflection_model_class
  return unless model_klass.respond_to?(:reflect_on_association)

  reflection = model_klass.reflect_on_association(name)
  options[:polymorphic] = reflection&.polymorphic?
end

#register_relationship(name:, type:, meta:, options:) ⇒ Object



42
43
44
45
46
# File 'lib/json_api/resources/concerns/relationships_dsl.rb', line 42

def register_relationship(name:, type:, meta:, options:)
  @relationships ||= []
  @relationships << { name: name.to_sym, type:, meta:, options: }
  reset_relationship_definitions!
end

#should_inherit_relationships?(declared_relationships) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
77
# File 'lib/json_api/resources/concerns/relationships_dsl.rb', line 73

def should_inherit_relationships?(declared_relationships)
  !declared_relationships &&
    superclass != JSONAPI::Resource &&
    superclass.respond_to?(:relationship_definitions)
end

#validate_append_only_options!(options) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/json_api/resources/concerns/relationships_dsl.rb', line 55

def validate_append_only_options!(options)
  if options[:append_only] && options[:purge_on_nil] == true
    raise ArgumentError, "Cannot use append_only: true with purge_on_nil: true"
  end

  options[:purge_on_nil] = false if options[:append_only] && !options.key?(:purge_on_nil)
end