module MangoPay::Jsonifier
To be included in order to apply JSON de/serialization methods
Constants
- LOG
Public Instance Methods
dejsonify(hash)
click to toggle source
De-serializes an object from a JSON-originating hash.
@param hash
[Hash] hash converted from an API-returned JSON string @return [Object] corresponding object (typed)
# File lib/mangopay/common/jsonifier.rb, line 60 def dejsonify(hash) return nil unless hash hash.each do |tag, value| field = JsonTagConverter.from_json_tag tag field_value = nil if field == 'type' if is_a? MangoModel::BankAccount field_value = MangoModel::AccountType.value_of value elsif is_a? MangoModel::KycDocument field_value = MangoModel::KycDocumentType.value_of value elsif is_a? MangoModel::DisputeDocument field_value = MangoModel::DisputeDocumentType.value_of value end end if field == 'status' if is_a? MangoModel::CardRegistration field_value = MangoModel::CardStatus.value_of value elsif is_a? MangoModel::PreAuthorization field_value = MangoModel::PreAuthorizationStatus.value_of value elsif is_a?(MangoModel::KycDocument) || is_a?(MangoModel::DisputeDocument) field_value = MangoModel::DocumentStatus.value_of value elsif is_a? MangoModel::UboDeclaration field_value = MangoModel::UboDeclarationStatus.value_of value elsif is_a? MangoModel::DeclaredUbo field_value = MangoModel::DeclaredUboStatus.value_of value elsif is_a? MangoModel::Hook field_value = MangoModel::HookStatus.value_of value elsif is_a? MangoModel::Dispute field_value = MangoModel::DisputeStatus.value_of value elsif is_a? MangoModel::Report field_value = MangoModel::ReportStatus.value_of value end end if is_a? MangoModel::Mandate if field == 'culture' field_value = MangoModel::MandateCultureCode.value_of value elsif field == 'status' field_value = MangoModel::MandateStatus.value_of value elsif field == 'execution_type' field_value = MangoModel::MandateExecutionType.value_of value end end if field == 'execution_type' && is_a?(MangoModel::PreAuthorization) field_value = MangoModel::PreAuthorizationExecutionType.value_of value end if field == 'payment_type' && is_a?(MangoModel::PayOut) field_value = MangoModel::PayOutPaymentType.value_of value end if field == 'refused_reason_type' if is_a? MangoModel::DeclaredUbo field_value = MangoModel::DeclaredUboRefusedReasonType.value_of value elsif is_a? MangoModel::DisputeDocument field_value = MangoModel::DisputeDocRefusedReasonType.value_of value end end if field == 'validity' && is_a?(MangoModel::Hook) field_value = MangoModel::HookValidity.value_of value end if field == 'date' && is_a?(MangoModel::Event) field_value = value end if field == 'declared_ubos' && is_a?(MangoModel::UboDeclaration) field_value = [] value.each do |declared_ubo| field_value << MangoModel::DeclaredUbo.new.dejsonify(declared_ubo) end end if field == 'bank_account' && is_a?(MangoModel::BankWireDirectPayIn) field_value = case value['Type'] when MangoModel::AccountType::IBAN.to_s MangoModel::IbanBankAccount.new.dejsonify value when MangoModel::AccountType::US.to_s MangoModel::UsBankAccount.new.dejsonify value when MangoModel::AccountType::CA.to_s MangoModel::CaBankAccount.new.dejsonify value when MangoModel::AccountType::GB.to_s MangoModel::GbBankAccount.new.dejsonify value when MangoModel::AccountType::OTHER.to_s MangoModel::OtherBankAccount.new.dejsonify value else raise 'Unrecognized bank account type: ' + value['Type'] end end if field == 'debited_bank_account' && is_a?(MangoModel::BankWireExternalInstructionPayIn) field_value = MangoModel::DebitedBankAccount.new.dejsonify value end field_value ||= case field when *MangoModel.fields_of_type(MangoModel::Address) MangoModel::Address.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::Money) MangoModel::Money.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::RefundReason) MangoModel::RefundReason.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::DisputeReason) MangoModel::DisputeReason.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::PlatformCategorization) MangoModel::PlatformCategorization.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::Billing) MangoModel::Billing.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::Shipping) MangoModel::Shipping.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::BrowserInfo) MangoModel::BrowserInfo.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::SecurityInfo) MangoModel::SecurityInfo.new.dejsonify value when *MangoModel.fields_of_type(MangoModel::PersonType) MangoModel::PersonType.value_of value when *MangoModel.fields_of_type(MangoModel::KycLevel) MangoModel::KycLevel.value_of value when *MangoModel.fields_of_type(MangoModel::LegalPersonType) MangoModel::LegalPersonType.value_of value when *MangoModel.fields_of_type(MangoModel::CountryIso) MangoModel::CountryIso.value_of value when *MangoModel.fields_of_type(MangoModel::DepositType) MangoModel::DepositType.value_of value when *MangoModel.fields_of_type(MangoModel::CurrencyIso) MangoModel::CurrencyIso.value_of value when *MangoModel.fields_of_type(MangoModel::FundsType) MangoModel::FundsType.value_of value when *MangoModel.fields_of_type(MangoModel::PlatformType) MangoModel::PlatformType.value_of value when *MangoModel.fields_of_type(MangoModel::TransactionType) MangoModel::TransactionType.value_of value when *MangoModel.fields_of_type(MangoModel::TransactionNature) MangoModel::TransactionNature.value_of value when *MangoModel.fields_of_type(MangoModel::TransactionStatus) MangoModel::TransactionStatus.value_of value when *MangoModel.fields_of_type(MangoModel::PayInPaymentType) MangoModel::PayInPaymentType.value_of value when *MangoModel.fields_of_type(MangoModel::PayInExecutionType) MangoModel::PayInExecutionType.value_of value when *MangoModel.fields_of_type(MangoModel::CardType) MangoModel::CardType.value_of value when *MangoModel.fields_of_type(MangoModel::SecureMode) MangoModel::SecureMode.value_of value when *MangoModel.fields_of_type(MangoModel::CultureCode) MangoModel::CultureCode.value_of value when *MangoModel.fields_of_type(MangoModel::CardValidity) MangoModel::CardValidity.value_of value when *MangoModel.fields_of_type(MangoModel::PaymentStatus) MangoModel::PaymentStatus.value_of value when *MangoModel.fields_of_type(MangoModel::DirectDebitType) MangoModel::DirectDebitType.value_of value when *MangoModel.fields_of_type(MangoModel::MandateScheme) MangoModel::MandateScheme.value_of value when *MangoModel.fields_of_type(MangoModel::MandateType) MangoModel::MandateType.value_of value when *MangoModel.fields_of_type(MangoModel::KycDocRefusedReasonType) MangoModel::KycDocRefusedReasonType.value_of value when *MangoModel.fields_of_type(MangoModel::NaturalUserCapacity) MangoModel::NaturalUserCapacity.value_of value when *MangoModel.fields_of_type(MangoModel::EventType) MangoModel::EventType.value_of value when *MangoModel.fields_of_type(MangoModel::RefundReasonType) MangoModel::RefundReasonType.value_of value when *MangoModel.fields_of_type(MangoModel::DisputeType) MangoModel::DisputeType.value_of value when *MangoModel.fields_of_type(MangoModel::DisputeReasonType) MangoModel::DisputeReasonType.value_of value when *MangoModel.fields_of_type(MangoModel::DisputeStatus) MangoModel::DisputeStatus.value_of value when *MangoModel.fields_of_type(MangoModel::DownloadFormat) MangoModel::DownloadFormat.value_of value when *MangoModel.fields_of_type(MangoModel::ReportType) MangoModel::ReportType.value_of value when *MangoModel.fields_of_type(MangoModel::BusinessType) MangoModel::BusinessType.value_of value when *MangoModel.fields_of_type(MangoModel::Sector) MangoModel::Sector.value_of value when *MangoModel.fields_of_type(MangoModel::AvsResult) MangoModel::AvsResult.value_of value when *MangoModel.fields_of_type(DateTime) DateTime.parse value when *MangoModel.fields_of_type(MangoModel::ScopeBlocked) MangoModel::ScopeBlocked.value_of value else value end instance_variable_set "@#{field}", field_value end LOG.debug 'DE-JSONIFIED {}', hash LOG.debug 'INTO {}', inspect self end
jsonify!()
click to toggle source
Serializes an object to a JSON string. Read-only fields will be removed
@return [String] JSON string of non-read-only fields and values
# File lib/mangopay/common/jsonifier.rb, line 44 def jsonify! json = hashed_variables.to_json # hash.to_json() sometimes adds # unnecessary backslashes and double quotes json.delete!('\\') json.gsub!(/"{/, '{') json.gsub!(/}"/, '}') LOG.debug 'JSONIFIED {}', inspect LOG.debug 'INTO {}', json json end
Private Instance Methods
hashed_variables()
click to toggle source
Prepares a hash mapping API-standard instance variable names to their JSON values. Removes any of the fields which are considered read-only by the API
# File lib/mangopay/common/jsonifier.rb, line 251 def hashed_variables hash = {} instance_variables.each do |var| key = JsonTagConverter.to_json_tag var.to_s[1..-1] value = json_value_for var hash[key] = value end ReadOnlyFields.remove_from! hash hash end
json_value_for(var_name)
click to toggle source
Converts the value in a specified instance variable to its JSON representation.
# File lib/mangopay/common/jsonifier.rb, line 264 def json_value_for(var_name) var_value = instance_variable_get var_name begin if var_value.singleton_class.included_modules.include? Jsonifier var_value.jsonify! else var_value end rescue TypeError # raised by .singleton_class() when called on primitives var_value end end