Class: FunWithJsonApi::FindCollectionFromDocument

Inherits:
Object
  • Object
show all
Defined in:
lib/fun_with_json_api/find_collection_from_document.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(document, deserializer) ⇒ FindCollectionFromDocument

Returns a new instance of FindCollectionFromDocument.



16
17
18
19
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 16

def initialize(document, deserializer)
  @document = FunWithJsonApi.sanitize_document(document)
  @deserializer = deserializer
end

Instance Attribute Details

#deserializerObject (readonly)

Returns the value of attribute deserializer.



13
14
15
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 13

def deserializer
  @deserializer
end

#documentObject (readonly)

Returns the value of attribute document.



12
13
14
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 12

def document
  @document
end

Class Method Details

.find(*args) ⇒ Object



6
7
8
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 6

def self.find(*args)
  new(*args).find
end

Instance Method Details

#document_idsObject



37
38
39
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 37

def document_ids
  @document_id ||= document['data'].map { |item| item['id'] }
end

#document_is_valid_collection?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 49

def document_is_valid_collection?
  document.key?('data') && document['data'].is_a?(Array)
end

#document_typesObject



41
42
43
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 41

def document_types
  @document_type ||= document['data'].map { |item| item['type'] }.uniq
end

#findObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 21

def find
  raise build_invalid_document_error unless document_is_valid_collection?

  # Skip the checks, no point running through them for an empty array
  return [] if document_ids.empty?

  # Ensure the document matches the expected resource
  check_document_types_match_deserializer!

  # Load resource from id value
  deserializer.load_collection_from_id_values(document_ids).tap do |collection|
    check_collection_contains_all_requested_resources!(collection)
    check_collection_is_authorised!(collection)
  end
end

#resource_typeObject



45
46
47
# File 'lib/fun_with_json_api/find_collection_from_document.rb', line 45

def resource_type
  @resource_type ||= deserializer.type
end