Module: Crystalline::MetadataFields

Included in:
KintsugiSDK::Models::Errors::APIError, KintsugiSDK::Models::Errors::BackendSrcAddressValidationResponsesValidationErrorResponse, KintsugiSDK::Models::Errors::BackendSrcCustomersResponsesValidationErrorResponse, KintsugiSDK::Models::Errors::BackendSrcExemptionsResponsesValidationErrorResponse, KintsugiSDK::Models::Errors::BackendSrcProductsResponsesValidationErrorResponse, KintsugiSDK::Models::Errors::BackendSrcTaxEstimationResponsesValidationErrorResponse, KintsugiSDK::Models::Errors::BackendSrcTransactionsResponsesValidationErrorResponse, KintsugiSDK::Models::Errors::ErrorResponse, KintsugiSDK::Models::Errors::HTTPValidationError, KintsugiSDK::Models::Ops::CreateTransactionByCustomerRequest, KintsugiSDK::Models::Ops::EstimateTaxV1TaxEstimatePostRequest, KintsugiSDK::Models::Ops::GetCustomerByExternalIdV1CustomersExternalExternalIdGetRequest, KintsugiSDK::Models::Ops::GetCustomerByIdV1CustomersCustomerIdGetRequest, KintsugiSDK::Models::Ops::GetCustomersV1Request, KintsugiSDK::Models::Ops::GetExemptionAttachmentsRequest, KintsugiSDK::Models::Ops::GetExemptionByIdV1ExemptionsExemptionIdGetRequest, KintsugiSDK::Models::Ops::GetExemptionsV1ExemptionsGetRequest, KintsugiSDK::Models::Ops::GetNexusForOrgV1NexusGetRequest, KintsugiSDK::Models::Ops::GetProductByIdV1ProductsProductIdGetRequest, KintsugiSDK::Models::Ops::GetProductsV1ProductsGetRequest, KintsugiSDK::Models::Ops::GetTransactionByExternalIdRequest, KintsugiSDK::Models::Ops::GetTransactionByIdV1TransactionsTransactionIdGetRequest, KintsugiSDK::Models::Ops::GetTransactionsByCustomerRequest, KintsugiSDK::Models::Ops::GetTransactionsByFilingRequest, KintsugiSDK::Models::Ops::GetTransactionsV1TransactionsGetRequest, KintsugiSDK::Models::Ops::SearchV1AddressValidationSearchPostSecurity, KintsugiSDK::Models::Ops::UpdateCustomerV1CustomersCustomerIdPutRequest, KintsugiSDK::Models::Ops::UpdateProductV1ProductsProductIdPutRequest, KintsugiSDK::Models::Ops::UpdateTransactionV1TransactionsTransactionIdPutRequest, KintsugiSDK::Models::Ops::UploadExemptionCertRequest, KintsugiSDK::Models::Shared::AddressBase, KintsugiSDK::Models::Shared::AddressResponseData, KintsugiSDK::Models::Shared::AddressSearchResponse, KintsugiSDK::Models::Shared::AddressSubmittedResponse, KintsugiSDK::Models::Shared::Addresses, KintsugiSDK::Models::Shared::AttachmentRead, KintsugiSDK::Models::Shared::BackendSrcAddressValidationResponsesValidationErrorItem, KintsugiSDK::Models::Shared::BackendSrcCustomersResponsesValidationErrorItem, KintsugiSDK::Models::Shared::BackendSrcExemptionsModelsExemptionRead, KintsugiSDK::Models::Shared::BackendSrcExemptionsResponsesValidationErrorItem, KintsugiSDK::Models::Shared::BackendSrcExemptionsSerializersExemptionRead, KintsugiSDK::Models::Shared::BackendSrcProductsResponsesValidationErrorItem, KintsugiSDK::Models::Shared::BackendSrcTaxEstimationResponsesValidationErrorItem, KintsugiSDK::Models::Shared::BackendSrcTransactionsResponsesValidationErrorItem, KintsugiSDK::Models::Shared::BodyUploadExemptionCertificateV1ExemptionsExemptionIdAttachmentsPost, KintsugiSDK::Models::Shared::CustomerBase, KintsugiSDK::Models::Shared::CustomerBaseBase, KintsugiSDK::Models::Shared::CustomerBasePublic, KintsugiSDK::Models::Shared::CustomerCreate, KintsugiSDK::Models::Shared::CustomerRead, KintsugiSDK::Models::Shared::CustomerUpdate, KintsugiSDK::Models::Shared::DiscountBuilder, KintsugiSDK::Models::Shared::Exemption, KintsugiSDK::Models::Shared::ExemptionCreate, KintsugiSDK::Models::Shared::ExemptionRequired, KintsugiSDK::Models::Shared::FastapiPaginationDefaultPageExemptionRead2, KintsugiSDK::Models::Shared::File, KintsugiSDK::Models::Shared::NexusResponse, KintsugiSDK::Models::Shared::PageCustomerRead, KintsugiSDK::Models::Shared::PageNexusResponse, KintsugiSDK::Models::Shared::PageProductRead, KintsugiSDK::Models::Shared::PageTransactionEstimateResponse, KintsugiSDK::Models::Shared::PageTransactionRead, KintsugiSDK::Models::Shared::ProductCategories, KintsugiSDK::Models::Shared::ProductCreateManual, KintsugiSDK::Models::Shared::ProductRead, KintsugiSDK::Models::Shared::ProductSubCategory, KintsugiSDK::Models::Shared::ProductUpdate, KintsugiSDK::Models::Shared::Registration, KintsugiSDK::Models::Shared::Security, KintsugiSDK::Models::Shared::TaxItemBuilder, KintsugiSDK::Models::Shared::TaxItemEstimate, KintsugiSDK::Models::Shared::TaxItemRead, KintsugiSDK::Models::Shared::TransactionAddressBuilder, KintsugiSDK::Models::Shared::TransactionAddressPublic, KintsugiSDK::Models::Shared::TransactionAddressReadOutput, KintsugiSDK::Models::Shared::TransactionCreate, KintsugiSDK::Models::Shared::TransactionEstimatePublicRequest, KintsugiSDK::Models::Shared::TransactionEstimateResponse, KintsugiSDK::Models::Shared::TransactionEstimateResponseAddresses, KintsugiSDK::Models::Shared::TransactionItemBuilder, KintsugiSDK::Models::Shared::TransactionItemCreateUpdate, KintsugiSDK::Models::Shared::TransactionItemEstimateBase, KintsugiSDK::Models::Shared::TransactionItemEstimateResponse, KintsugiSDK::Models::Shared::TransactionItemRead, KintsugiSDK::Models::Shared::TransactionPublicRequest, KintsugiSDK::Models::Shared::TransactionRead, KintsugiSDK::Models::Shared::TransactionUpdate, KintsugiSDK::Models::Shared::ValidationAddress, KintsugiSDK::Models::Shared::ValidationError
Defined in:
lib/crystalline/metadata_fields.rb

