Skip to content

Commit c0c7398

Browse files
committed
Revert "Merge pull request #4635 from sanger/y24-213-remove-default-includes"
This reverts commit 8f0a2a0, reversing changes made to 822d54b.
1 parent f4cc1ee commit c0c7398

29 files changed

+115
-0
lines changed

app/resources/api/v2/aliquot_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ module V2
1414
# or look at the [JSONAPI::Resources](http://jsonapi-resources.com/) package for Sequencescape's implementation
1515
# of the JSON:API standard.
1616
class AliquotResource < BaseResource
17+
default_includes :tag, :tag2
18+
1719
# Associations
1820
has_one :study
1921
has_one :project

app/resources/api/v2/asset_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ module V2
1616
class AssetResource < BaseResource
1717
attributes :uuid
1818

19+
default_includes :uuid_object
20+
1921
has_one :custom_metadatum_collection
2022
has_many :comments, readonly: true
2123

app/resources/api/v2/barcode_printer_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module V2
1717
class BarcodePrinterResource < BaseResource
1818
immutable
1919

20+
default_includes :uuid_object
21+
2022
###
2123
# Attributes
2224
###

app/resources/api/v2/base_resource.rb

+54
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,60 @@ def fetchable_fields
4747
super - self.class._attributes.select { |_attr, options| options[:writeonly] }.keys -
4848
self.class._relationships.select { |_rel_key, rel| rel.options[:writeonly] }.keys
4949
end
50+
51+
# Eager load specified models by default. Useful when attributes are
52+
# dependent on an associated model.
53+
def self.default_includes(*inclusions)
54+
@default_includes = inclusions.freeze
55+
end
56+
57+
def self.inclusions
58+
@default_includes || [].freeze
59+
end
60+
61+
# Extends the default behaviour to add our default inclusions if provided
62+
def self.apply_includes(records, options = {})
63+
if @default_includes.present?
64+
super(records.preload(*inclusions), options)
65+
else
66+
super
67+
end
68+
end
69+
70+
# The majority of this is lifted from JSONAPI::Resource
71+
# We've had to modify the when Symbol chunk to handle nested includes
72+
# We disable the cops for the shared section to avoid accidental drift
73+
# due to auto-correct.
74+
# rubocop:disable all
75+
def self.resolve_relationship_names_to_relations(resource_klass, model_includes, options = {})
76+
case model_includes
77+
when Array
78+
return model_includes.map { |value| resolve_relationship_names_to_relations(resource_klass, value, options) }
79+
when Hash
80+
model_includes.keys.each do |key|
81+
relationship = resource_klass._relationships[key]
82+
value = model_includes[key]
83+
model_includes.delete(key)
84+
85+
# MODIFICATION BEGINS
86+
included_relationships =
87+
resolve_relationship_names_to_relations(relationship.resource_klass, value, options)
88+
model_includes[relationship.relation_name(options)] = relationship.resource_klass.inclusions +
89+
included_relationships
90+
# MODIFICATION ENDS
91+
end
92+
return model_includes
93+
when Symbol
94+
relationship = resource_klass._relationships[model_includes]
95+
96+
# MODIFICATION BEGINS
97+
# return relationship.relation_name(options)
98+
inclusions = relationship.resource_klass.inclusions
99+
{ relationship.relation_name(options) => inclusions }
100+
# MODIFICATION ENDS
101+
end
102+
end
103+
# rubocop:enable all
50104
end
51105
end
52106
end

app/resources/api/v2/custom_metadatum_collection_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ module V2
1414
# or look at the [JSONAPI::Resources](http://jsonapi-resources.com/) package for Sequencescape's implementation
1515
# of the JSON:API standard.
1616
class CustomMetadatumCollectionResource < BaseResource
17+
default_includes :uuid_object, :custom_metadata
18+
1719
###
1820
# Attributes
1921
###

app/resources/api/v2/labware_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class LabwareResource < BaseResource
1919
# is automatically available on plate and tube.
2020
include Api::V2::SharedBehaviour::Labware
2121

22+
default_includes :uuid_object, :barcodes
23+
2224
# Custom methods
2325
# These shouldn't be used for business logic, and are more about
2426
# I/O and isolating implementation details.

app/resources/api/v2/lot_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class LotResource < BaseResource
1818

1919
# model_name / model_hint if required
2020

21+
default_includes :uuid_object
22+
2123
# Associations:
2224
has_one :lot_type
2325
has_one :user

app/resources/api/v2/lot_type_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class LotTypeResource < BaseResource
2121

2222
# model_name / model_hint if required
2323

24+
default_includes :uuid_object
25+
2426
# Associations:
2527
has_one :target_purpose, write_once: true, class_name: 'Purpose'
2628

app/resources/api/v2/plate_resource.rb

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ class PlateResource < BaseResource
4747
# labware
4848
include Api::V2::SharedBehaviour::Labware
4949

50+
# TODO: {Y24-213} Possibly this line doesn't actually do anything and could be removed.
51+
default_includes :uuid_object, :barcodes, :plate_purpose, :transfer_requests
52+
5053
###
5154
# Attributes
5255
###

app/resources/api/v2/plate_template_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class PlateTemplateResource < BaseResource
1818

1919
# model_name / model_hint if required
2020

21+
default_includes :uuid_object
22+
2123
# Associations:
2224

2325
# Attributes

app/resources/api/v2/pre_capture_pool_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class PreCapturePoolResource < BaseResource
1818

1919
# model_name / model_hint if required
2020

