From a60456605a79c4e1d40271ace0075620c51ec194 Mon Sep 17 00:00:00 2001 From: Grzegorz Ziolkowski Date: Wed, 20 Mar 2019 13:17:07 +0100 Subject: [PATCH 1/5] Block API: Improve validation after block gets filters applied --- packages/blocks/CHANGELOG.md | 6 ++++++ packages/blocks/src/api/registration.js | 17 ++++++++++++++--- packages/blocks/src/api/test/registration.js | 17 +++++++++++++---- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md index 96d8125c985e1..95b131ededb9f 100644 --- a/packages/blocks/CHANGELOG.md +++ b/packages/blocks/CHANGELOG.md @@ -1,3 +1,9 @@ +## 6.2.0 (Unreleased) + +### New Feature + +- Added a default implementation for `save` setting in `registerBlockType` which saves no markup in the post content. + ## 6.1.0 (2019-03-06) ### New Feature diff --git a/packages/blocks/src/api/registration.js b/packages/blocks/src/api/registration.js index 727ee171f2b79..fcd2662c42927 100644 --- a/packages/blocks/src/api/registration.js +++ b/packages/blocks/src/api/registration.js @@ -3,7 +3,12 @@ /** * External dependencies */ -import { get, isFunction, some } from 'lodash'; +import { + get, + isFunction, + isPlainObject, + some, +} from 'lodash'; /** * WordPress dependencies @@ -91,10 +96,16 @@ export function registerBlockType( name, settings ) { } settings = applyFilters( 'blocks.registerBlockType', settings, name ); + if ( ! isPlainObject( settings ) ) { + console.error( + 'Block settings need to remain a plain object after all "blocks.registerBlockType" filters are applied.' + ); + return; + } - if ( ! settings || ! isFunction( settings.save ) ) { + if ( ! isFunction( settings.save ) ) { console.error( - 'The "save" property must be specified and must be a valid function.' + 'The "save" property must be a valid function.' ); return; } diff --git a/packages/blocks/src/api/test/registration.js b/packages/blocks/src/api/test/registration.js index 7b47b97afb840..981fcb9174b0b 100644 --- a/packages/blocks/src/api/test/registration.js +++ b/packages/blocks/src/api/test/registration.js @@ -3,7 +3,7 @@ /** * External dependencies */ -import { noop, omit } from 'lodash'; +import { noop } from 'lodash'; /** * WordPress dependencies @@ -106,6 +106,15 @@ describe( 'blocks', () => { expect( block ).toBeUndefined(); } ); + it( 'should reject blocks with invalid save function', () => { + const block = registerBlockType( 'my-plugin/fancy-block-5', { + ...defaultBlockSettings, + save: 'invalid', + } ); + expect( console ).toHaveErroredWith( 'The "save" property must be a valid function.' ); + expect( block ).toBeUndefined(); + } ); + it( 'should reject blocks with an invalid edit function', () => { const blockType = { save: noop, edit: 'not-a-function', category: 'common', title: 'block title' }, block = registerBlockType( 'my-plugin/fancy-block-6', blockType ); @@ -318,12 +327,12 @@ describe( 'blocks', () => { expect( block ).toBeUndefined(); } ); - it( 'should reject valid blocks when they become invalid after executing filter which removes save property', () => { + it( 'should reject blocks which become invalid after executing filter which does not return a plain object', () => { addFilter( 'blocks.registerBlockType', 'core/blocks/without-save', ( settings ) => { - return omit( settings, 'save' ); + return [ settings ]; } ); const block = registerBlockType( 'my-plugin/fancy-block-13', defaultBlockSettings ); - expect( console ).toHaveErroredWith( 'The "save" property must be specified and must be a valid function.' ); + expect( console ).toHaveErroredWith( 'Block settings need to remain a plain object after all "blocks.registerBlockType" filters are applied.' ); expect( block ).toBeUndefined(); } ); } ); From f2567825f8573c1c890e4447d5dc7f89e67b4b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=28Greg=29=20Zi=C3=B3=C5=82kowski?= Date: Mon, 25 Mar 2019 09:47:00 +0100 Subject: [PATCH 2/5] Update CHANGELOG.md --- packages/blocks/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md index 95b131ededb9f..8aaf474bdc0f0 100644 --- a/packages/blocks/CHANGELOG.md +++ b/packages/blocks/CHANGELOG.md @@ -1,4 +1,4 @@ -## 6.2.0 (Unreleased) +## 6.3.0 (Unreleased) ### New Feature From 6d5f2725ca27190e70eb816183a1e2d7a4da0f62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=28Greg=29=20Zi=C3=B3=C5=82kowski?= Date: Thu, 28 Mar 2019 12:36:23 +0100 Subject: [PATCH 3/5] Update CHANGELOG.md --- packages/blocks/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md index 8aaf474bdc0f0..1a4454efb0f29 100644 --- a/packages/blocks/CHANGELOG.md +++ b/packages/blocks/CHANGELOG.md @@ -4,6 +4,10 @@ - Added a default implementation for `save` setting in `registerBlockType` which saves no markup in the post content. +## 6.2.0 (2019-03-20) + +- Maintenance minor version increment. + ## 6.1.0 (2019-03-06) ### New Feature From c6cf8023f719e0e3c3d7919ebe0ba8e2649b0720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=28Greg=29=20Zi=C3=B3=C5=82kowski?= Date: Thu, 28 Mar 2019 12:40:43 +0100 Subject: [PATCH 4/5] Apply suggestions from code review Co-Authored-By: gziolo --- packages/blocks/src/api/registration.js | 2 +- packages/blocks/src/api/test/registration.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/blocks/src/api/registration.js b/packages/blocks/src/api/registration.js index fcd2662c42927..f6d5a29544803 100644 --- a/packages/blocks/src/api/registration.js +++ b/packages/blocks/src/api/registration.js @@ -98,7 +98,7 @@ export function registerBlockType( name, settings ) { settings = applyFilters( 'blocks.registerBlockType', settings, name ); if ( ! isPlainObject( settings ) ) { console.error( - 'Block settings need to remain a plain object after all "blocks.registerBlockType" filters are applied.' + 'Block settings must be a valid object.' ); return; } diff --git a/packages/blocks/src/api/test/registration.js b/packages/blocks/src/api/test/registration.js index 981fcb9174b0b..05cc3140779ea 100644 --- a/packages/blocks/src/api/test/registration.js +++ b/packages/blocks/src/api/test/registration.js @@ -332,7 +332,7 @@ describe( 'blocks', () => { return [ settings ]; } ); const block = registerBlockType( 'my-plugin/fancy-block-13', defaultBlockSettings ); - expect( console ).toHaveErroredWith( 'Block settings need to remain a plain object after all "blocks.registerBlockType" filters are applied.' ); + expect( console ).toHaveErroredWith( 'Block settings must be a valid object.' ); expect( block ).toBeUndefined(); } ); } ); From 1bc41a8648f269922cf39ce0338248ffa4b0a03d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20=28Greg=29=20Zi=C3=B3=C5=82kowski?= Date: Thu, 28 Mar 2019 12:55:18 +0100 Subject: [PATCH 5/5] Update CHANGELOG.md --- packages/blocks/CHANGELOG.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md index 1a4454efb0f29..55def7da9db4c 100644 --- a/packages/blocks/CHANGELOG.md +++ b/packages/blocks/CHANGELOG.md @@ -1,13 +1,9 @@ -## 6.3.0 (Unreleased) +## x.x.x (Unreleased) ### New Feature - Added a default implementation for `save` setting in `registerBlockType` which saves no markup in the post content. -## 6.2.0 (2019-03-20) - -- Maintenance minor version increment. - ## 6.1.0 (2019-03-06) ### New Feature