Documentor.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace Faker;
  3. class Documentor
  4. {
  5. protected $generator;
  6. /**
  7. * @param Generator $generator
  8. */
  9. public function __construct(Generator $generator)
  10. {
  11. $this->generator = $generator;
  12. }
  13. /**
  14. * @return array
  15. */
  16. public function getFormatters()
  17. {
  18. $formatters = array();
  19. $providers = array_reverse($this->generator->getProviders());
  20. $providers[]= new Provider\Base($this->generator);
  21. foreach ($providers as $provider) {
  22. $providerClass = get_class($provider);
  23. $formatters[$providerClass] = array();
  24. $refl = new \ReflectionObject($provider);
  25. foreach ($refl->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflmethod) {
  26. if ($reflmethod->getDeclaringClass()->getName() == 'Faker\Provider\Base' && $providerClass != 'Faker\Provider\Base') {
  27. continue;
  28. }
  29. $methodName = $reflmethod->name;
  30. if ($reflmethod->isConstructor()) {
  31. continue;
  32. }
  33. $parameters = array();
  34. foreach ($reflmethod->getParameters() as $reflparameter) {
  35. $parameter = '$'. $reflparameter->getName();
  36. if ($reflparameter->isDefaultValueAvailable()) {
  37. $parameter .= ' = ' . var_export($reflparameter->getDefaultValue(), true);
  38. }
  39. $parameters []= $parameter;
  40. }
  41. $parameters = $parameters ? '('. join(', ', $parameters) . ')' : '';
  42. try {
  43. $example = $this->generator->format($methodName);
  44. } catch (\InvalidArgumentException $e) {
  45. $example = '';
  46. }
  47. if (is_array($example)) {
  48. $example = "array('". join("', '", $example) . "')";
  49. } elseif ($example instanceof \DateTime) {
  50. $example = "DateTime('" . $example->format('Y-m-d H:i:s') . "')";
  51. } elseif ($example instanceof Generator || $example instanceof UniqueGenerator) { // modifier
  52. $example = '';
  53. } else {
  54. $example = var_export($example, true);
  55. }
  56. $formatters[$providerClass][$methodName . $parameters] = $example;
  57. }
  58. }
  59. return $formatters;
  60. }
  61. }