From fd79bd14b39566175cc7114df0be053f5c3bd8b0 Mon Sep 17 00:00:00 2001 From: Hafiq Date: Sun, 4 Oct 2020 18:23:35 +0800 Subject: [PATCH 1/4] Update Composer. Rename methods. Fix Crawler bugs. Add related regions detector --- README.md | 26 +- composer.lock | 906 ++++++++++++++++++++++++++++++++++-------- example/index.php | 2 +- src/Holiday.php | 75 ++-- tests/HolidayTest.php | 8 +- 5 files changed, 805 insertions(+), 212 deletions(-) diff --git a/README.md b/README.md index fee43dd..c6586a9 100644 --- a/README.md +++ b/README.md @@ -12,33 +12,37 @@ Parsing Malaysia Public Holiday. Holidays in current years ```php -$holiday = new Holiday; -$holiday->getAllRegionHoliday()->get(); +$holiday = new Holiday; // Holiday::make() +$holiday->fromAllState()->get(); +Holiday::make()->fromAllState()->get(); ``` Holidays in specific years ```php $holiday = new Holiday; -$holiday->getAllRegionHoliday(2017)->get(); -$holiday->getAllRegionHoliday([2017, 2019])->get(); +$holiday->fromAllState(2017)->get(); +$holiday->fromAllState([2017, 2019])->get(); +$holiday->fromAllState()->ofYear(2017)->get(); +Holiday::make()->fromAllState()->ofYear(2017)->get(); ``` Holidays by regional ```php $holiday = new Holiday; -$holiday->getRegionHoliday("Selangor")->get(); -$holiday->getRegionHoliday(["Selangor","Malacca"])->get(); +$holiday->fromState("Selangor")->get(); +$holiday->fromState(["Selangor","Malacca"])->get(); ``` Holidays by regional in 2017 ```php $holiday = new Holiday; -$holiday->getRegionHoliday("Selangor","2017")->get(); -$holiday->getRegionHoliday("Selangor", [2017, 2019])->get(); -$holiday->getRegionHoliday(["Selangor","Malacca"], [2017, 2019])->get(); +$holiday->fromState("Selangor","2017")->get(); +$holiday->fromState("Selangor", [2017, 2019])->get(); +$holiday->fromState(["Selangor","Malacca"], [2017, 2019])->get(); +$holiday->fromState(["Selangor","Malacca"])->ofYear([2017, 2019])->get(); ``` @@ -46,8 +50,8 @@ Grouping and Filter result ```php $holiday = new Holiday; -$holiday->getAllRegionHoliday()->groupByMonth()->get(); -$holiday->getAllRegionHoliday()->filterByMonth("January")->get(); //date('F') +$holiday->fromAllState()->groupByMonth()->get(); +$holiday->fromAllState()->filterByMonth("January")->get(); //date('F') ``` ### Requirement diff --git a/composer.lock b/composer.lock index fcda838..ed67093 100644 --- a/composer.lock +++ b/composer.lock @@ -8,32 +8,32 @@ "packages": [ { "name": "fabpot/goutte", - "version": "v3.2.3", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/Goutte.git", - "reference": "3f0eaf0a40181359470651f1565b3e07e3dd31b8" + "reference": "4ab5199e3ec0ffde0ee0b5ecf568a4fb8398dbae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/3f0eaf0a40181359470651f1565b3e07e3dd31b8", - "reference": "3f0eaf0a40181359470651f1565b3e07e3dd31b8", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/4ab5199e3ec0ffde0ee0b5ecf568a4fb8398dbae", + "reference": "4ab5199e3ec0ffde0ee0b5ecf568a4fb8398dbae", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^6.0", - "php": ">=5.5.0", - "symfony/browser-kit": "~2.1|~3.0|~4.0", - "symfony/css-selector": "~2.1|~3.0|~4.0", - "symfony/dom-crawler": "~2.1|~3.0|~4.0" + "php": "^7.1.3", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.3 || ^4" + "symfony/phpunit-bridge": "^5.0" }, "type": "application", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -59,31 +59,33 @@ "keywords": [ "scraper" ], - "time": "2018-06-29T15:13:57+00:00" + "time": "2019-12-06T13:11:18+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "psr/log": "^1.1" }, "suggest": { "psr/log": "Required for using the Log middleware" @@ -91,16 +93,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.5-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -124,27 +126,27 @@ "rest", "web service" ], - "time": "2018-04-22T15:46:56+00:00" + "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "60d379c243457e073cff02bc323a2a86cb355631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { @@ -175,20 +177,20 @@ "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "time": "2020-09-30T07:37:28+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", "shasum": "" }, "require": { @@ -201,15 +203,15 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -246,7 +248,52 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "time": "2020-09-30T07:37:11+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" }, { "name": "psr/http-message", @@ -340,27 +387,27 @@ }, { "name": "symfony/browser-kit", - "version": "v4.3.4", + "version": "v5.1.7", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "9e5dddb637b13db82e35695a8603fe6e118cc119" + "reference": "8944cc83bb18f83f577225c695d999044e7c62b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9e5dddb637b13db82e35695a8603fe6e118cc119", - "reference": "9e5dddb637b13db82e35695a8603fe6e118cc119", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/8944cc83bb18f83f577225c695d999044e7c62b0", + "reference": "8944cc83bb18f83f577225c695d999044e7c62b0", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/dom-crawler": "~3.4|~4.0" + "php": ">=7.2.5", + "symfony/dom-crawler": "^4.4|^5.0" }, "require-dev": { - "symfony/css-selector": "~3.4|~4.0", - "symfony/http-client": "^4.3", - "symfony/mime": "^4.3", - "symfony/process": "~3.4|~4.0" + "symfony/css-selector": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0" }, "suggest": { "symfony/process": "" @@ -368,7 +415,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -395,29 +442,43 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-02T08:49:02+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.4", + "version": "v5.1.7", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "c6e5e2a00db768c92c3ae131532af4e1acc7bd03" + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/c6e5e2a00db768c92c3ae131532af4e1acc7bd03", - "reference": "c6e5e2a00db768c92c3ae131532af4e1acc7bd03", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -448,33 +509,48 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-08-20T14:07:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.3.4", + "version": "v5.1.7", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "cc686552948d627528c0e2e759186dff67c2610e" + "reference": "6d6885e167aad0af4128b392f22d8f2a33dd88ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/cc686552948d627528c0e2e759186dff67c2610e", - "reference": "cc686552948d627528c0e2e759186dff67c2610e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/6d6885e167aad0af4128b392f22d8f2a33dd88ec", + "reference": "6d6885e167aad0af4128b392f22d8f2a33dd88ec", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "masterminds/html5": "<2.6" }, "require-dev": { "masterminds/html5": "^2.6", - "symfony/css-selector": "~3.4|~4.0" + "symfony/css-selector": "^4.4|^5.0" }, "suggest": { "symfony/css-selector": "" @@ -482,7 +558,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -509,20 +585,34 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2019-08-26T08:26:39+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-02T16:23:27+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.12.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "550ebaac289296ce228a706d0867afc34687e3f4" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", - "reference": "550ebaac289296ce228a706d0867afc34687e3f4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -534,7 +624,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -567,20 +661,200 @@ "polyfill", "portable" ], - "time": "2019-08-06T08:03:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-04T06:02:08+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.12.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", - "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { @@ -592,7 +866,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -626,26 +904,270 @@ "portable", "shim" ], - "time": "2019-08-06T08:03:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "639447d008615574653fb3bc60d1986d7172eaae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -684,24 +1206,38 @@ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.3", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "replace": { "myclabs/deep-copy": "self.version" @@ -732,32 +1268,35 @@ "object", "object graph" ], - "time": "2019-08-09T12:45:53+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -784,44 +1323,41 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.2", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -832,38 +1368,40 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-09-12T14:27:41+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -882,37 +1420,37 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "1.8.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", + "phpspec/phpspec": "^2.5 || ^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { @@ -945,7 +1483,7 @@ "spy", "stub" ], - "time": "2019-06-13T12:50:23+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", @@ -1194,6 +1732,7 @@ "keywords": [ "tokenizer" ], + "abandoned": true, "time": "2017-11-27T05:48:46+00:00" }, { @@ -1853,27 +2392,27 @@ }, { "name": "symfony/yaml", - "version": "v4.3.4", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686" + "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686", - "reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1", + "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "symfony/console": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -1881,7 +2420,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -1908,28 +2447,48 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-08-20T14:27:59+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-27T03:36:23+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.6.1", + "version": "v2.6.6", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" + "reference": "e1d57f62db3db00d9139078cbedf262280701479" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/e1d57f62db3db00d9139078cbedf262280701479", + "reference": "e1d57f62db3db00d9139078cbedf262280701479", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "^1.9" + "php": "^5.3.9 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0" + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7.27" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." }, "type": "library", "extra": { @@ -1947,10 +2506,15 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://vancelucas.com/" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -1959,35 +2523,44 @@ "env", "environment" ], - "time": "2019-01-29T11:11:52+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-07-14T17:54:18+00:00" }, { "name": "webmozart/assert", - "version": "1.5.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -2009,7 +2582,7 @@ "check", "validate" ], - "time": "2019-08-24T08:43:50+00:00" + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], @@ -2020,5 +2593,6 @@ "platform": { "php": ">=7.0" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/example/index.php b/example/index.php index 9380b66..88cfab0 100644 --- a/example/index.php +++ b/example/index.php @@ -12,7 +12,7 @@ $holiday = new Holiday; -$result = $holiday->getRegionHoliday(['Selangor', 'Johore'])->filterByMonth(1)->get(); +$result = $holiday->fromState(["Selangor","Malacca"])->ofYear([2017, 2019])->get(); //print_r($result); header('Content-Type: application/json'); diff --git a/src/Holiday.php b/src/Holiday.php index 974b3b4..1ad0f79 100644 --- a/src/Holiday.php +++ b/src/Holiday.php @@ -5,6 +5,7 @@ use afiqiqmal\MalaysiaHoliday\exception\RegionException; use Goutte\Client; use GuzzleHttp\Client as GuzzleClient; +use function GuzzleHttp\Psr7\str; class Holiday { @@ -41,7 +42,14 @@ class Holiday 'Terengganu' ]; - private $base_url; + private $related_region = [ + 'Johore' => 'Johor', + 'KL' => 'Kuala Lumpur', + 'Melaka' => 'Malacca', + 'Pulau Pinang' => 'Penang' + ]; + + private $base_url = "https://www.officeholidays.com/countries/malaysia"; private $client; private $year; @@ -52,39 +60,34 @@ class Holiday public function __construct() { - $this->base_url = "https://www.officeholidays.com/countries/malaysia"; - $this->client = new Client(); - $guzzleClient = new GuzzleClient( - array( - 'timeout' => 180, - ) - ); - $this->client->setClient($guzzleClient); - - error_reporting(0); } - //Holiday holiday = new Holiday; - public static function init() + public static function make() { return new self; } - public function getAllRegionHoliday($year = null) + public function fromAllState($year = null) { $this->region = null; $this->year = $year; return $this; } - public function getRegionHoliday($region, $year = null) + public function fromState($region, $year = null) { $this->region = $region; $this->year = $year; return $this; } + public function ofYear($year) + { + $this->year = $year; + return $this; + } + public function groupByMonth() { $this->groupByMonth = true; @@ -178,6 +181,18 @@ private function queryWeb($regional, $year) 'regional' => $region ?? "Malaysia", 'collection' => $data ]; + + if ($region) { + $final[] = [ + 'regional' => $region, + 'collection' => $data + ]; + } else { + $final = [ + 'regional' => "Malaysia", + 'collection' => $data + ]; + } } catch (RegionException $regionException) { $error_messages[] = $regionException->getMessage(); $final[] = [ @@ -209,30 +224,24 @@ private function queryWeb($regional, $year) private function trigger($region, $currentYear) { if ($region) { - if ($this->checkRegional($region)) { - $request_url = $this->base_url."/".$region."/".$currentYear; - } else { - throw new RegionException($region . " is not include in the regional state"); - } + $request_url = $this->base_url."/".$this->checkRegional($region)."/".$currentYear; } else { $request_url = $this->base_url."/".$currentYear; } - $arrays = array_values(array_filter($this->crawl($request_url, $currentYear))); - - return $arrays; + return array_values(array_filter($this->crawl($request_url, $currentYear))); } private function crawl($request_url, $currentYear) { $crawler = $this->client->request('GET', $request_url); - $result = $crawler->filter('.country-table tr')->each( + return $crawler->filter('.country-table tr')->each( function ($node) use ($currentYear) { if ($node->children()->nodeName() == 'td') { $temp['day'] = trim($node->children()->eq(0)->text()); $date_str = strtok(trim($node->children() ->eq(1) - ->extract('_text', 'class')[0]), "\n")." ".$currentYear; + ->extract(['_text', 'class'])[0][0]), "\n")." ".$currentYear; if ($date_str == null || empty($date_str)) { return null; } @@ -249,7 +258,7 @@ function ($node) use ($currentYear) { $temp['name'] = trim($node->children()->eq(2)->text()); $temp['description'] = trim($node->children()->eq(3)->text()); $temp['is_holiday'] = true; - switch (trim($node->extract('class')[0])) { + switch (trim($node->extract(['class'])[0])) { case 'govt_holiday': $temp['type'] = "Government/Public Sector Holiday"; $temp['type_id'] = 1; @@ -280,16 +289,22 @@ function ($node) use ($currentYear) { } } ); - - return $result; } private function checkRegional($regional) { + foreach ($this->related_region as $index => $state) { + if (strtolower($index) == strtolower($regional)) { + $regional = $state; + break; + } + } + if (in_array(strtolower($regional), array_map('strtolower', $this->region_array))) { - return true; + return str_replace(" ", "-", $regional); } - return false; + + throw new RegionException($regional . " is not include in the regional state"); } private function checkMonth($month) diff --git a/tests/HolidayTest.php b/tests/HolidayTest.php index 45ad51e..b4a0a71 100644 --- a/tests/HolidayTest.php +++ b/tests/HolidayTest.php @@ -19,7 +19,7 @@ class RequestTest extends TestCase public function testGetAllRegionHoliday() { $holiday = new Holiday; - $response = $holiday->getAllRegionHoliday()->get(); + $response = $holiday->fromAllState()->get(); $this->assertTrue($response['status']); $this->assertTrue($response['data'][0]['regional'] == 'Malaysia'); @@ -31,7 +31,7 @@ public function testGetAllRegionHoliday() public function testGetSpecificRegionHoliday() { $holiday = new Holiday; - $response = $holiday->getRegionHoliday('Selangor')->get(); + $response = $holiday->fromState('Selangor')->get(); $this->assertTrue($response['status']); $this->assertTrue($response['data'][0]['regional'] == 'Selangor'); @@ -43,7 +43,7 @@ public function testGetSpecificRegionHoliday() public function testGetMultipleRegionsHoliday() { $holiday = new Holiday; - $response = $holiday->getRegionHoliday(['Selangor', 'Malacca'])->get(); + $response = $holiday->fromState(['Selangor', 'Malacca'])->get(); $this->assertTrue($response['status']); $this->assertTrue($response['data'][0]['regional'] == 'Selangor'); @@ -56,7 +56,7 @@ public function testGetMultipleRegionsHoliday() public function testErrorMessage() { $holiday = new Holiday; - $response = $holiday->getRegionHoliday(['Selangor', 'Malaccaa'])->get(); + $response = $holiday->fromState(['Selangor', 'Malaccaa'])->get(); $this->assertTrue($response['status']); $this->assertTrue($response['data'][0]['regional'] == 'Selangor'); From b2135a223fb03a1b562a1f2c2f7bdda1ec3ae703 Mon Sep 17 00:00:00 2001 From: Hafiq Date: Sun, 4 Oct 2020 18:25:58 +0800 Subject: [PATCH 2/4] Rename Class --- README.md | 20 +++++++++++++------- example/index.php | 4 ++-- src/{Holiday.php => MalaysiaHoliday.php} | 2 +- tests/HolidayTest.php | 10 +++++----- 4 files changed, 21 insertions(+), 15 deletions(-) rename src/{Holiday.php => MalaysiaHoliday.php} (99%) diff --git a/README.md b/README.md index c6586a9..0b1cbf3 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ Parsing Malaysia Public Holiday. [![Coverage](https://img.shields.io/codecov/c/github/afiqiqmal/MalaysiaHoliday.svg)](https://codecov.io/gh/afiqiqmal/MalaysiaHoliday) [![Packagist](https://img.shields.io/packagist/dt/afiqiqmal/MalaysiaHoliday.svg)](https://packagist.org/packages/afiqiqmal/MalaysiaHoliday) [![Packagist](https://img.shields.io/packagist/v/afiqiqmal/MalaysiaHoliday.svg)](https://packagist.org/packages/afiqiqmal/MalaysiaHoliday) +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/paypalme/mhi9388?locale.x=en_US) ### Usage @@ -12,25 +13,25 @@ Parsing Malaysia Public Holiday. Holidays in current years ```php -$holiday = new Holiday; // Holiday::make() +$holiday = new MalaysiaHoliday; // MalaysiaHoliday::make() $holiday->fromAllState()->get(); -Holiday::make()->fromAllState()->get(); +MalaysiaHoliday::make()->fromAllState()->get(); ``` Holidays in specific years ```php -$holiday = new Holiday; +$holiday = new MalaysiaHoliday; $holiday->fromAllState(2017)->get(); $holiday->fromAllState([2017, 2019])->get(); $holiday->fromAllState()->ofYear(2017)->get(); -Holiday::make()->fromAllState()->ofYear(2017)->get(); +MalaysiaHoliday::make()->fromAllState()->ofYear(2017)->get(); ``` Holidays by regional ```php -$holiday = new Holiday; +$holiday = new MalaysiaHoliday; $holiday->fromState("Selangor")->get(); $holiday->fromState(["Selangor","Malacca"])->get(); ``` @@ -38,7 +39,7 @@ $holiday->fromState(["Selangor","Malacca"])->get(); Holidays by regional in 2017 ```php -$holiday = new Holiday; +$holiday = new MalaysiaHoliday; $holiday->fromState("Selangor","2017")->get(); $holiday->fromState("Selangor", [2017, 2019])->get(); $holiday->fromState(["Selangor","Malacca"], [2017, 2019])->get(); @@ -49,7 +50,7 @@ $holiday->fromState(["Selangor","Malacca"])->ofYear([2017, 2019])->get(); Grouping and Filter result ```php -$holiday = new Holiday; +$holiday = new MalaysiaHoliday; $holiday->fromAllState()->groupByMonth()->get(); $holiday->fromAllState()->filterByMonth("January")->get(); //date('F') ``` @@ -155,3 +156,8 @@ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + diff --git a/example/index.php b/example/index.php index 88cfab0..b15717f 100644 --- a/example/index.php +++ b/example/index.php @@ -8,9 +8,9 @@ require_once __DIR__ .'/../vendor/autoload.php'; -use afiqiqmal\MalaysiaHoliday\Holiday; +use afiqiqmal\MalaysiaHoliday\MalaysiaHoliday; -$holiday = new Holiday; +$holiday = new MalaysiaHoliday; $result = $holiday->fromState(["Selangor","Malacca"])->ofYear([2017, 2019])->get(); diff --git a/src/Holiday.php b/src/MalaysiaHoliday.php similarity index 99% rename from src/Holiday.php rename to src/MalaysiaHoliday.php index 1ad0f79..26bd0bf 100644 --- a/src/Holiday.php +++ b/src/MalaysiaHoliday.php @@ -7,7 +7,7 @@ use GuzzleHttp\Client as GuzzleClient; use function GuzzleHttp\Psr7\str; -class Holiday +class MalaysiaHoliday { private $months_array = [ 1 => 'January', diff --git a/tests/HolidayTest.php b/tests/HolidayTest.php index b4a0a71..1ee2d21 100644 --- a/tests/HolidayTest.php +++ b/tests/HolidayTest.php @@ -5,7 +5,7 @@ require_once __DIR__ .'/../vendor/autoload.php'; use PHPUnit\Framework\TestCase; -use afiqiqmal\MalaysiaHoliday\Holiday; +use afiqiqmal\MalaysiaHoliday\MalaysiaHoliday; /** * RequestTest.php @@ -18,7 +18,7 @@ class RequestTest extends TestCase */ public function testGetAllRegionHoliday() { - $holiday = new Holiday; + $holiday = new MalaysiaHoliday; $response = $holiday->fromAllState()->get(); $this->assertTrue($response['status']); @@ -30,7 +30,7 @@ public function testGetAllRegionHoliday() */ public function testGetSpecificRegionHoliday() { - $holiday = new Holiday; + $holiday = new MalaysiaHoliday; $response = $holiday->fromState('Selangor')->get(); $this->assertTrue($response['status']); @@ -42,7 +42,7 @@ public function testGetSpecificRegionHoliday() */ public function testGetMultipleRegionsHoliday() { - $holiday = new Holiday; + $holiday = new MalaysiaHoliday; $response = $holiday->fromState(['Selangor', 'Malacca'])->get(); $this->assertTrue($response['status']); @@ -55,7 +55,7 @@ public function testGetMultipleRegionsHoliday() */ public function testErrorMessage() { - $holiday = new Holiday; + $holiday = new MalaysiaHoliday; $response = $holiday->fromState(['Selangor', 'Malaccaa'])->get(); $this->assertTrue($response['status']); From 6d94e9181fd5795c7a009349f7b38966bd5e91b5 Mon Sep 17 00:00:00 2001 From: Hafiq Date: Sun, 4 Oct 2020 18:52:08 +0800 Subject: [PATCH 3/4] Fix Tests --- example/index.php | 2 +- src/MalaysiaHoliday.php | 13 ++++--------- tests/HolidayTest.php | 13 ++++++++++++- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/example/index.php b/example/index.php index b15717f..77097bc 100644 --- a/example/index.php +++ b/example/index.php @@ -12,7 +12,7 @@ $holiday = new MalaysiaHoliday; -$result = $holiday->fromState(["Selangor","Malacca"])->ofYear([2017, 2019])->get(); +$result = $holiday->fromState(MalaysiaHoliday::$region_array)->get(); //print_r($result); header('Content-Type: application/json'); diff --git a/src/MalaysiaHoliday.php b/src/MalaysiaHoliday.php index 26bd0bf..0569658 100644 --- a/src/MalaysiaHoliday.php +++ b/src/MalaysiaHoliday.php @@ -24,13 +24,13 @@ class MalaysiaHoliday 12 => 'December' ]; - private $region_array = [ + public static $region_array = [ 'Johor', 'Kedah', 'Kelantan', 'Kuala Lumpur', 'Labuan', - 'Malacca', + 'Melaka', 'Negeri Sembilan', 'Pahang', 'Penang', @@ -45,7 +45,7 @@ class MalaysiaHoliday private $related_region = [ 'Johore' => 'Johor', 'KL' => 'Kuala Lumpur', - 'Melaka' => 'Malacca', + 'Malacca' => 'Melaka', 'Pulau Pinang' => 'Penang' ]; @@ -177,11 +177,6 @@ private function queryWeb($regional, $year) ]; } - $final[] = [ - 'regional' => $region ?? "Malaysia", - 'collection' => $data - ]; - if ($region) { $final[] = [ 'regional' => $region, @@ -300,7 +295,7 @@ private function checkRegional($regional) } } - if (in_array(strtolower($regional), array_map('strtolower', $this->region_array))) { + if (in_array(strtolower($regional), array_map('strtolower', self::$region_array))) { return str_replace(" ", "-", $regional); } diff --git a/tests/HolidayTest.php b/tests/HolidayTest.php index 1ee2d21..c4b8cdd 100644 --- a/tests/HolidayTest.php +++ b/tests/HolidayTest.php @@ -22,7 +22,7 @@ public function testGetAllRegionHoliday() $response = $holiday->fromAllState()->get(); $this->assertTrue($response['status']); - $this->assertTrue($response['data'][0]['regional'] == 'Malaysia'); + $this->assertTrue($response['data']['regional'] == 'Malaysia'); } /** @@ -50,6 +50,17 @@ public function testGetMultipleRegionsHoliday() $this->assertTrue($response['data'][1]['regional'] == 'Malacca'); } + public function testGetAllRegionsHoliday() + { + $holiday = new MalaysiaHoliday; + $response = $holiday->fromState(MalaysiaHoliday::$region_array)->get(); + + $this->assertTrue($response['status']); + foreach (MalaysiaHoliday::$region_array as $key => $regional) { + $this->assertTrue($response['data'][$key]['regional'] == $regional); + } + } + /** * To test getting multiple regions holiday */ From 282fd5e618ccb878c93f4577f3f08da78bf18bad Mon Sep 17 00:00:00 2001 From: Hafiq Date: Sun, 4 Oct 2020 18:55:00 +0800 Subject: [PATCH 4/4] Add Php 7.4 to travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2e9d4fc..1774afd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: php php: - '7.2' - '7.3' + - '7.4 before_script: - composer install --ignore-platform-reqs