Skip to content

Commit a6b2cc2

Browse files
authored
feature(frequencies) : ability to add schedule frequencies fluently using predefined laravel methods
1 parent ca36913 commit a6b2cc2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1379
-598
lines changed

.gitattributes

+1
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ phpunit.xml.dist export-ignore
1212
*.less linguist-vendored
1313
*.css linguist-vendored
1414
*.js linguist-vendored
15+

config/totem.php

+215-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,219 @@
11
<?php
22

33
return [
4-
4+
'frequencies' => [
5+
[
6+
'label' => 'Every Minute',
7+
'interval' => 'everyMinute',
8+
'parameters' => false,
9+
],
10+
[
11+
'label' => 'Every Five Minutes',
12+
'interval' => 'everyFiveMinutes',
13+
'parameters' => false,
14+
],
15+
[
16+
'label' => 'Every Ten Minutes',
17+
'interval' => 'everyTenMinutes',
18+
'parameters' => false,
19+
],
20+
[
21+
'label' => 'Every Thirty Minutes',
22+
'interval' => 'everyThirtyMinutes',
23+
'parameters' => false,
24+
],
25+
[
26+
'label' => 'Hourly',
27+
'interval' => 'hourly',
28+
'parameters' => false,
29+
],
30+
[
31+
'label' => 'Hourly at',
32+
'interval' => 'hourlyAt',
33+
'parameters' => [
34+
[
35+
'label' => 'At',
36+
'modifier' => 'at',
37+
'type' => 'number',
38+
'min' => '0',
39+
'max' => '59',
40+
],
41+
],
42+
],
43+
[
44+
'label' => 'Daily',
45+
'interval' => 'daily',
46+
'parameters' => false,
47+
],
48+
[
49+
'label' => 'Daily at',
50+
'interval' => 'dailyAt',
51+
'parameters' => [
52+
[
53+
'label' => 'At',
54+
'modifier' => 'at',
55+
'type' => 'time',
56+
],
57+
],
58+
],
59+
[
60+
'label' => 'Twice Daily',
61+
'interval' => 'twiceDaily',
62+
'parameters' => [
63+
[
64+
'label' => 'First',
65+
'modifier' => 'at',
66+
'type' => 'time',
67+
],
68+
[
69+
'label' => 'Second',
70+
'modifier' => 'second_at',
71+
'type' => 'time',
72+
],
73+
],
74+
],
75+
[
76+
'label' => 'Weekly',
77+
'interval' => 'weekly',
78+
'parameters' => false,
79+
],
80+
[
81+
'label' => 'Weekly On',
82+
'interval' => 'weeklyOn',
83+
'parameters' => [
84+
[
85+
'label' => 'On',
86+
'modifier' => 'on',
87+
'type' => 'number',
88+
'min' => '1',
89+
'max' => '31',
90+
],
91+
[
92+
'label' => 'At',
93+
'modifier' => 'at',
94+
'type' => 'time',
95+
],
96+
],
97+
],
98+
[
99+
'label' => 'Monthly',
100+
'interval' => 'monthly',
101+
'parameters' => false,
102+
],
103+
[
104+
'label' => 'Monthly On',
105+
'interval' => 'monthlyOn',
106+
'parameters' => [
107+
[
108+
'label' => 'On',
109+
'modifier' => 'on',
110+
'type' => 'number',
111+
'max' => '',
112+
],
113+
[
114+
'label' => 'At',
115+
'modifier' => 'at',
116+
'type' => 'time',
117+
],
118+
],
119+
],
120+
[
121+
'label' => 'Twice Monthly',
122+
'interval' => 'twiceMonthly',
123+
'parameters' => [
124+
[
125+
'label' => 'First',
126+
'modifier' => 'on',
127+
'type' => 'number',
128+
],
129+
[
130+
'label' => 'Second',
131+
'modifier' => 'second_at',
132+
'type' => 'text',
133+
],
134+
],
135+
],
136+
[
137+
'label' => 'Quarterly',
138+
'interval' => 'quarterly',
139+
'parameters' => false,
140+
],
141+
[
142+
'label' => 'Yearly',
143+
'interval' => 'yearly',
144+
'parameters' => false,
145+
],
146+
[
147+
'label' => 'Weekdays',
148+
'interval' => 'weekdays',
149+
'parameters' => false,
150+
],
151+
[
152+
'label' => 'Every Sunday',
153+
'interval' => 'sundays',
154+
'parameters' => false,
155+
],
156+
[
157+
'label' => 'Every Monday',
158+
'interval' => 'mondays',
159+
'parameters' => false,
160+
],
161+
[
162+
'label' => 'Every Tuesday',
163+
'interval' => 'tuesdays',
164+
'parameters' => false,
165+
],
166+
[
167+
'label' => 'Every Wednesday',
168+
'interval' => 'wednesdays',
169+
'parameters' => false,
170+
],
171+
[
172+
'label' => 'Every Thursday',
173+
'interval' => 'thursdays',
174+
'parameters' => false,
175+
],
176+
[
177+
'label' => 'Every Friday',
178+
'interval' => 'fridays',
179+
'parameters' => false,
180+
],
181+
[
182+
'label' => 'Every Saturday',
183+
'interval' => 'saturdays',
184+
'parameters' => false,
185+
],
186+
[
187+
'label' => 'Between',
188+
'interval' => 'between',
189+
'parameters' => [
190+
[
191+
'label' => 'Start',
192+
'modifier' => 'start',
193+
'type' => 'time',
194+
],
195+
[
196+
'label' => 'End',
197+
'modifier' => 'end',
198+
'type' => 'time',
199+
],
200+
],
201+
],
202+
[
203+
'label' => 'Unless Between',
204+
'interval' => 'unlessBetween',
205+
'parameters' => [
206+
[
207+
'label' => 'Start',
208+
'modifier' => 'start',
209+
'type' => 'time',
210+
],
211+
[
212+
'label' => 'End',
213+
'modifier' => 'end',
214+
'type' => 'time',
215+
],
216+
],
217+
],
218+
],
5219
];

