@@ -152,7 +152,7 @@ protected function getParameters($routeData, $routeAction, $bindings)
152152 'description ' => [],
153153 ];
154154 foreach ($ ruleset as $ rule ) {
155- $ this ->parseRule ($ rule , $ attribute , $ attributeData , $ routeData ['id ' ]);
155+ $ this ->parseRule ($ rule , $ attribute , $ attributeData , $ routeData ['id ' ], $ routeData );
156156 }
157157 $ routeData ['parameters ' ][$ attribute ] = $ attributeData ;
158158 }
@@ -356,7 +356,7 @@ protected function splitValuePairs($parameters, $first = 'is ', $last = 'or ')
356356 *
357357 * @return void
358358 */
359- protected function parseRule ($ rule , $ ruleName , &$ attributeData , $ seed )
359+ protected function parseRule ($ rule , $ ruleName , &$ attributeData , $ seed, $ routeData )
360360 {
361361 $ faker = Factory::create ();
362362 $ faker ->seed (crc32 ($ seed ));
@@ -376,8 +376,17 @@ protected function parseRule($rule, $ruleName, &$attributeData, $seed)
376376 break ;
377377 case 'after ' :
378378 $ attributeData ['type ' ] = 'date ' ;
379- $ attributeData ['description ' ][] = Description::parse ($ rule )->with (date (DATE_RFC850 , strtotime ($ parameters [0 ])))->getDescription ();
380- $ attributeData ['value ' ] = date (DATE_RFC850 , strtotime ('+1 day ' , strtotime ($ parameters [0 ])));
379+ $ format = isset ($ attributeData ['format ' ]) ? $ attributeData ['format ' ] : DATE_RFC850 ;
380+
381+ if (strtotime ($ parameters [0 ]) === false ) {
382+ // the `after` date refers to another parameter in the request
383+ $ paramName = $ parameters [0 ];
384+ $ attributeData ['description ' ][] = Description::parse ($ rule )->with ($ paramName )->getDescription ();
385+ $ attributeData ['value ' ] = date ($ format , strtotime ('+1 day ' , strtotime ($ routeData ['parameters ' ][$ paramName ]['value ' ])));
386+ } else {
387+ $ attributeData ['description ' ][] = Description::parse ($ rule )->with (date ($ format , strtotime ($ parameters [0 ])))->getDescription ();
388+ $ attributeData ['value ' ] = date ($ format , strtotime ('+1 day ' , strtotime ($ parameters [0 ])));
389+ }
381390 break ;
382391 case 'alpha ' :
383392 $ attributeData ['description ' ][] = Description::parse ($ rule )->getDescription ();
@@ -418,13 +427,23 @@ protected function parseRule($rule, $ruleName, &$attributeData, $seed)
418427 break ;
419428 case 'before ' :
420429 $ attributeData ['type ' ] = 'date ' ;
421- $ attributeData ['description ' ][] = Description::parse ($ rule )->with (date (DATE_RFC850 , strtotime ($ parameters [0 ])))->getDescription ();
422- $ attributeData ['value ' ] = date (DATE_RFC850 , strtotime ('-1 day ' , strtotime ($ parameters [0 ])));
430+ $ format = isset ($ attributeData ['format ' ]) ? $ attributeData ['format ' ] : DATE_RFC850 ;
431+
432+ if (strtotime ($ parameters [0 ]) === false ) {
433+ // the `before` date refers to another parameter in the request
434+ $ paramName = $ parameters [0 ];
435+ $ attributeData ['description ' ][] = Description::parse ($ rule )->with ($ paramName )->getDescription ();
436+ $ attributeData ['value ' ] = date ($ format , strtotime ('-1 day ' , strtotime ($ routeData ['parameters ' ][$ paramName ]['value ' ])));
437+ } else {
438+ $ attributeData ['description ' ][] = Description::parse ($ rule )->with (date ($ format , strtotime ($ parameters [0 ])))->getDescription ();
439+ $ attributeData ['value ' ] = date ($ format , strtotime ('-1 day ' , strtotime ($ parameters [0 ])));
440+ }
423441 break ;
424442 case 'date_format ' :
425443 $ attributeData ['type ' ] = 'date ' ;
426444 $ attributeData ['description ' ][] = Description::parse ($ rule )->with ($ parameters )->getDescription ();
427- $ attributeData ['value ' ] = date ($ parameters [0 ]);
445+ $ attributeData ['format ' ] = $ parameters [0 ];
446+ $ attributeData ['value ' ] = date ($ attributeData ['format ' ]);
428447 break ;
429448 case 'different ' :
430449 $ attributeData ['description ' ][] = Description::parse ($ rule )->with ($ parameters )->getDescription ();
0 commit comments