21+
default_includes :uuid_object
22+
2123
# Associations:
2224

2325
# Attributes

app/resources/api/v2/project_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module V2
1717
class ProjectResource < BaseResource
1818
immutable
1919

20+
default_includes :uuid_object
21+
2022
attribute :name
2123
attribute :cost_code, delegate: :project_cost_code
2224
attribute :uuid, readonly: true

app/resources/api/v2/purpose_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class PurposeResource < BaseResource
1818

1919
# model_name / model_hint if required
2020

21+
default_includes :uuid_object
22+
2123
# Associations:
2224

2325
# Attributes

app/resources/api/v2/qcable_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class QcableResource < BaseResource
1818

1919
# model_name / model_hint if required
2020

21+
default_includes :uuid_object, :barcodes
22+
2123
# Associations:
2224
has_one :lot
2325
has_one :asset, polymorphic: true

app/resources/api/v2/receptacle_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class ReceptacleResource < BaseResource
1818
# attributes and filters. By adding behaviour here we ensure that it
1919
# is automatically available on well.
2020
include Api::V2::SharedBehaviour::Receptacle
21+
22+
default_includes :uuid_object
2123
end
2224
end
2325
end

app/resources/api/v2/request_resource.rb

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ module V2
1414
# or look at the [JSONAPI::Resources](http://jsonapi-resources.com/) package for Sequencescape's implementation
1515
# of the JSON:API standard.
1616
class RequestResource < BaseResource
17+
default_includes :uuid_object,
18+
{ request_metadata: %i[bait_library primer_panel] },
19+
:pooled_request,
20+
:order_role,
21+
:submission
22+
1723
# Attributes
1824
attribute :uuid, readonly: true
1925
attribute :role, write_once: true

app/resources/api/v2/request_type_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class RequestTypeResource < BaseResource
2121

2222
# model_name / model_hint if required
2323

24+
default_includes :uuid_object
25+
2426
# Associations:
2527

2628
# Attributes

app/resources/api/v2/sample_manifest_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module V2
1717
class SampleManifestResource < BaseResource
1818
immutable
1919

20+
default_includes :uuid_object
21+
2022
# Name of the supplier of the sample manifest
2123
attribute :supplier_name
2224
end

app/resources/api/v2/sample_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ module V2
1414
# or look at the [JSONAPI::Resources](http://jsonapi-resources.com/) package for Sequencescape's implementation
1515
# of the JSON:API standard.
1616
class SampleResource < BaseResource
17+
default_includes :uuid_object
18+
1719
has_one :sample_metadata, class_name: 'SampleMetadata', foreign_key_on: :related
1820
has_one :sample_manifest
1921

app/resources/api/v2/submission_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class SubmissionResource < BaseResource
2121

2222
# model_name / model_hint if required
2323

24+
default_includes :uuid_object, :sequencing_requests
25+
2426
# Associations:
2527

2628
# Attributes

app/resources/api/v2/submission_template_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module V2
1717
class SubmissionTemplateResource < BaseResource
1818
immutable
1919

20+
default_includes :uuid_object
21+
2022
###
2123
# Attributes
2224
###

app/resources/api/v2/tag_group_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class TagGroupResource < BaseResource
1818

1919
# model_name / model_hint if required
2020

21+
default_includes :uuid_object, :tags
22+
2123
# Associations:
2224
has_one :tag_group_adapter_type,
2325
foreign_key: :adapter_type_id,

app/resources/api/v2/transfer_request_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module V2
1717
class TransferRequestResource < BaseResource
1818
immutable
1919

20+
default_includes :uuid_object
21+
2022
# Attributes
2123
attribute :uuid, readonly: true
2224
attribute :state, readonly: true

app/resources/api/v2/transfer_template_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module V2
1717
class TransferTemplateResource < BaseResource
1818
immutable
1919

20+
default_includes :uuid_object
21+
2022
###
2123
# Attributes
2224
###

app/resources/api/v2/tube_rack_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class TubeRackResource < BaseResource
2020
# Instead this should be done as part of adding authentication to
2121
# the API in the security OKR.
2222

23+
default_includes :uuid_object, :barcodes
24+
2325
# Attributes
2426
attribute :created_at, readonly: true
2527
attribute :labware_barcode, write_once: true

app/resources/api/v2/tube_rack_status_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ module V2
1616
class TubeRackStatusResource < BaseResource
1717
# model_name / model_hint if required
1818

19+
default_includes :uuid_object
20+
1921
# Associations:
2022

2123
# Attributes

app/resources/api/v2/tube_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class TubeResource < BaseResource
1919

2020
immutable
2121

22+
default_includes :uuid_object, :barcodes, :transfer_requests_as_target
23+
2224
###
2325
# Attributes
2426
###

app/resources/api/v2/well_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ module V2
1616
class WellResource < BaseResource
1717
include Api::V2::SharedBehaviour::Receptacle
1818

19+
default_includes :uuid_object, :map, :transfer_requests_as_target, plate: :barcodes
20+
1921
# Attributes
2022
attribute :position, readonly: true
2123

app/resources/api/v2/work_order_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ module V2
1919
class WorkOrderResource < BaseResource
2020
IGNORED_METADATA_FIELDS = %w[id request_id created_at updated_at].freeze
2121

22+
default_includes [{ example_request: :request_metadata }, :work_order_type]
23+
2224
# Attributes
2325
attribute :at_risk
2426
attribute :options, readonly: true

0 commit comments

Comments
 (0)