Class: ApiOperation::PayloadDigest
- Inherits:
-
Object
- Object
- ApiOperation::PayloadDigest
- Defined in:
- app/models/api_operation/payload_digest.rb
Overview
Computes the digest of an API operation payload, which tells a repeated request from a changed one.
The payload is parsed and written again as compact JSON, with the object keys sorted at every level, and the SHA-256 of that text is the digest. So key order, whitespace and how a decimal is written (e.g. 1.10 or 1.1) don't change the digest, while array order, values, and whether a number is an integer or a decimal (1 or 1.0) do.
Class Method Summary collapse
-
.hexdigest(payload) ⇒ String
The SHA-256 hex digest, 64 characters.
Class Method Details
.hexdigest(payload) ⇒ String
Returns the SHA-256 hex digest, 64 characters.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'app/models/api_operation/payload_digest.rb', line 15 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 |