Class: Api::V2::BaseResource Abstract
- Inherits:
-
JSONAPI::Resource
- Object
- JSONAPI::Resource
- Api::V2::BaseResource
- Defined in:
- app/resources/api/v2/base_resource.rb
Overview
This class is abstract and should not be instantiated directly.
For more information about JSON:API, see the JSON:API Specifications or refer to the JSONAPI::Resources package.
Provides a base class for JSON:API representations of ApplicationRecord sub-classes.
This class extends JSONAPI::Resource and serves as the foundation for all API v2 resources.
Key Features:
- Implements JSON:API standard resource handling.
- Provides global model hints for common resource models.
- Defines attribute and relationship access restrictions (
readonly,write_once,writeonly). - Customizes the creatable, updatable, and fetchable fields logic.
Direct Known Subclasses
AliquotResource, AssetAuditResource, AssetResource, BaitLibraryLayoutResource, BarcodePrinterResource, BulkTransferResource, CommentResource, CustomMetadatumCollectionResource, FacultySponsorResource, LabwareResource, LaneResource, LotResource, LotTypeResource, OrderResource, PickListResource, PlateConversionResource, PlateCreationResource, PlatePurposeResource, PlateResource, PolyMetadatumResource, PooledPlateCreationResource, PreCapturePoolResource, PrimerPanelResource, ProjectResource, PurposeResource, QcAssayResource, QcFileResource, QcResultResource, QcableCreatorResource, QcableResource, RackedTubeResource, ReceptacleResource, RequestMetadataResource, RequestResource, RequestTypeResource, SampleManifestResource, SampleMetadataResource, SampleResource, SpecificTubeCreationResource, SpecificTubeRackCreationResource, StateChangeResource, StudyMetadataResource, StudyResource, SubmissionPoolResource, SubmissionResource, SubmissionTemplateResource, TagGroupAdapterTypeResource, TagGroupResource, TagLayoutResource, TagLayoutTemplateResource, TagResource, TagSetResource, TemplateResource, TransferRequestCollectionResource, TransferRequestResource, TransferResource, TransferTemplateResource, TubeFromPlateCreationResource, TubeFromTubeCreationResource, TubePurposeResource, TubeRackPurposeResource, TubeRackResource, TubeRackStatusResource, TubeResource, UserResource, VolumeUpdateResource, WellResource, WorkCompletionResource, WorkOrderResource
Class Method Summary collapse
-
.apply_includes(records, options = {}) ⇒ Object
Extends the default behaviour to add our default inclusions if provided.
-
.creatable_fields(context) ⇒ Set<Symbol>
Determines which fields can be set when creating a new resource.
-
.default_includes(*inclusions) ⇒ Object
Eager load specified models by default.
- .inclusions ⇒ Object
-
.resolve_relationship_names_to_relations(resource_klass, model_includes, options = {}) ⇒ Object
The majority of this is lifted from JSONAPI::Resource We've had to modify the when Symbol chunk to handle nested includes We disable the cops for the shared section to avoid accidental drift due to auto-correct.
-
.updatable_fields(context) ⇒ Set<Symbol>
Determines which fields can be updated after a resource has been created.
Instance Method Summary collapse
-
#fetchable_fields ⇒ Set<Symbol>
Determines which fields can be read when fetching a resource.
Class Method Details
.apply_includes(records, options = {}) ⇒ Object
Extends the default behaviour to add our default inclusions if provided
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'app/resources/api/v2/base_resource.rb', line 95 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
.creatable_fields(context) ⇒ Set<Symbol>
Determines which fields can be set when creating a new resource.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/resources/api/v2/base_resource.rb', line 58 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
.default_includes(*inclusions) ⇒ Object
Eager load specified models by default. Useful when attributes are dependent on an associated model.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/resources/api/v2/base_resource.rb', line 86 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
.inclusions ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'app/resources/api/v2/base_resource.rb', line 90 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
.resolve_relationship_names_to_relations(resource_klass, model_includes, options = {}) ⇒ Object
The majority of this is lifted from JSONAPI::Resource We've had to modify the when Symbol chunk to handle nested includes We disable the cops for the shared section to avoid accidental drift due to auto-correct. rubocop:disable all
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'app/resources/api/v2/base_resource.rb', line 108 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
.updatable_fields(context) ⇒ Set<Symbol>
Determines which fields can be updated after a resource has been created.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/resources/api/v2/base_resource.rb', line 67 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |
Instance Method Details
#fetchable_fields ⇒ Set<Symbol>
Determines which fields can be read when fetching a resource.
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/resources/api/v2/base_resource.rb', line 79 do # NOTE: The following attribute is not required for Microarray Genotyping. # I think this might be broken and suggests that there should be separate classes for project: one for # next-gen sequencing that includes this attribute in it's metadata, and one for microarray genotyping # that doesn't. include ProjectManager::Associations include BudgetDivision::Associations custom_attribute(:project_cost_code, required: true) custom_attribute(:funding_comments) custom_attribute(:collaborators) custom_attribute(:external_funding_source) custom_attribute(:sequencing_budget_cost_centre) custom_attribute(:project_funding_model, in: PROJECT_FUNDING_MODELS) custom_attribute(:gt_committee_tracking_id) before_validation do |record| record.project_cost_code = nil if record.project_cost_code.blank? record.project_funding_model = nil if record.project_funding_model.blank? end end |