Permalink
Browse files

Update as of 6/7/2012

* Fixed various crashes of visual design editor
* Fixed some layouts that caused visual design editor toolbar disappearing, also fixed some confusing page type labels
* Eliminated "after commit callback" workaround from integration tests by implementing "transparent transactions" capability in integration testing framework
* Refactored admin authentication/authorization in RSS module. Removed program termination and covered the controllers with tests
* Removed HTML-report feature of copy-paste detector which never worked anyway (`dev/tests/static/framework/Inspection/CopyPasteDetector/html_report.xslt` and all related code)
* Github requests:
** [#19](#19) Implemented "soft" dependency between modules and performed several improvements in the related code, covered with tests
  • Loading branch information...
1 parent 99b4374 commit 93f38e9b3c74fb61df0da2ef5047aeca64a4356a @magento-team magento-team committed Jun 7, 2012
Showing with 1,613 additions and 1,241 deletions.
  1. +10 −0 CHANGELOG.markdown
  2. +2 −17 app/Mage.php
  3. +2 −2 app/code/core/Mage/Api2/view/adminhtml/layout.xml
  4. +3 −6 app/code/core/Mage/Catalog/view/frontend/msrp.xml
  5. +5 −13 app/code/core/Mage/Checkout/view/frontend/layout.xml
  6. +28 −31 app/code/core/Mage/Core/Helper/Http.php
  7. +5 −107 app/code/core/Mage/Core/Model/Config.php
  8. +193 −0 app/code/core/Mage/Core/Model/Config/Module.php
  9. +0 −4 app/code/core/Mage/Core/view/frontend/layout.xml
  10. +0 −2 app/code/core/Mage/DesignEditor/view/frontend/layout.xml
  11. +3 −1 app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php
  12. +0 −7 app/code/core/Mage/Install/Model/Observer.php
  13. +0 −8 app/code/core/Mage/Install/etc/config.xml
  14. +10 −16 app/code/core/Mage/Oauth/view/adminhtml/layout.xml
  15. +8 −8 app/code/core/Mage/Oauth/view/frontend/layout.xml
  16. +1 −2 app/code/core/Mage/Paypal/view/frontend/layout.xml
  17. +1 −2 app/code/core/Mage/PaypalUk/view/frontend/layout.xml
  18. +0 −10 app/code/core/Mage/Review/etc/config.xml
  19. +0 −13 app/code/core/Mage/Review/view/frontend/layout.xml
  20. +2 −2 app/code/core/Mage/Rss/Block/Catalog/New.php
  21. +1 −24 app/code/core/Mage/Rss/Block/Catalog/NotifyStock.php
  22. +1 −24 app/code/core/Mage/Rss/Block/Catalog/Review.php
  23. +1 −19 app/code/core/Mage/Rss/Block/Order/New.php
  24. +0 −59 app/code/core/Mage/Rss/Controller/AdminhtmlAbstract.php
  25. +0 −72 app/code/core/Mage/Rss/Helper/Data.php
  26. +0 −76 app/code/core/Mage/Rss/Model/Observer.php
  27. +0 −51 app/code/core/Mage/Rss/Model/Session.php
  28. +64 −55 app/code/core/Mage/Rss/controllers/CatalogController.php
  29. +18 −39 app/code/core/Mage/Rss/controllers/IndexController.php
  30. +41 −18 app/code/core/Mage/Rss/controllers/OrderController.php
  31. +0 −18 app/code/core/Mage/Rss/etc/config.xml
  32. +7 −19 app/code/core/Mage/Rss/view/frontend/layout.xml
  33. +5 −5 app/code/core/Mage/Sales/view/frontend/layout.xml
  34. +1 −1 app/design/frontend/default/iphone/Mage_Catalog/layout.xml
  35. +1 −1 app/design/frontend/default/iphone/Mage_CatalogSearch/layout.xml
  36. +2 −2 app/design/frontend/default/iphone/Mage_Checkout/layout.xml
  37. +1 −1 app/design/frontend/default/iphone/Mage_Customer/layout.xml
  38. +1 −1 app/design/frontend/default/iphone/Mage_Newsletter/layout.xml
  39. +1 −1 app/design/frontend/default/iphone/Mage_Page/layout.xml
  40. +0 −12 app/design/frontend/default/iphone/Mage_Review/layout.xml
  41. +8 −12 app/design/frontend/default/iphone/Mage_Rss/layout.xml
  42. +21 −21 app/design/frontend/default/iphone/Mage_Sales/layout.xml
  43. +4 −4 app/design/frontend/default/iphone/Mage_Wishlist/layout.xml
  44. +1 −1 app/design/frontend/default/modern/Mage_Catalog/layout.xml
  45. +1 −1 app/design/frontend/default/modern/Mage_Checkout/layout.xml
  46. +1 −1 app/design/frontend/default/modern/Mage_Customer/layout.xml
  47. +0 −12 app/design/frontend/default/modern/Mage_Review/layout.xml
  48. +7 −19 app/design/frontend/default/modern/Mage_Rss/layout.xml
  49. +5 −5 app/design/frontend/default/modern/Mage_Sales/layout.xml
  50. +9 −0 dev/tests/integration/etc/local-mysql.xml.dist
  51. +81 −0 dev/tests/integration/framework/Magento/Test/Db/Adapter/Mysql.php
  52. +28 −3 ...rder_standard_commit_workaround.php → framework/Magento/Test/Db/Adapter/TransactionInterface.php}
  53. +2 −2 dev/tests/integration/framework/Magento/Test/Listener/Annotation/Fixture.php
  54. +35 −0 dev/tests/integration/framework/Magento/Test/Request.php
  55. +31 −1 dev/tests/integration/framework/Magento/Test/TestCase/ControllerAbstract.php
  56. +106 −0 ...s/integration/framework/tests/unit/testsuite/Magento/Test/Db/Adapter/TransactionInterfaceTest.php
  57. +23 −3 dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/RequestTest.php
  58. +2 −2 dev/tests/integration/testsuite/Mage/Adminhtml/controllers/Sales/OrderControllerTest.php
  59. +4 −3 ...Mage/{Sales/_files/transactions_commit_workaround.php → Catalog/_files/product_special_price.php}
  60. +2 −0 dev/tests/integration/testsuite/Mage/Catalog/_files/products_new.php
  61. +1 −1 dev/tests/integration/testsuite/Mage/Catalog/_files/two_products.php
  62. +1 −1 dev/tests/integration/testsuite/Mage/Core/Model/_files/_layout_update.xml
  63. +1 −1 ...ts/integration/testsuite/Mage/Core/Model/_files/design/frontend/test/default/Mage_Core/layout.xml
  64. +2 −2 dev/tests/integration/testsuite/Mage/Paypal/Model/IpnTest.php
  65. +1 −1 dev/tests/integration/testsuite/Mage/Paypal/controllers/HostedproControllerTest.php
  66. +2 −2 dev/tests/integration/testsuite/Mage/Paypal/controllers/PayflowControllerTest.php
  67. +1 −1 dev/tests/integration/testsuite/Mage/Paypal/controllers/PayflowadvancedControllerTest.php
  68. +2 −2 dev/tests/integration/testsuite/Mage/Paypal/controllers/StandardControllerTest.php
  69. +14 −3 ...integration/testsuite/Mage/{Sales/_files/order_commit_workaround.php → Review/_files/reviews.php}
  70. +0 −70 dev/tests/integration/testsuite/Mage/Rss/Helper/DataTest.php
  71. +115 −34 dev/tests/integration/testsuite/Mage/Rss/controllers/CatalogControllerTest.php
  72. +69 −0 dev/tests/integration/testsuite/Mage/Rss/controllers/IndexControllerTest.php
  73. +49 −33 dev/tests/integration/testsuite/Mage/Rss/controllers/OrderControllerTest.php
  74. +1 −1 dev/tests/integration/testsuite/Mage/Sales/Model/AbstractTest.php
  75. +1 −1 dev/tests/integration/testsuite/Mage/Sales/Model/Order/Payment/TransactionTest.php
  76. +1 −0 dev/tests/integration/testsuite/Mage/Sales/_files/order.php
  77. +1 −1 dev/tests/integration/testsuite/Mage/Wishlist/_files/wishlist.php
  78. +11 −42 dev/tests/integration/testsuite/integrity/LayoutTest.php
  79. +4 −1 dev/tests/integration/testsuite/integrity/modular/TemplateFilesTest.php
  80. +0 −40 dev/tests/static/framework/Inspection/CopyPasteDetector/Command.php
  81. +0 −98 dev/tests/static/framework/Inspection/CopyPasteDetector/html_report.xslt
  82. +0 −24 dev/tests/static/framework/tests/unit/testsuite/Inspection/CopyPasteDetector/CommandTest.php
  83. +54 −23 dev/tests/static/testsuite/Integrity/LayoutTest.php
  84. +6 −5 dev/tests/static/testsuite/Legacy/LayoutTest.php
  85. +2 −0 dev/tests/static/testsuite/Legacy/_files/obsolete_classes.php
  86. +3 −0 dev/tests/static/testsuite/Legacy/_files/obsolete_constants.php
  87. +4 −1 dev/tests/static/testsuite/Legacy/_files/obsolete_methods.php
  88. +1 −0 dev/tests/static/testsuite/Php/_files/whitelist/core.txt
  89. +103 −0 dev/tests/unit/testsuite/Mage/Core/Helper/HttpTest.php
  90. +105 −0 dev/tests/unit/testsuite/Mage/Core/Model/Config/ModuleTest.php
  91. +43 −0 dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_circular_input.xml
  92. +43 −0 dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_circular_soft_input.xml
  93. +15 −5 ...phtml → dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_linear_input.xml
  94. +21 −9 ..._workaround.php → unit/testsuite/Mage/Core/Model/Config/_files/module_dependency_wrong_input.xml}
  95. +44 −0 dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_filtered.xml
  96. +53 −0 dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_input.xml
  97. +50 −0 dev/tests/unit/testsuite/Mage/Core/Model/Config/_files/module_sorted.xml
