ChainProcedureLoader.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /*
  3. * This file is part of the php-phantomjs.
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. namespace JonnyW\PhantomJs\Procedure;
  9. use JonnyW\PhantomJs\Exception\NotExistsException;
  10. /**
  11. * PHP PhantomJs
  12. *
  13. * @author Jon Wenmoth <contact@jonnyw.me>
  14. */
  15. class ChainProcedureLoader implements ProcedureLoaderInterface
  16. {
  17. /**
  18. * Procedure loader storage.
  19. *
  20. * @var array
  21. * @access protected
  22. */
  23. protected $procedureLoaders;
  24. /**
  25. * Internal constructor.
  26. *
  27. * @access public
  28. * @param array $procedureLoaders
  29. */
  30. public function __construct(array $procedureLoaders)
  31. {
  32. $this->procedureLoaders = $procedureLoaders;
  33. }
  34. /**
  35. * Add procedure loader.
  36. *
  37. * @access public
  38. * @param \JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface $procedureLoader
  39. * @return void
  40. */
  41. public function addLoader(ProcedureLoaderInterface $procedureLoader)
  42. {
  43. $this->procedureLoaders[] = $procedureLoader;
  44. }
  45. /**
  46. * Load procedure instance by id.
  47. *
  48. * @access public
  49. * @param string $id
  50. * @throws \InvalidArgumentException
  51. * @return \JonnyW\PhantomJs\Procedure\ProcedureInterface
  52. */
  53. public function load($id)
  54. {
  55. /** @var \JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface $loader */
  56. foreach ($this->procedureLoaders as $loader) {
  57. try {
  58. $procedure = $loader->load($id);
  59. return $procedure;
  60. } catch (\Exception $e) {}
  61. }
  62. throw new \InvalidArgumentException(sprintf('No valid procedure loader could be found to load the \'%s\' procedure.', $id));
  63. }
  64. }