forked from vieter-v/vieter
				
			refactor: added CronExpression.next_n function
							parent
							
								
									bd4bb9a9fb
								
							
						
					
					
						commit
						768da5b790
					
				| 
						 | 
					@ -2,11 +2,13 @@ module schedule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import cli
 | 
					import cli
 | 
				
			||||||
import cron.expression { parse_expression }
 | 
					import cron.expression { parse_expression }
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// cmd returns the cli submodule for previewing a cron schedule.
 | 
					// cmd returns the cli submodule for previewing a cron schedule.
 | 
				
			||||||
pub fn cmd() cli.Command {
 | 
					pub fn cmd() cli.Command {
 | 
				
			||||||
	return cli.Command{
 | 
						return cli.Command{
 | 
				
			||||||
		name: 'schedule'
 | 
							name: 'schedule'
 | 
				
			||||||
 | 
							usage: 'schedule'
 | 
				
			||||||
		description: 'Preview the behavior of a cron schedule.'
 | 
							description: 'Preview the behavior of a cron schedule.'
 | 
				
			||||||
		flags: [
 | 
							flags: [
 | 
				
			||||||
			cli.Flag{
 | 
								cli.Flag{
 | 
				
			||||||
| 
						 | 
					@ -17,16 +19,10 @@ pub fn cmd() cli.Command {
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		]
 | 
							]
 | 
				
			||||||
		execute: fn (cmd cli.Command) ? {
 | 
							execute: fn (cmd cli.Command) ? {
 | 
				
			||||||
			exp := parse_expression(cmd.args.join(' '))?
 | 
								ce := parse_expression(cmd.args.join(' '))?
 | 
				
			||||||
 | 
					 | 
				
			||||||
			mut t := exp.next_from_now()?
 | 
					 | 
				
			||||||
			println(t)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			count := cmd.flags.get_int('count')?
 | 
								count := cmd.flags.get_int('count')?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			for _ in 1 .. count {
 | 
								for t in ce.next_n(time.now(), count)? {
 | 
				
			||||||
				t = exp.next(t)?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				println(t)
 | 
									println(t)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,6 +121,20 @@ pub fn (ce &CronExpression) next_from_now() ?time.Time {
 | 
				
			||||||
	return ce.next(time.now())
 | 
						return ce.next(time.now())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// next_n returns the n next occurences of the expression, given a starting
 | 
				
			||||||
 | 
					// time.
 | 
				
			||||||
 | 
					pub fn (ce &CronExpression) next_n(ref time.Time, n int) ?[]time.Time {
 | 
				
			||||||
 | 
						mut times := []time.Time{cap: n}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						times << ce.next(ref)?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i in 1 .. n {
 | 
				
			||||||
 | 
							times << ce.next(times[i - 1])?
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return times
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// parse_range parses a given string into a range of sorted integers, if
 | 
					// parse_range parses a given string into a range of sorted integers, if
 | 
				
			||||||
// possible.
 | 
					// possible.
 | 
				
			||||||
fn parse_range(s string, min int, max int, mut bitv []bool) ? {
 | 
					fn parse_range(s string, min int, max int, mut bitv []bool) ? {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue