Add properties merge plugin

This commit is contained in:
k.struzhkin 2019-03-28 17:39:12 +03:00
parent bc192e4275
commit fe0083b954
5 changed files with 172 additions and 141 deletions

View File

@ -0,0 +1,35 @@
var jpointer = require('json-pointer');
var mergePatch = require('json-merge-patch');
module.exports = {
pathExpression: '$..["x-merge-properties"]',
init: function(swagger) {
console.log('* x-merge-properties plugin');
},
process: function(parent, name, jsonpath, swagger) {
console.log('jsonpath' + jsonpath);
var value = parent[name];
if (!Array.isArray(value)) {
throw Error('x-merge-properties argument should be array at ' + jsonpath);
}
let props = {};
let required = [];
value.forEach(function(obj) {
if (typeof obj !== 'object') throw Error('Can\'t merge non-object values at ' + jsonpath);
if (obj.$ref && (typeof obj.$ref === 'string')) {
obj = jpointer.get(swagger, obj.$ref.substring(1));
}
if (!obj.properties) throw Error('Can\'t merge properties is undefiend ' + jsonpath);
props = mergePatch.apply(props, obj.properties);
required = required.concat(obj.required);
});
delete parent[name];
Object.assign(parent.properties, props);
let arr = parent.required.concat(required);
Object.assign(parent.required, arr);
},
finish: function(swagger) {
// TODO: cleanup unused $refs
},
}

View File

@ -1,13 +1,13 @@
type: object
allOf:
- $ref: '#/definitions/CustomerBindingStatus'
- type: object
required:
- id
- paymentResource
properties:
id:
description: Идентификатор привязки
type: string
paymentResource:
$ref: '#/definitions/PaymentResource'
required:
- id
- paymentResource
properties:
id:
description: Идентификатор привязки
type: string
paymentResource:
$ref: '#/definitions/PaymentResource'
x-merge-properties:
- $ref: '#/definitions/CustomerBindingStatus'

View File

@ -1,56 +1,56 @@
type: object
allOf:
- $ref: '#/definitions/InvoiceStatus'
- type: object
required:
- id
- shopID
- createdAt
- dueDate
- amount
- currency
- product
- metadata
properties:
id:
description: Идентификатор инвойса
type: string
shopID:
description: Идентификатор магазина
type: string
externalID:
$ref: '#/definitions/ExternalID'
createdAt:
description: Дата и время создания
type: string
format: date-time
dueDate:
description: Дата и время окончания действия
type: string
format: date-time
amount:
description: |
Стоимость предлагаемых товаров или услуг, в минорных денежных единицах,
например в копейках в случае указания российских рублей в качестве валюты.
type: integer
format: int64
minimum: 1
currency:
x-rebillyMerge:
- $ref: '#/definitions/Currency'
product:
description: Наименование предлагаемых товаров или услуг
type: string
maxLength: 100
description:
description: Описание предлагаемых товаров или услуг
type: string
maxLength: 1000
invoiceTemplateID:
description: Идентификатор шаблона (для инвойсов, созданных по шаблону).
type: string
cart:
$ref: '#/definitions/InvoiceCart'
metadata:
description: Связанные с инвойсом метаданные
type: object
required:
- id
- shopID
- createdAt
- dueDate
- amount
- currency
- product
- metadata
properties:
id:
description: Идентификатор инвойса
type: string
shopID:
description: Идентификатор магазина
type: string
externalID:
$ref: '#/definitions/ExternalID'
createdAt:
description: Дата и время создания
type: string
format: date-time
dueDate:
description: Дата и время окончания действия
type: string
format: date-time
amount:
description: |
Стоимость предлагаемых товаров или услуг, в минорных денежных единицах,
например в копейках в случае указания российских рублей в качестве валюты.
type: integer
format: int64
minimum: 1
currency:
x-rebillyMerge:
- $ref: '#/definitions/Currency'
product:
description: Наименование предлагаемых товаров или услуг
type: string
maxLength: 100
description:
description: Описание предлагаемых товаров или услуг
type: string
maxLength: 1000
invoiceTemplateID:
description: Идентификатор шаблона (для инвойсов, созданных по шаблону).
type: string
cart:
$ref: '#/definitions/InvoiceCart'
metadata:
description: Связанные с инвойсом метаданные
type: object
x-merge-properties:
- $ref: '#/definitions/InvoiceStatus'

View File

@ -1,46 +1,42 @@
type: object
allOf:
- $ref: '#/definitions/PaymentStatus'
- type: object
required:
- id
- invoiceID
- createdAt
- amount
- currency
- flow
- payer
properties:
id:
description: Идентификатор платежа
type: string
externalID:
$ref: '#/definitions/ExternalID'
invoiceID:
description: 'Идентификатор инвойса, в рамках которого был создан платеж'
type: string
createdAt:
description: Дата и время создания
type: string
format: date-time
amount:
description: >
Стоимость предлагаемых товаров или услуг, в минорных денежных
единицах,
required:
- id
- invoiceID
- createdAt
- amount
- currency
- payer
properties:
id:
description: Идентификатор платежа
type: string
externalID:
$ref: '#/definitions/ExternalID'
invoiceID:
description: 'Идентификатор инвойса, в рамках которого был создан платеж'
type: string
createdAt:
description: Дата и время создания
type: string
format: date-time
amount:
description: >
Стоимость предлагаемых товаров или услуг, в минорных денежных
единицах,
например в копейках в случае указания российских рублей в качестве
валюты.
type: integer
format: int64
minimum: 1
currency:
x-rebillyMerge:
- $ref: '#/definitions/Currency'
flow:
$ref: '#/definitions/PaymentFlow'
payer:
$ref: '#/definitions/Payer'
makeRecurrent:
x-rebillyMerge:
- $ref: '#/definitions/PaymentMakeRecurrent'
- readOnly: true
например в копейках в случае указания российских рублей в качестве
валюты.
type: integer
format: int64
minimum: 1
currency:
x-rebillyMerge:
- $ref: '#/definitions/Currency'
payer:
$ref: '#/definitions/Payer'
makeRecurrent:
x-rebillyMerge:
- $ref: '#/definitions/PaymentMakeRecurrent'
x-merge-properties:
- $ref: '#/definitions/PaymentStatus'

View File

@ -1,31 +1,31 @@
type: object
allOf:
- $ref: '#/definitions/RefundStatus'
- type: object
required:
- id
- createdAt
- amount
- currency
properties:
id:
description: Идентификатор возврата
type: string
createdAt:
description: Дата и время осуществления
type: string
format: date-time
amount:
description: >
Сумма возврата, в минорных денежных единицах,
например в копейках в случае указания российских рублей в качестве
валюты.
type: integer
format: int64
minimum: 1
currency:
x-rebillyMerge:
- $ref: '#/definitions/Currency'
reason:
description: Причина осуществления возврата
type: string
required:
- id
- createdAt
- amount
- currency
properties:
id:
description: Идентификатор возврата
type: string
createdAt:
description: Дата и время осуществления
type: string
format: date-time
amount:
description: >
Сумма возврата, в минорных денежных единицах,
например в копейках в случае указания российских рублей в качестве
валюты.
type: integer
format: int64
minimum: 1
currency:
x-rebillyMerge:
- $ref: '#/definitions/Currency'
reason:
description: Причина осуществления возврата
type: string
x-merge-properties:
- $ref: '#/definitions/RefundStatus'