database/factories/ModelFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
static $password;
2828

2929
return [
30-
'description' => $faker->sentence,
31-
'command' => 'Studio\Totem\Console\Commands\ListSchedule',
32-
'cron' => '* * * * *',
30+
'description' => $faker->sentence,
31+
'command' => 'Studio\Totem\Console\Commands\ListSchedule',
32+
'expression' => '* * * * *',
3333
];
3434
});

database/migrations/2017_08_05_194349_create_tasks_table.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public function up()
1818
$table->string('description');
1919
$table->string('command');
2020
$table->string('parameters')->nullable();
21-
$table->string('cron')->nullable();
21+
$table->string('expression')->nullable();
2222
$table->string('timezone')->default('UTC');
23-
$table->boolean('is_active')->default(false);
23+
$table->boolean('is_active')->default(true);
2424
$table->boolean('dont_overlap')->default(false);
2525
$table->boolean('run_in_maintenance')->default(false);
2626
$table->string('notification_email_address')->nullable();

database/migrations/2017_08_05_195539_create_task_frequencies_table.php

+8-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ public function up()
1616
Schema::create('task_frequencies', function (Blueprint $table) {
1717
$table->increments('id');
1818
$table->unsignedInteger('task_id');
19-
$table->enum('frequency', [
19+
$table->string('label');
20+
$table->enum('interval', [
2021
'everyMinute',
2122
'everyFiveMinutes',
2223
'everyTenMinutes',
@@ -27,7 +28,9 @@ public function up()
2728
'dailyAt',
2829
'twiceDaily',
2930
'weekly',
31+
'weeklyOn',
3032
'monthly',
33+
'twiceMonthly',
3134
'monthlyOn',
3235
'quarterly',
3336
'yearly',
@@ -40,9 +43,10 @@ public function up()
4043
'fridays',
4144
'saturdays',
4245
]);
43-
$table->date('on')->nullable();
44-
$table->time('at')->nullable();
45-
$table->time('second_at')->nullable();
46+
$table->integer('on')->nullable();
47+
$table->integer('second_on')->nullable();
48+
$table->string('at')->nullable();
49+
$table->string('second_at')->nullable();
4650
$table->time('start')->nullable();
4751
$table->time('end')->nullable();
4852
$table->timestamps();

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"phpunserialize": "1.*",
1717
"uikit": "^3.0.0-beta.30",
1818
"vue": "^2.2.0",
19-
"@vuikit/util": "^1.3.0",
20-
"vuikit": "git+https://github.com/vuikit/vuikit.git#next"
19+
"xml-loader": "1.1.0"
2120
}
2221
}

0 commit comments

Comments
 (0)