Defined Under Namespace

Modules: ClassMethods Classes: Field

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



151
152
153
# File 'lib/crystalline/metadata_fields.rb', line 151

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#field(field_name) ⇒ Object



159
160
161
162
163
# File 'lib/crystalline/metadata_fields.rb', line 159

def field(field_name)
  fields.each do |f|
    return f if f.name == field_name
  end
end

#fieldsObject



155
156
157
# File 'lib/crystalline/metadata_fields.rb', line 155

def fields
  self.class.fields
end

#initializeObject



145
146
147
148
149
# File 'lib/crystalline/metadata_fields.rb', line 145

def initialize
  instance = allocate
  fields.each { |mod| instance.singleton_class.include(mod) }
  instance.send(:initialize)
end

#marshal_single(field) ⇒ Object



165
166
167
168
169
170
171
172
173
174
175
# File 'lib/crystalline/metadata_fields.rb', line 165

def marshal_single(field)
  if field.class.include? ::Crystalline::MetadataFields
    field.to_dict
  else
    if ::Crystalline.needs_string_conversion field
      ::Crystalline.json_encode field
    else
      field
    end
  end
end

#to_dictObject



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/crystalline/metadata_fields.rb', line 177

def to_dict
  result = {}
  fields.sort_by(&:name).each do |field|
    format_json_meta = field.[:format_json]
    required = !format_json_meta.nil? && format_json_meta.include?(:required)
    if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
      key = format_json_meta[:letter_case].call(field.name)
    else
      key = field.name
    end

    f = send(field.name)
    next if f.nil? && !required
    result[key] = nil if f.nil? && required

    if f.is_a? Array
      result[key] = f.map { |o| marshal_single(o) }
    elsif f.is_a? Hash
      result[key] = f.map { |k, v| [k, marshal_single(v)] }
    else
      result[key] = marshal_single(f)
    end
  end
  result
end

#to_json(*args) ⇒ Object



203
204
205
# File 'lib/crystalline/metadata_fields.rb', line 203

def to_json(*args)
  JSON.generate(to_dict, *args)
end