View
@@ -1,3 +1,13 @@
+Update as of 6/7/2012
+=====================
+* Fixed various crashes of visual design editor
+* Fixed some layouts that caused visual design editor toolbar disappearing, also fixed some confusing page type labels
+* Eliminated "after commit callback" workaround from integration tests by implementing "transparent transactions" capability in integration testing framework
+* Refactored admin authentication/authorization in RSS module. Removed program termination and covered the controllers with tests
+* Removed HTML-report feature of copy-paste detector which never worked anyway (`dev/tests/static/framework/Inspection/CopyPasteDetector/html_report.xslt` and all related code)
+* Github requests:
+** [#19](https://github.com/magento/magento2/pull/19) Implemented "soft" dependency between modules and performed several improvements in the related code, covered with tests
+
Update as of 5/31/2012
======================
* Implemented backend authentication independent of `Mage_Adminhtml` module. Authentication can be disabled
View
@@ -659,25 +659,10 @@ public static function run($code = '', $type = 'store', $options = array())
Magento_Profiler::stop('mage');
} catch (Mage_Core_Model_Session_Exception $e) {
header('Location: ' . self::getBaseUrl());
- die();
} catch (Mage_Core_Model_Store_Exception $e) {
- require_once(self::getBaseDir() . DS . 'pub' . DS . 'errors' . DS . '404.php');
- die();
+ require_once(self::getBaseDir() . '/pub/errors/404.php');
} catch (Exception $e) {
- if (self::isInstalled() || self::$_isDownloader) {
- self::printException($e);
- exit();
- }
- try {
- self::dispatchEvent('mage_run_exception', array('exception' => $e));
- if (!headers_sent()) {
- header('Location:' . self::getUrl('install'));
- } else {
- self::printException($e);
- }
- } catch (Exception $ne) {
- self::printException($ne, $e->getMessage());
- }
+ self::printException($e);
}
}
@@ -92,12 +92,12 @@
<adminhtml_api2_role_grid>
<remove name="root"/>
- <block type="Mage_Api2_Block_Adminhtml_Roles_Grid" name="api2_roles.grid" output="toHtml"/>
+ <block type="Mage_Api2_Block_Adminhtml_Roles_Grid" name="api2_roles.grid" output="1"/>
</adminhtml_api2_role_grid>
<adminhtml_api2_role_usersgrid>
<remove name="root"/>
- <block type="Mage_Api2_Block_Adminhtml_Roles_Tab_Users" name="adminhtml.role.edit.tab.users" output="toHtml"/>
+ <block type="Mage_Api2_Block_Adminhtml_Roles_Tab_Users" name="adminhtml.role.edit.tab.users" output="1"/>
</adminhtml_api2_role_usersgrid>
<!-- admin acl users edit page -->
@@ -74,26 +74,23 @@ Default layout, loads most of the pages
<update handle="MAP_popup" />
</tag_customer_view>
- <MAP_popup translate="label">
- <label>Catalog MAP Popup</label>
+ <MAP_popup>
<reference name="head">
<action method="addJs" ifconfig="sales/msrp/enabled"><file>Mage_Catalog::msrp.js</file></action>
</reference>
<reference name="content">
<block type="Mage_Core_Block_Template" template="Mage_Catalog::msrp/popup.phtml" name="product.tooltip"/>
</reference>
</MAP_popup>
- <MAP_price_msrp_item translate="label">
- <label>Catalog MAP Price MSRP Item</label>
+ <MAP_price_msrp_item>
<reference name="catalog_product_price_template">
<action method="addPriceBlockType"><type>msrp</type><block>Mage_Catalog_Block_Product_Price</block><template>product/price_msrp_item.phtml</template></action>
</reference>
<reference name="product.clone_prices">
<action method="addPriceBlockType"><type>msrp</type><block>Mage_Catalog_Block_Product_Price</block><template>product/price_msrp_item.phtml</template></action>
</reference>
</MAP_price_msrp_item>
- <MAP_price_msrp_wishlist_item translate="label">
- <label>Catalog MAP Price MSRP Wishlist Item</label>
+ <MAP_price_msrp_wishlist_item>
<reference name="catalog_product_price_template">
<action method="addPriceBlockType"><type>msrp</type><block>Mage_Catalog_Block_Product_Price</block><template>Mage_Wishlist::render/item/price_msrp_item.phtml</template></action>
</reference>
@@ -90,10 +90,10 @@ Default layout, loads most of the pages
</checkout_cart_index>
<checkout_cart_configure translate="label" type="page" parent="catalog_product_view">
- <label>Configure Cart Item</label>
+ <label>Configure Cart Item (Any)</label>
<update handle="catalog_product_view"/>
<reference name="product.info">
- <block type="Mage_Checkout_Block_Cart_Item_Configure" name="checkout.cart.item.configure.block"></block>
+ <block type="Mage_Checkout_Block_Cart_Item_Configure" name="checkout.cart.item.configure.block"/>
</reference>
<reference name="product.info.addtocart">
<action method="setTemplate"><template>Mage_Checkout::cart/item/configure/updatecart.phtml</template></action>
@@ -104,17 +104,17 @@ Default layout, loads most of the pages
</checkout_cart_configure>
<checkout_cart_configure_type_downloadable translate="label" module="Mage_Downloadable" type="page" parent="checkout_cart_configure">
- <label>Configure Cart Item</label>
+ <label>Configure Cart Item (Downloadable)</label>
<update handle="catalog_product_view_type_downloadable"/>
</checkout_cart_configure_type_downloadable>
<checkout_cart_configure_type_configurable translate="label" module="Mage_Catalog" type="page" parent="checkout_cart_configure">
- <label>Configure Cart Item</label>
+ <label>Configure Cart Item (Configurable)</label>
<update handle="catalog_product_view_type_configurable"/>
</checkout_cart_configure_type_configurable>
<checkout_cart_configure_type_bundle translate="label" module="Mage_Bundle" type="page" parent="checkout_cart_configure">
- <label>Configure Bundle Cart Item</label>
+ <label>Configure Cart Item (Bundle)</label>
<update handle="catalog_product_view_type_bundle"/>
<reference name="product.info.addtocart.bundle">
<action method="setTemplate"><template>Mage_Checkout::cart/item/configure/updatecart.phtml</template></action>
@@ -434,12 +434,4 @@ One page checkout order review block
<block type="Mage_Checkout_Block_Onepage_Failure" name="checkout.failure" template="onepage/failure.phtml"/>
</reference>
</checkout_onepage_failure>
-
- <checkout_onepage_savepayment translate="label">
- <label>One Page Checkout Save Payment</label>
- </checkout_onepage_savepayment>
-
- <checkout_onepage_reorder translate="label">
- <label>One Page Checkout Reorder</label>
- </checkout_onepage_reorder>
</layout>
@@ -43,63 +43,60 @@ class Mage_Core_Helper_Http extends Mage_Core_Helper_Abstract
protected $_remoteAddr;
/**
- * Validate and retrieve user and password from HTTP
+ * Extract "login" and "password" credentials from HTTP-request
*
+ * Returns plain array with 2 items: login and password respectively
+ *
+ * @param Zend_Controller_Request_Http $request
* @return array
*/
- public function authValidate($headers = null)
+ public function getHttpAuthCredentials(Zend_Controller_Request_Http $request)
{
- if(!is_null($headers)) {
- $_SERVER = $headers;
- }
-
+ $server = $request->getServer();
$user = '';
$pass = '';
- // moshe's fix for CGI
- if (empty($_SERVER['HTTP_AUTHORIZATION'])) {
- foreach ($_SERVER as $k=>$v) {
- if (substr($k, -18)==='HTTP_AUTHORIZATION' && !empty($v)) {
- $_SERVER['HTTP_AUTHORIZATION'] = $v;
+ if (empty($server['HTTP_AUTHORIZATION'])) {
+ foreach ($server as $k => $v) {
+ if (substr($k, -18) === 'HTTP_AUTHORIZATION' && !empty($v)) {
+ $server['HTTP_AUTHORIZATION'] = $v;
break;
}
}
}
- if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
- $user = $_SERVER['PHP_AUTH_USER'];
- $pass = $_SERVER['PHP_AUTH_PW'];
+ if (isset($server['PHP_AUTH_USER']) && isset($server['PHP_AUTH_PW'])) {
+ $user = $server['PHP_AUTH_USER'];
+ $pass = $server['PHP_AUTH_PW'];
}
- // IIS Note:: For HTTP Authentication to work with IIS,
- // the PHP directive cgi.rfc2616_headers must be set to 0 (the default value).
- elseif (!empty($_SERVER['HTTP_AUTHORIZATION'])) {
- $auth = $_SERVER['HTTP_AUTHORIZATION'];
+ /**
+ * IIS Note: for HTTP authentication to work with IIS,
+ * the PHP directive cgi.rfc2616_headers must be set to 0 (the default value).
+ */
+ elseif (!empty($server['HTTP_AUTHORIZATION'])) {
+ $auth = $server['HTTP_AUTHORIZATION'];
list($user, $pass) = explode(':', base64_decode(substr($auth, strpos($auth, " ") + 1)));
}
- elseif (!empty($_SERVER['Authorization'])) {
- $auth = $_SERVER['Authorization'];
+ elseif (!empty($server['Authorization'])) {
+ $auth = $server['Authorization'];
list($user, $pass) = explode(':', base64_decode(substr($auth, strpos($auth, " ") + 1)));
}
- if (!$user || !$pass) {
- $this->authFailed();
- }
-
return array($user, $pass);
}
/**
- * Send auth failed Headers and exit
+ * Set "auth failed" headers to the specified response object
*
+ * @param Zend_Controller_Response_Http $response
+ * @param string $realm
*/
- public function authFailed()
+ public function failHttpAuthentication(Zend_Controller_Response_Http $response, $realm)
{
- Mage::app()->getResponse()
- ->setHeader('HTTP/1.1','401 Unauthorized')
- ->setHeader('WWW-Authenticate','Basic realm="RSS Feeds"')
+ $response->setHeader('HTTP/1.1', '401 Unauthorized')
+ ->setHeader('WWW-Authenticate', 'Basic realm="' . $realm . '"')
->setBody('<h1>401 Unauthorized</h1>')
- ->sendResponse();
- exit;
+ ;
}
/**
@@ -753,21 +753,6 @@ public function addAllowedModules($module)
}
/**
- * Define if module is allowed
- *
- * @param string $moduleName
- * @return bool
- */
- protected function _isAllowedModule($moduleName)
- {
- if (empty($this->_allowedModules)) {
- return true;
- } else {
- return in_array($moduleName, $this->_allowedModules);
- }
- }
-
- /**
* Load declared modules configuration
*
* @return Mage_Core_Model_Config
@@ -776,57 +761,18 @@ protected function _loadDeclaredModules()
{
$moduleFiles = $this->_getDeclaredModuleFiles();
if (!$moduleFiles) {
- return ;
+ return $this;
}
Magento_Profiler::start('load_modules_declaration');
- $unsortedConfig = new Mage_Core_Model_Config_Base();
- $unsortedConfig->loadString('<config/>');
- $fileConfig = new Mage_Core_Model_Config_Base();
-
- // load modules declarations
- foreach ($moduleFiles as $file) {
- $fileConfig->loadFile($file);
+ $unsortedConfig = new Mage_Core_Model_Config_Base('<config/>');
+ foreach ($moduleFiles as $oneConfigFile) {
+ $fileConfig = new Mage_Core_Model_Config_Base($oneConfigFile);
$unsortedConfig->extend($fileConfig);
}
- $moduleDepends = array();
- foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) {
- if (!$this->_isAllowedModule($moduleName)) {
- continue;
- }
-
- $depends = array();
- if ($moduleNode->depends) {
- foreach ($moduleNode->depends->children() as $depend) {
- $depends[$depend->getName()] = true;
- }
- }
- $moduleDepends[$moduleName] = array(
- 'module' => $moduleName,
- 'depends' => $depends,
- 'active' => ('true' === (string)$moduleNode->active ? true : false),
- );
- }
-
- // check and sort module dependence
- $moduleDepends = $this->_sortModuleDepends($moduleDepends);
-
- // create sorted config
- $sortedConfig = new Mage_Core_Model_Config_Base();
- $sortedConfig->loadString('<config><modules/></config>');
-
- foreach ($unsortedConfig->getNode()->children() as $nodeName => $node) {
- if ($nodeName != 'modules') {
- $sortedConfig->getNode()->appendChild($node);
- }
- }
-
- foreach ($moduleDepends as $moduleProp) {
- $node = $unsortedConfig->getNode('modules/'.$moduleProp['module']);
- $sortedConfig->getNode('modules')->appendChild($node);
- }
+ $sortedConfig = new Mage_Core_Model_Config_Module($unsortedConfig, $this->_allowedModules);
$this->extend($sortedConfig);
@@ -835,54 +781,6 @@ protected function _loadDeclaredModules()
}
/**
- * Sort modules and check depends
- *
- * @param array $modules
- * @return array
- */
- protected function _sortModuleDepends($modules)
- {
- foreach ($modules as $moduleName => $moduleProps) {
- $depends = $moduleProps['depends'];
- foreach ($moduleProps['depends'] as $depend => $true) {
- if ($moduleProps['active'] && ((!isset($modules[$depend])) || empty($modules[$depend]['active']))) {
- Mage::throwException(
- Mage::helper('Mage_Core_Helper_Data')->__('Module "%1$s" requires module "%2$s".', $moduleName, $depend)
- );
- }
- $depends = array_merge($depends, $modules[$depend]['depends']);
- }
- $modules[$moduleName]['depends'] = $depends;
- }
- $modules = array_values($modules);
-
- $size = count($modules) - 1;
- for ($i = $size; $i >= 0; $i--) {
- for ($j = $size; $i < $j; $j--) {
- if (isset($modules[$i]['depends'][$modules[$j]['module']])) {
- $value = $modules[$i];
- $modules[$i] = $modules[$j];
- $modules[$j] = $value;
- }
- }
- }
-
- $definedModules = array();
- foreach ($modules as $moduleProp) {
- foreach ($moduleProp['depends'] as $dependModule => $true) {
- if (!isset($definedModules[$dependModule])) {
- Mage::throwException(
- Mage::helper('Mage_Core_Helper_Data')->__('Module "%1$s" cannot depend on "%2$s".', $moduleProp['module'], $dependModule)
- );
- }
- }
- $definedModules[$moduleProp['module']] = true;
- }
-
- return $modules;
- }
-
- /**
* Determine whether provided name begins from any available modules, according to namespaces priority
* If matched, returns as the matched module "factory" name or a fully qualified module name
*
Oops, something went wrong. Retry.

0 comments on commit 93f38e9

Please sign in to comment.