blib/lib/Bigtop/Keywords.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 13 | 14 | 92.8 |
branch | n/a | ||
condition | n/a | ||
subroutine | 3 | 4 | 75.0 |
pod | 2 | 2 | 100.0 |
total | 18 | 20 | 90.0 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package Bigtop::Keywords; | ||||||
2 | 41 | 41 | 245 | use strict; use warnings; | |||
41 | 41 | 69 | |||||
41 | 1784 | ||||||
41 | 213 | ||||||
41 | 78 | ||||||
41 | 120149 | ||||||
3 | |||||||
4 | my %doc_for = ( | ||||||
5 | config => { | ||||||
6 | base_dir => { | ||||||
7 | keyword => 'base_dir', | ||||||
8 | label => 'Parent Dir', | ||||||
9 | descr => 'parent of build dir', | ||||||
10 | type => 'deprecated', | ||||||
11 | sort_order => 20000, | ||||||
12 | }, | ||||||
13 | app_dir => { | ||||||
14 | keyword => 'app_dir', | ||||||
15 | label => 'Build Dir', | ||||||
16 | descr => 'build dir. relative to parent dir', | ||||||
17 | type => 'deprecated', | ||||||
18 | sort_order => 20001, | ||||||
19 | }, | ||||||
20 | engine => { | ||||||
21 | keyword => 'engine', | ||||||
22 | label => 'Engine', | ||||||
23 | descr => 'mod_perl 1.3, mod_perl 2.0, CGI, etc.', | ||||||
24 | type => 'select', | ||||||
25 | options => [ | ||||||
26 | { label => 'mod_perl 1.3', value => 'MP13' }, | ||||||
27 | { label => 'mod_perl 2.0', value => 'MP20' }, | ||||||
28 | { label => 'CGI/FastCGI', value => 'CGI' }, | ||||||
29 | ], | ||||||
30 | sort_order => 10, | ||||||
31 | }, | ||||||
32 | template_engine => { | ||||||
33 | keyword => 'template_engine', | ||||||
34 | label => 'Template Engine', | ||||||
35 | descr => 'Template Toolkit, Mason, etc.', | ||||||
36 | type => 'select', | ||||||
37 | options => [ | ||||||
38 | { label => 'Template Toolkit', value => 'TT' }, | ||||||
39 | { label => 'No Templating', value => 'Default' }, | ||||||
40 | ], | ||||||
41 | sort_order => 20, | ||||||
42 | }, | ||||||
43 | plugins => { | ||||||
44 | keyword => 'plugins', | ||||||
45 | label => 'Plugins', | ||||||
46 | descr => 'List of Plugins i.e. AuthCookie Static', | ||||||
47 | type => 'text', | ||||||
48 | sort_order => 30, | ||||||
49 | }, | ||||||
50 | }, | ||||||
51 | |||||||
52 | app => { | ||||||
53 | no_gen => { | ||||||
54 | keyword => 'no_gen', | ||||||
55 | label => 'No Gen', | ||||||
56 | descr => "Skip this app completely", | ||||||
57 | type => 'boolean', | ||||||
58 | urgency => 0, | ||||||
59 | sort_order => 10, | ||||||
60 | }, | ||||||
61 | location => { | ||||||
62 | keyword => 'location', | ||||||
63 | label => 'Base Location', | ||||||
64 | descr => 'Base Location of the app [defaults to /]' | ||||||
65 | . ' Do not use if you have a Base Controller.', |
||||||
66 | type => 'text', | ||||||
67 | multiple => 0, | ||||||
68 | urgency => 0, | ||||||
69 | sort_order => 20, | ||||||
70 | }, | ||||||
71 | authors => { | ||||||
72 | keyword => 'authors', | ||||||
73 | label => 'Authors', | ||||||
74 | descr => 'Who to blame for the app', | ||||||
75 | type => 'pair', | ||||||
76 | multiple => 1, | ||||||
77 | urgency => 1, | ||||||
78 | pair_labels => [ 'Name', 'Email Address' ], | ||||||
79 | pair_required => 0, | ||||||
80 | sort_order => 30, | ||||||
81 | }, | ||||||
82 | |||||||
83 | contact_us => { | ||||||
84 | keyword => 'contact_us', | ||||||
85 | label => 'Contact Us', | ||||||
86 | descr => 'How to send complaints or join the project', | ||||||
87 | type => 'textarea', | ||||||
88 | multiple => 0, | ||||||
89 | urgency => 0, | ||||||
90 | sort_order => 40, | ||||||
91 | }, | ||||||
92 | email => { | ||||||
93 | keyword => 'email', | ||||||
94 | label => 'Extra Email', | ||||||
95 | descr => 'Where to send complaints (think mailing list)', | ||||||
96 | multiple => 0, | ||||||
97 | urgency => 0, | ||||||
98 | type => 'deprecated', | ||||||
99 | sort_order => 20001, | ||||||
100 | }, | ||||||
101 | copyright_holder => { | ||||||
102 | keyword => 'copyright_holder', | ||||||
103 | label => 'Copyright Holder', | ||||||
104 | descr => 'Who owns the app [defaults to 1st author]', | ||||||
105 | type => 'text', | ||||||
106 | multiple => 1, | ||||||
107 | urgency => 0, | ||||||
108 | sort_order => 50, | ||||||
109 | }, | ||||||
110 | license_text => { | ||||||
111 | keyword => 'license_text', | ||||||
112 | label => 'License Text', | ||||||
113 | descr => 'Restrictions [defaults to Perl license]', | ||||||
114 | type => 'textarea', | ||||||
115 | urgency => 0, | ||||||
116 | sort_order => 60, | ||||||
117 | }, | ||||||
118 | uses => { | ||||||
119 | keyword => 'uses', | ||||||
120 | label => 'Modules Used', | ||||||
121 | descr => 'List of modules used by base module' | ||||||
122 | . ' Do not use if you have a Base Controller.', |
||||||
123 | type => 'text', | ||||||
124 | multiple => 1, | ||||||
125 | urgency => 0, | ||||||
126 | sort_order => 70, | ||||||
127 | }, | ||||||
128 | label => { | ||||||
129 | keyword => 'label', | ||||||
130 | label => 'Label', | ||||||
131 | descr => 'Documentation label for app', | ||||||
132 | type => 'text', | ||||||
133 | multiple => 0, | ||||||
134 | urgency => 0, | ||||||
135 | quick_label => 'Label', | ||||||
136 | sort_order => 80, | ||||||
137 | }, | ||||||
138 | }, | ||||||
139 | |||||||
140 | app_literal => { | ||||||
141 | Conf => { | ||||||
142 | keyword => 'Conf', | ||||||
143 | label => 'Global Level', | ||||||
144 | descr => 'top level of Gantry::Conf file', | ||||||
145 | sort_order => 10, | ||||||
146 | }, | ||||||
147 | # GantryLocation => { | ||||||
148 | # keyword => 'GantryLocation', | ||||||
149 | # label => 'Root level config', | ||||||
150 | # descr => 'controller level of Gantry::Conf file', | ||||||
151 | # sort_order => 20, | ||||||
152 | # }, | ||||||
153 | PerlTop => { | ||||||
154 | keyword => 'PerlTop', | ||||||
155 | label => 'Preamble', | ||||||
156 | descr => | ||||||
157 | 'immediately after shebang line in httpd.conf ' . |
||||||
158 | ' |
||||||
159 | sort_order => 30, | ||||||
160 | }, | ||||||
161 | PerlBlock => { | ||||||
162 | keyword => 'PerlBlock', | ||||||
163 | label => 'Epilogue', | ||||||
164 | descr => 'in the httpd.conf ' . |
||||||
165 | 'with controllers)', | ||||||
166 | sort_order => 40, | ||||||
167 | }, | ||||||
168 | HttpdConf => { | ||||||
169 | keyword => 'HttpdConf', | ||||||
170 | label => 'Apache Conf', | ||||||
171 | descr => 'between location directives in httpd.conf', | ||||||
172 | sort_order => 50, | ||||||
173 | }, | ||||||
174 | Location => { | ||||||
175 | keyword => 'Location', | ||||||
176 | label => 'Base Location', | ||||||
177 | descr => 'in the base Location directive for the app', | ||||||
178 | sort_order => 60, | ||||||
179 | }, | ||||||
180 | SQL => { | ||||||
181 | keyword => 'SQL', | ||||||
182 | label => 'SQL', | ||||||
183 | descr => 'dumped directly into all schemas', | ||||||
184 | sort_order => 70, | ||||||
185 | }, | ||||||
186 | }, | ||||||
187 | |||||||
188 | table => { | ||||||
189 | no_gen => { | ||||||
190 | keyword => 'no_gen', | ||||||
191 | label => 'No Gen', | ||||||
192 | descr => "Skip this table completely", | ||||||
193 | type => 'boolean', | ||||||
194 | sort_order => 10, | ||||||
195 | }, | ||||||
196 | not_for => { | ||||||
197 | keyword => 'not_for', | ||||||
198 | label => 'Not For', | ||||||
199 | descr => 'Tell Model and/or SQL to skip this table', | ||||||
200 | type => 'select', | ||||||
201 | multiple => 1, | ||||||
202 | options => [ | ||||||
203 | { label => 'SQL', value => 'SQL' }, | ||||||
204 | { label => 'Model', value => 'Model' }, | ||||||
205 | ], | ||||||
206 | sort_order => 20, | ||||||
207 | }, | ||||||
208 | data => { | ||||||
209 | keyword => 'data', | ||||||
210 | label => 'Data', | ||||||
211 | descr => 'What to INSERT INTO table upon initial creation', | ||||||
212 | type => 'pair', | ||||||
213 | multiple => 1, | ||||||
214 | repeatable => 1, | ||||||
215 | sort_order => 20000, | ||||||
216 | }, | ||||||
217 | foreign_display => { | ||||||
218 | keyword => 'foreign_display', | ||||||
219 | label => 'Foreign Display', | ||||||
220 | descr => 'Pattern string for other tables: %last, %first', | ||||||
221 | type => 'text', | ||||||
222 | multiple => 0, | ||||||
223 | urgency => 3, | ||||||
224 | sort_order => 30, | ||||||
225 | }, | ||||||
226 | refered_to_by => { | ||||||
227 | keyword => 'refered_to_by', | ||||||
228 | label => 'Refered to by', | ||||||
229 | descr => 'Table has many rows from this other table', | ||||||
230 | type => 'pair', | ||||||
231 | pair_labels => [ 'Foreign Table', 'Name of Has Many' ], | ||||||
232 | pair_required => 0, | ||||||
233 | multiple => 1, | ||||||
234 | repeatable => 0, | ||||||
235 | urgency => 0, | ||||||
236 | sort_order => 35, | ||||||
237 | }, | ||||||
238 | model_base_class => { | ||||||
239 | keyword => 'model_base_class', | ||||||
240 | label => 'Inherits From', | ||||||
241 | descr => 'Models inherit from this [has good default]', | ||||||
242 | type => 'text', | ||||||
243 | multiple => 0, | ||||||
244 | sort_order => 40, | ||||||
245 | }, | ||||||
246 | sequence => { | ||||||
247 | keyword => 'sequence', | ||||||
248 | label => 'Sequence', | ||||||
249 | descr => 'Which sequence to take default keys from', | ||||||
250 | type => 'text', | ||||||
251 | multiple => 0, | ||||||
252 | urgency => 1, | ||||||
253 | sort_order => 50, | ||||||
254 | }, | ||||||
255 | label => { | ||||||
256 | keyword => 'label', | ||||||
257 | label => 'Label', | ||||||
258 | descr => 'Documentation label for table', | ||||||
259 | type => 'text', | ||||||
260 | multiple => 0, | ||||||
261 | urgency => 0, | ||||||
262 | quick_label => 'Label', | ||||||
263 | sort_order => 60, | ||||||
264 | }, | ||||||
265 | }, | ||||||
266 | |||||||
267 | field => { | ||||||
268 | no_gen => { | ||||||
269 | keyword => 'no_gen', | ||||||
270 | label => 'No Gen', | ||||||
271 | descr => "Skip this field completely", | ||||||
272 | type => 'boolean', | ||||||
273 | sort_order => 10, | ||||||
274 | }, | ||||||
275 | not_for => { | ||||||
276 | keyword => 'not_for', | ||||||
277 | label => 'Not For', | ||||||
278 | descr => 'Tell Model and/or SQL to skip this field', | ||||||
279 | type => 'select', | ||||||
280 | multiple => 1, | ||||||
281 | options => [ | ||||||
282 | { label => 'SQL', value => 'SQL' }, | ||||||
283 | { label => 'Model', value => 'Model' }, | ||||||
284 | ], | ||||||
285 | sort_order => 20, | ||||||
286 | }, | ||||||
287 | is => { | ||||||
288 | keyword => 'is', | ||||||
289 | label => 'SQL Type Info', | ||||||
290 | descr => 'SQL type clause phrases, e.g.:' | ||||||
291 | . "int4\nvarchar\nprimary_key\nauto", |
||||||
292 | type => 'text', | ||||||
293 | multiple => 1, | ||||||
294 | urgency => 10, | ||||||
295 | quick_label => 'SQL Type', | ||||||
296 | sort_order => 30, | ||||||
297 | }, | ||||||
298 | accessor => { | ||||||
299 | keyword => 'accessor', | ||||||
300 | label => 'Accessor Name', | ||||||
301 | descr => 'DBIx::Class alternate accessor name for this column', | ||||||
302 | type => 'text', | ||||||
303 | multiple => 1, | ||||||
304 | urgency => 0, | ||||||
305 | sort_order => 35, | ||||||
306 | }, | ||||||
307 | add_columns => { | ||||||
308 | keyword => 'add_columns', | ||||||
309 | label => 'Custom add_columns', | ||||||
310 | descr => 'DBIx::Class alternate column addition', | ||||||
311 | type => 'pair', | ||||||
312 | pair_labels => [ 'Key', 'Value' ], | ||||||
313 | pair_required => 1, | ||||||
314 | multiple => 1, | ||||||
315 | urgency => 0, | ||||||
316 | sort_order => 36, | ||||||
317 | }, | ||||||
318 | refers_to => { | ||||||
319 | keyword => 'refers_to', | ||||||
320 | label => 'Foreign Key Table', | ||||||
321 | descr => 'Where this foreign key points', | ||||||
322 | type => 'pair', | ||||||
323 | pair_labels => [ 'Table', 'Column' ], | ||||||
324 | pair_required => 0, | ||||||
325 | multiple => 0, | ||||||
326 | urgency => 1, | ||||||
327 | sort_order => 40, | ||||||
328 | }, | ||||||
329 | quasi_refers_to => { | ||||||
330 | keyword => 'quasi_refers_to', | ||||||
331 | label => 'Quasi-Foreign Key Table', | ||||||
332 | descr => 'Where this column usually points', | ||||||
333 | type => 'pair', | ||||||
334 | pair_labels => [ 'Table', 'Column' ], | ||||||
335 | pair_required => 0, | ||||||
336 | multiple => 0, | ||||||
337 | urgency => 0, | ||||||
338 | sort_order => 45, | ||||||
339 | }, | ||||||
340 | on_delete => { | ||||||
341 | keyword => 'on_delete', | ||||||
342 | label => 'On Delete Behavior', | ||||||
343 | descr => 'What to do when foreign key column\'s row dies', | ||||||
344 | type => 'text', | ||||||
345 | multiple => 0, | ||||||
346 | urgency => 0, | ||||||
347 | sort_order => 50, | ||||||
348 | }, | ||||||
349 | on_update => { | ||||||
350 | keyword => 'on_update', | ||||||
351 | label => 'On Update Behavior', | ||||||
352 | descr => 'What to do when foreign key column\'s row changes', | ||||||
353 | type => 'text', | ||||||
354 | multiple => 0, | ||||||
355 | urgency => 0, | ||||||
356 | sort_order => 51, | ||||||
357 | }, | ||||||
358 | label => { | ||||||
359 | keyword => 'label', | ||||||
360 | label => 'Label', | ||||||
361 | descr => 'Default on-screen label for field', | ||||||
362 | type => 'text', | ||||||
363 | multiple => 0, | ||||||
364 | urgency => 5, | ||||||
365 | quick_label => 'Label', | ||||||
366 | sort_order => 60, | ||||||
367 | }, | ||||||
368 | searchable => { | ||||||
369 | keyword => 'searchable', | ||||||
370 | label => 'Searchable', | ||||||
371 | descr => 'Include this field in searches?', | ||||||
372 | type => 'boolean', | ||||||
373 | quick_label => 'Searchable', | ||||||
374 | sort_order => 65, | ||||||
375 | }, | ||||||
376 | html_form_type => { | ||||||
377 | keyword => 'html_form_type', | ||||||
378 | label => 'Form Type', | ||||||
379 | descr => 'form type: text, textarea, select', | ||||||
380 | type => 'select', | ||||||
381 | options => [ | ||||||
382 | { label => '-- Choose One --', value => 'undefined' }, | ||||||
383 | { label => 'text', value => 'text' }, | ||||||
384 | { label => 'textarea', value => 'textarea' }, | ||||||
385 | { label => 'select', value => 'select' }, | ||||||
386 | { label => 'display', value => 'display' }, | ||||||
387 | ], | ||||||
388 | urgency => 5, | ||||||
389 | sort_order => 70, | ||||||
390 | }, | ||||||
391 | html_form_optional => { | ||||||
392 | keyword => 'html_form_optional', | ||||||
393 | label => 'Optional', | ||||||
394 | descr => 'May user skip this field?', | ||||||
395 | type => 'boolean', | ||||||
396 | quick_label => 'Optional', | ||||||
397 | sort_order => 80, | ||||||
398 | }, | ||||||
399 | html_form_constraint => { | ||||||
400 | keyword => 'html_form_constraint', | ||||||
401 | label => 'Constraint', | ||||||
402 | descr => 'Data::FormValidator constraint, e.g.: ' | ||||||
403 | . 'qr{^\d$}', |
||||||
404 | type => 'text', | ||||||
405 | multiple => 0, | ||||||
406 | quick_label => 'Constraint', | ||||||
407 | sort_order => 90, | ||||||
408 | }, | ||||||
409 | html_form_default_value => { | ||||||
410 | keyword => 'html_form_default_value', | ||||||
411 | label => 'Default Value', | ||||||
412 | descr => 'Form element value when no other is available', | ||||||
413 | type => 'text', | ||||||
414 | multiple => 0, | ||||||
415 | quick_label => 'Default', | ||||||
416 | sort_order => 100, | ||||||
417 | }, | ||||||
418 | html_form_cols => { | ||||||
419 | keyword => 'html_form_cols', | ||||||
420 | label => 'Columns', | ||||||
421 | descr => 'cols attribute of text area', | ||||||
422 | type => 'text', | ||||||
423 | field_type => 'textarea', | ||||||
424 | multiple => 0, | ||||||
425 | sort_order => 110, | ||||||
426 | }, | ||||||
427 | html_form_rows => { | ||||||
428 | keyword => 'html_form_rows', | ||||||
429 | label => 'Rows', | ||||||
430 | descr => 'rows attribute of text area', | ||||||
431 | type => 'text', | ||||||
432 | field_type => 'textarea', | ||||||
433 | multiple => 0, | ||||||
434 | sort_order => 120, | ||||||
435 | }, | ||||||
436 | html_form_display_size => { | ||||||
437 | keyword => 'html_form_display_size', | ||||||
438 | label => 'Size', | ||||||
439 | descr => 'width attribute if type is text', | ||||||
440 | type => 'text', | ||||||
441 | field_type => 'text', | ||||||
442 | multiple => 0, | ||||||
443 | sort_order => 130, | ||||||
444 | }, | ||||||
445 | html_form_class => { | ||||||
446 | keyword => 'html_form_class', | ||||||
447 | label => 'Class', | ||||||
448 | descr => 'class attribute for the form field', | ||||||
449 | type => 'text', | ||||||
450 | field_type => 'text', | ||||||
451 | multiple => 0, | ||||||
452 | sort_order => 130, | ||||||
453 | }, | ||||||
454 | html_form_hint => { | ||||||
455 | keyword => 'html_form_hint', | ||||||
456 | label => 'Hint', | ||||||
457 | descr => 'form field hint', | ||||||
458 | type => 'text', | ||||||
459 | multiple => 0, | ||||||
460 | sort_order => 135, | ||||||
461 | }, | ||||||
462 | html_form_options => { | ||||||
463 | keyword => 'html_form_options', | ||||||
464 | label => 'Options', | ||||||
465 | descr => 'Choices for fields of type select ' |
||||||
466 | . '[ignored for refers_to fields]', | ||||||
467 | type => 'pair', | ||||||
468 | field_type => 'select', | ||||||
469 | multiple => 1, | ||||||
470 | pair_labels => [ 'Label', 'Database Value' ], | ||||||
471 | pair_required => 1, | ||||||
472 | sort_order => 140, | ||||||
473 | }, | ||||||
474 | html_form_foreign => { | ||||||
475 | keyword => 'html_form_foreign', | ||||||
476 | label => 'Foreign', | ||||||
477 | descr => 'Display field is a foreign key', | ||||||
478 | type => 'boolean', | ||||||
479 | field_type => 'display', | ||||||
480 | multiple => 0, | ||||||
481 | sort_order => 145, | ||||||
482 | }, | ||||||
483 | html_form_onchange => { | ||||||
484 | keyword => 'html_form_onchange', | ||||||
485 | label => 'onchange Callback', | ||||||
486 | descr => 'Name of Javascript function to call on change', | ||||||
487 | type => 'text', | ||||||
488 | field_type => 'select', | ||||||
489 | multiple => 0, | ||||||
490 | sort_order => 146, | ||||||
491 | }, | ||||||
492 | html_form_fieldset => { | ||||||
493 | keyword => 'html_form_fieldset', | ||||||
494 | label => 'Fieldset', | ||||||
495 | descr => 'Name of fieldset to group this field into', | ||||||
496 | type => 'text', | ||||||
497 | multiple => 0, | ||||||
498 | sort_order => 147, | ||||||
499 | }, | ||||||
500 | date_select_text => { | ||||||
501 | keyword => 'date_select_text', | ||||||
502 | label => 'Date Popup Link Text', | ||||||
503 | descr => 'link text for date popup window', | ||||||
504 | type => 'text', | ||||||
505 | field_type => 'text', | ||||||
506 | multiple => 0, | ||||||
507 | refresh => 1, | ||||||
508 | sort_order => 150, | ||||||
509 | }, | ||||||
510 | html_form_raw_html => { | ||||||
511 | keyword => 'html_form_raw_html', | ||||||
512 | label => 'Raw HTML', | ||||||
513 | descr => q!appears before this field's table row!, | ||||||
514 | type => 'text', | ||||||
515 | multiple => 0, | ||||||
516 | sort_order => 160, | ||||||
517 | }, | ||||||
518 | non_essential => { | ||||||
519 | keyword => 'non_essential', | ||||||
520 | label => 'Non-essential', | ||||||
521 | descr => 'Tells modeler: retrieve only when accessed', | ||||||
522 | type => 'boolean', | ||||||
523 | sort_order => 170, | ||||||
524 | }, | ||||||
525 | pseudo_value => { | ||||||
526 | keyword => 'pseudo_value', | ||||||
527 | label => 'Value for Pseudo Field', | ||||||
528 | descr => q[This is the definition for a pseudo field. By defining it, you're declaring the field as a pseudo field], | ||||||
529 | type => 'text', | ||||||
530 | sort_order => 180, | ||||||
531 | }, | ||||||
532 | unique_name => { | ||||||
533 | keyword => 'unique_name', | ||||||
534 | label => 'Unique constraint name', | ||||||
535 | descr => q[Declare this field as unique, and use the value for the constraint name], | ||||||
536 | type => 'text', | ||||||
537 | sort_order => 190, | ||||||
538 | } | ||||||
539 | }, | ||||||
540 | |||||||
541 | extra_sql => { | ||||||
542 | sql => { | ||||||
543 | keyword => 'sql', | ||||||
544 | label => 'SQL', | ||||||
545 | descr => 'Literal SQL, use bind parameters, see below.', | ||||||
546 | type => 'text', | ||||||
547 | multiplie => 0, | ||||||
548 | urgency => 10, | ||||||
549 | sort_order => 10, | ||||||
550 | }, | ||||||
551 | expects => { | ||||||
552 | keyword => 'expects', | ||||||
553 | label => 'Bind Parameters', | ||||||
554 | descr => | ||||||
555 | 'What your SQL needs for positional binding.' | ||||||
556 | . ' [optional, omit if you have no bound parameters]', | ||||||
557 | type => 'pair', | ||||||
558 | pair_required => 0, | ||||||
559 | pair_labels => [ 'Name', 'Type' ], | ||||||
560 | multiple => 1, | ||||||
561 | urgency => 5, | ||||||
562 | sort_order => 20, | ||||||
563 | }, | ||||||
564 | returns => { | ||||||
565 | keyword => 'returns', | ||||||
566 | label => 'Returned Columns', | ||||||
567 | descr => | ||||||
568 | 'Names of columns in SQL output.' | ||||||
569 | . ' [optional, omit if you expect no returned rows]', | ||||||
570 | type => 'pair', | ||||||
571 | pair_required => 0, | ||||||
572 | pair_labels => [ 'Name', 'Type' ], | ||||||
573 | multiple => 1, | ||||||
574 | urgency => 5, | ||||||
575 | sort_order => 30, | ||||||
576 | }, | ||||||
577 | }, | ||||||
578 | |||||||
579 | join_table => { | ||||||
580 | joins => { | ||||||
581 | keyword => 'joins', | ||||||
582 | label => 'Joins These', | ||||||
583 | descr => 'Which tables does this one join?', | ||||||
584 | type => 'pair', | ||||||
585 | pair_labels => [ 'Table', 'Table' ], | ||||||
586 | pair_required => 1, | ||||||
587 | multiple => 0, | ||||||
588 | urgency => 10, | ||||||
589 | sort_order => 10, | ||||||
590 | }, | ||||||
591 | names => { | ||||||
592 | keyword => 'names', | ||||||
593 | label => 'Name the Joins', | ||||||
594 | descr => 'What should I call each has many?', | ||||||
595 | type => 'pair', | ||||||
596 | pair_labels => [ 'Has Many Name', 'Has Many Name' ], | ||||||
597 | pair_required => 1, | ||||||
598 | multiple => 0, | ||||||
599 | urgency => 0, | ||||||
600 | sort_order => 20, | ||||||
601 | }, | ||||||
602 | data => { | ||||||
603 | keyword => 'data', | ||||||
604 | label => 'Data', | ||||||
605 | descr => 'What to INSERT INTO table upon initial creation', | ||||||
606 | type => 'pair', | ||||||
607 | pair_required => 1, | ||||||
608 | multiple => 1, | ||||||
609 | repeatable => 1, | ||||||
610 | sort_order => 20000, | ||||||
611 | }, | ||||||
612 | }, | ||||||
613 | |||||||
614 | controller => { | ||||||
615 | no_gen => { | ||||||
616 | keyword => 'no_gen', | ||||||
617 | label => 'No Gen', | ||||||
618 | descr => "Skip this controller completely", | ||||||
619 | type => 'boolean', | ||||||
620 | urgency => 0, | ||||||
621 | sort_order => 10, | ||||||
622 | controller_types => { | ||||||
623 | all => 1, | ||||||
624 | }, | ||||||
625 | }, | ||||||
626 | location => { | ||||||
627 | keyword => 'location', | ||||||
628 | label => 'Location', | ||||||
629 | descr => 'Absolute Location of this controller ' | ||||||
630 | . '[non-base controllers must have either a ' |
||||||
631 | . 'location or a rel_location.]', | ||||||
632 | type => 'text', | ||||||
633 | multiple => 0, | ||||||
634 | urgency => 5, | ||||||
635 | sort_order => 20, | ||||||
636 | controller_types => { | ||||||
637 | all => 1, | ||||||
638 | }, | ||||||
639 | }, | ||||||
640 | rel_location => { | ||||||
641 | keyword => 'rel_location', | ||||||
642 | label => 'Relative Loc.', | ||||||
643 | descr => 'Location of this controller relative to app location' | ||||||
644 | . ' [non-base controllers must have ' |
||||||
645 | . 'location or rel_location.]', | ||||||
646 | type => 'text', | ||||||
647 | multiple => 0, | ||||||
648 | urgency => 5, | ||||||
649 | sort_order => 30, | ||||||
650 | controller_types => { | ||||||
651 | stub => 1, | ||||||
652 | AutoCRUD => 1, | ||||||
653 | CRUD => 1, | ||||||
654 | SOAP => 1, | ||||||
655 | SOAPDoc => 1, | ||||||
656 | }, | ||||||
657 | }, | ||||||
658 | controls_table => { | ||||||
659 | keyword => 'controls_table', | ||||||
660 | label => 'Controls Table', | ||||||
661 | descr => 'Table this controller manages', | ||||||
662 | type => 'text', | ||||||
663 | multiple => 0, | ||||||
664 | urgency => 5, | ||||||
665 | sort_order => 40, | ||||||
666 | controller_types => { | ||||||
667 | all => 1, | ||||||
668 | }, | ||||||
669 | }, | ||||||
670 | gen_uses => { | ||||||
671 | keyword => 'gen_uses', | ||||||
672 | label => 'Modules Used', | ||||||
673 | descr => 'List of modules used in gen module ' . #/ |
||||||
674 | 'use list ex: qw( :default )', | ||||||
675 | type => 'text', | ||||||
676 | type => 'pair', | ||||||
677 | multiple => 1, | ||||||
678 | sort_order => 45, | ||||||
679 | pair_labels => [ 'Module', 'Literal Use List' ], | ||||||
680 | pair_required => 0, | ||||||
681 | controller_types => { | ||||||
682 | all => 1, | ||||||
683 | }, | ||||||
684 | }, | ||||||
685 | stub_uses => { | ||||||
686 | keyword => 'stub_uses', | ||||||
687 | label => 'Modules Used', | ||||||
688 | descr => 'List of modules used in stub module', | ||||||
689 | type => 'text', | ||||||
690 | type => 'pair', | ||||||
691 | multiple => 1, | ||||||
692 | sort_order => 48, | ||||||
693 | pair_labels => [ 'Module', 'Literal Use List' ], | ||||||
694 | pair_required => 0, | ||||||
695 | controller_types => { | ||||||
696 | all => 1, | ||||||
697 | }, | ||||||
698 | }, | ||||||
699 | uses => { | ||||||
700 | keyword => 'uses', | ||||||
701 | label => 'Modules Used', | ||||||
702 | descr => 'List of modules used by gen and stub modules', | ||||||
703 | type => 'pair', | ||||||
704 | multiple => 1, | ||||||
705 | sort_order => 50, | ||||||
706 | pair_labels => [ 'Module', 'Literal Use List' ], | ||||||
707 | pair_required => 0, | ||||||
708 | controller_types => { | ||||||
709 | all => 1, | ||||||
710 | }, | ||||||
711 | }, | ||||||
712 | plugins => { | ||||||
713 | keyword => 'plugins', | ||||||
714 | label => 'Plugins Used', | ||||||
715 | descr => 'List of plugins used by gen module', | ||||||
716 | type => 'text', | ||||||
717 | multiple => 1, | ||||||
718 | sort_order => 52, | ||||||
719 | controller_types => { | ||||||
720 | all => 1, | ||||||
721 | }, | ||||||
722 | }, | ||||||
723 | text_description => { | ||||||
724 | keyword => 'text_description', | ||||||
725 | label => 'Text Descr.', | ||||||
726 | descr => 'Required for Gantry\'s AutoCRUD', | ||||||
727 | type => 'text', | ||||||
728 | multiple => 0, | ||||||
729 | urgency => 3, | ||||||
730 | sort_order => 60, | ||||||
731 | controller_types => { | ||||||
732 | AutoCRUD => 1, | ||||||
733 | base_controller => 1, | ||||||
734 | }, | ||||||
735 | }, | ||||||
736 | page_link_label => { | ||||||
737 | keyword => 'page_link_label', | ||||||
738 | label => 'Navigation Label', | ||||||
739 | descr => 'Link text in navigation bar [use only ' |
||||||
740 | . 'for navigable controllers]', | ||||||
741 | type => 'text', | ||||||
742 | multiple => 0, | ||||||
743 | urgency => 3, | ||||||
744 | sort_order => 70, | ||||||
745 | controller_types => { | ||||||
746 | all => 1, | ||||||
747 | }, | ||||||
748 | }, | ||||||
749 | autocrud_helper => { | ||||||
750 | keyword => 'autocrud_helper', | ||||||
751 | label => 'AutoCRUDHelper', | ||||||
752 | descr => 'Gantry::Plugins::AutoCRUDHelper for your ORM', | ||||||
753 | type => 'text', | ||||||
754 | mulitple => 0, | ||||||
755 | urgency => 0, | ||||||
756 | sort_order => 80, | ||||||
757 | controller_types => { | ||||||
758 | AutoCRUD => 1, | ||||||
759 | base_controller => 1, | ||||||
760 | }, | ||||||
761 | }, | ||||||
762 | skip_test => { | ||||||
763 | keyword => 'skip_test', | ||||||
764 | label => 'No Test', | ||||||
765 | descr => "Skip default page hit test of this controller", | ||||||
766 | type => 'boolean', | ||||||
767 | urgency => 0, | ||||||
768 | sort_order => 90, | ||||||
769 | controller_types => { | ||||||
770 | all => 1, | ||||||
771 | }, | ||||||
772 | }, | ||||||
773 | soap_name => { | ||||||
774 | keyword => 'soap_name', | ||||||
775 | label => 'Soap Name', | ||||||
776 | descr => 'Base of all WSDL names', | ||||||
777 | type => 'text', | ||||||
778 | urgency => 10, | ||||||
779 | sort_order => 100, | ||||||
780 | controller_types => { | ||||||
781 | SOAP => 1, | ||||||
782 | SOAPDoc => 1, | ||||||
783 | }, | ||||||
784 | }, | ||||||
785 | namespace_base => { | ||||||
786 | keyword => 'namespace_base', | ||||||
787 | label => 'Namespace Base', | ||||||
788 | descr => 'Base URL of WSDL namespace including domain', | ||||||
789 | type => 'text', | ||||||
790 | urgency => 10, | ||||||
791 | sort_order => 110, | ||||||
792 | controller_types => { | ||||||
793 | SOAP => 1, | ||||||
794 | SOAPDoc => 1, | ||||||
795 | }, | ||||||
796 | }, | ||||||
797 | }, | ||||||
798 | |||||||
799 | controller_literal => { | ||||||
800 | Location => { | ||||||
801 | keyword => 'Location', | ||||||
802 | label => 'Controller Loc.', | ||||||
803 | descr => 'in Location block for this controller', | ||||||
804 | sort_order => 10, | ||||||
805 | }, | ||||||
806 | GantryLocation => { | ||||||
807 | keyword => 'GantryLocation', | ||||||
808 | label => 'Controller Loc.', | ||||||
809 | descr => | ||||||
810 | 'in GantryLocation block for this controller', | ||||||
811 | sort_order => 20, | ||||||
812 | }, | ||||||
813 | }, | ||||||
814 | |||||||
815 | method => { | ||||||
816 | no_gen => { | ||||||
817 | keyword => 'no_gen', | ||||||
818 | label => 'No Gen', | ||||||
819 | descr => "Skip this method completely", | ||||||
820 | type => 'boolean', | ||||||
821 | urgency => 0, | ||||||
822 | sort_order => 10, | ||||||
823 | applies_to => 'all', | ||||||
824 | method_types => { | ||||||
825 | all => 1, | ||||||
826 | }, | ||||||
827 | }, | ||||||
828 | extra_args => { | ||||||
829 | keyword => 'extra_args', | ||||||
830 | label => 'Extra Arguments', | ||||||
831 | descr => 'Extra args for any method', | ||||||
832 | type => 'text', | ||||||
833 | multiple => 1, | ||||||
834 | urgency => 0, | ||||||
835 | sort_order => 20, | ||||||
836 | applies_to => 'all but SOAP', | ||||||
837 | method_types => { | ||||||
838 | main_listing => 1, | ||||||
839 | base_links => 1, | ||||||
840 | links => 1, | ||||||
841 | AutoCRUD_form => 1, | ||||||
842 | CRUD_form => 1, | ||||||
843 | stub => 1, | ||||||
844 | }, | ||||||
845 | }, | ||||||
846 | order_by => { | ||||||
847 | keyword => 'order_by', | ||||||
848 | label => 'SQL Order By', | ||||||
849 | descr => 'Exact text of SQL order by', | ||||||
850 | type => 'text', | ||||||
851 | multiple => 0, | ||||||
852 | urgency => 0, | ||||||
853 | sort_order => 22, | ||||||
854 | applies_to => 'main listing', | ||||||
855 | method_types => { | ||||||
856 | main_listing => 1, | ||||||
857 | }, | ||||||
858 | }, | ||||||
859 | rows => { | ||||||
860 | keyword => 'rows', | ||||||
861 | label => 'Rows per Page', | ||||||
862 | descr => 'How many rows should appear per listing page?', | ||||||
863 | type => 'text', | ||||||
864 | multiple => 0, | ||||||
865 | urgency => 3, | ||||||
866 | sort_order => 25, | ||||||
867 | applies_to => 'main listing', | ||||||
868 | method_types => { | ||||||
869 | main_listing => 1, | ||||||
870 | }, | ||||||
871 | }, | ||||||
872 | paged_conf => { | ||||||
873 | keyword => 'paged_conf', | ||||||
874 | label => 'Conf var for rows', | ||||||
875 | descr => 'Take rows per page from this (conf var) accessor', | ||||||
876 | type => 'text', | ||||||
877 | multiple => 0, | ||||||
878 | urgency => 0, | ||||||
879 | sort_order => 26, | ||||||
880 | applies_to => 'main listing', | ||||||
881 | method_types => { | ||||||
882 | main_listing => 1, | ||||||
883 | }, | ||||||
884 | }, | ||||||
885 | cols => { | ||||||
886 | keyword => 'cols', | ||||||
887 | label => 'Include These Fields', | ||||||
888 | descr => 'Fields to include in main_listing', | ||||||
889 | type => 'text', | ||||||
890 | multiple => 1, | ||||||
891 | urgency => 5, | ||||||
892 | sort_order => 30, | ||||||
893 | applies_to => 'main listing', | ||||||
894 | method_types => { | ||||||
895 | main_listing => 1, | ||||||
896 | }, | ||||||
897 | }, | ||||||
898 | col_labels => { | ||||||
899 | keyword => 'col_labels', | ||||||
900 | label => 'Override Field Labels', | ||||||
901 | descr => 'Labels for fields on main_listing [optional ' |
||||||
902 | . 'default uses field labels]', | ||||||
903 | type => 'text', | ||||||
904 | multiple => 1, | ||||||
905 | urgency => 0, | ||||||
906 | sort_order => 40, | ||||||
907 | applies_to => 'main listing', | ||||||
908 | method_types => { | ||||||
909 | main_listing => 1, | ||||||
910 | }, | ||||||
911 | }, | ||||||
912 | pseudo_cols => { | ||||||
913 | keyword => 'pseudo_cols', | ||||||
914 | label => 'Include These Pseudo Fields', | ||||||
915 | descr => 'Pseudo Fields to include in main_listing', | ||||||
916 | type => 'text', | ||||||
917 | multiple => 1, | ||||||
918 | urgency => 5, | ||||||
919 | sort_order => 45, | ||||||
920 | applies_to => 'main listing', | ||||||
921 | method_types => { | ||||||
922 | main_listing => 1, | ||||||
923 | }, | ||||||
924 | }, | ||||||
925 | livesearch => { | ||||||
926 | keyword => 'livesearch', | ||||||
927 | label => 'Live Search', | ||||||
928 | descr => 'Places a search box on results page', | ||||||
929 | type => 'boolean', | ||||||
930 | urgency => 0, | ||||||
931 | sort_order => 49, | ||||||
932 | applies_to => 'main listing', | ||||||
933 | method_types => { | ||||||
934 | main_listing => 1, | ||||||
935 | }, | ||||||
936 | }, | ||||||
937 | header_options => { | ||||||
938 | keyword => 'header_options', | ||||||
939 | label => 'Header Options', | ||||||
940 | descr => 'User actions affecting the table [like Add]', | ||||||
941 | type => 'pair', | ||||||
942 | pair_labels => [ 'Label', 'Location' ], | ||||||
943 | pair_required => 0, | ||||||
944 | multiple => 1, | ||||||
945 | urgency => 5, | ||||||
946 | sort_order => 50, | ||||||
947 | applies_to => 'main listing', | ||||||
948 | method_types => { | ||||||
949 | main_listing => 1, | ||||||
950 | }, | ||||||
951 | }, | ||||||
952 | header_option_perms => { | ||||||
953 | keyword => 'header_option_perms', | ||||||
954 | label => 'Header Option Permissions', | ||||||
955 | descr => 'The table permission which controls options' . | ||||||
956 | ' Pick from create, retrieve, update, or delete', |
||||||
957 | type => 'pair', | ||||||
958 | pair_required => 1, | ||||||
959 | pair_labels => [ 'Header Option Label', | ||||||
960 | 'Controlling Permission' ], | ||||||
961 | multiple => 1, | ||||||
962 | urgency => 0, | ||||||
963 | sort_order => 55, | ||||||
964 | applies_to => 'main listing', | ||||||
965 | method_types => { | ||||||
966 | main_listing => 1, | ||||||
967 | }, | ||||||
968 | }, | ||||||
969 | row_options => { | ||||||
970 | keyword => 'row_options', | ||||||
971 | label => 'Row Options', | ||||||
972 | descr => 'User actions affecting rows [like Edit]' . | ||||||
973 | ' Locations should not end with / or ' . |
||||||
974 | ' include $id', |
||||||
975 | type => 'pair', | ||||||
976 | pair_required => 0, | ||||||
977 | pair_labels => [ 'Label', 'Location' ], | ||||||
978 | multiple => 1, | ||||||
979 | urgency => 5, | ||||||
980 | sort_order => 60, | ||||||
981 | applies_to => 'main listing', | ||||||
982 | method_types => { | ||||||
983 | main_listing => 1, | ||||||
984 | }, | ||||||
985 | }, | ||||||
986 | row_option_perms => { | ||||||
987 | keyword => 'row_option_perms', | ||||||
988 | label => 'Row Option Permissions', | ||||||
989 | descr => 'The table permission which controls options' . | ||||||
990 | ' Pick from create, retrieve, update, or delete', |
||||||
991 | type => 'pair', | ||||||
992 | pair_required => 1, | ||||||
993 | pair_labels => [ 'Row Option Label', 'Controlling Permission' ], | ||||||
994 | multiple => 1, | ||||||
995 | urgency => 0, | ||||||
996 | sort_order => 65, | ||||||
997 | applies_to => 'main listing', | ||||||
998 | method_types => { | ||||||
999 | main_listing => 1, | ||||||
1000 | }, | ||||||
1001 | }, | ||||||
1002 | limit_by => { | ||||||
1003 | keyword => 'limit_by', | ||||||
1004 | label => 'Limit by Foreign Key', | ||||||
1005 | descr => 'If an arg is supplied, show only matching rows', | ||||||
1006 | type => 'text', | ||||||
1007 | pair_required => 0, | ||||||
1008 | multiple => 0, | ||||||
1009 | urgency => 0, | ||||||
1010 | sort_order => 68, | ||||||
1011 | applies_to => 'main listing', | ||||||
1012 | method_types => { | ||||||
1013 | main_listing => 1, | ||||||
1014 | }, | ||||||
1015 | }, | ||||||
1016 | where_terms => { | ||||||
1017 | keyword => 'where_terms', | ||||||
1018 | label => 'Equality tests on listed columns', | ||||||
1019 | descr => 'Where clause will include these equality tests', | ||||||
1020 | type => 'pair', | ||||||
1021 | pair_labels => [ 'Table', 'Table' ], | ||||||
1022 | pair_required => 1, | ||||||
1023 | multiple => 1, | ||||||
1024 | urgency => 0, | ||||||
1025 | sort_order => 69, | ||||||
1026 | applies_to => 'main listing', | ||||||
1027 | method_types => { | ||||||
1028 | main_listing => 1, | ||||||
1029 | }, | ||||||
1030 | }, | ||||||
1031 | title => { | ||||||
1032 | keyword => 'title', | ||||||
1033 | label => 'Browser Title', | ||||||
1034 | descr => 'Browser title bar title for main_listing', | ||||||
1035 | type => 'text', | ||||||
1036 | multiple => 0, | ||||||
1037 | urgency => 3, | ||||||
1038 | sort_order => 70, | ||||||
1039 | applies_to => 'main listing and links', | ||||||
1040 | method_types => { | ||||||
1041 | main_listing => 1, | ||||||
1042 | base_links => 1, | ||||||
1043 | }, | ||||||
1044 | }, | ||||||
1045 | html_template => { | ||||||
1046 | keyword => 'html_template', | ||||||
1047 | label => 'Output Template', | ||||||
1048 | descr => 'Template to use for main_listing [defaults ' |
||||||
1049 | . 'to results.tt or main.tt]', | ||||||
1050 | type => 'text', | ||||||
1051 | multiple => 0, | ||||||
1052 | urgency => 0, | ||||||
1053 | sort_order => 80, | ||||||
1054 | applies_to => 'main listing and links', | ||||||
1055 | method_types => { | ||||||
1056 | main_listing => 1, | ||||||
1057 | base_links => 1, | ||||||
1058 | }, | ||||||
1059 | }, | ||||||
1060 | authed_methods => { | ||||||
1061 | keyword => 'authed_methods', | ||||||
1062 | label => 'Authed Methods', | ||||||
1063 | descr => 'Controller methods that require auth', | ||||||
1064 | type => 'pair', | ||||||
1065 | pair_labels => [ 'Method', 'Group' ], | ||||||
1066 | pair_required => 0, | ||||||
1067 | multiple => 1, | ||||||
1068 | urgency => 0, | ||||||
1069 | sort_order => 82, | ||||||
1070 | applies_to => 'hashref', | ||||||
1071 | method_types => { | ||||||
1072 | hashref => 1, | ||||||
1073 | }, | ||||||
1074 | }, | ||||||
1075 | permissions => { | ||||||
1076 | keyword => 'permissions', | ||||||
1077 | label => 'Permissions', | ||||||
1078 | descr => 'Set table permissions e.g. crudcr--cr--', | ||||||
1079 | type => 'pair', | ||||||
1080 | pair_labels => [ 'Bits', 'Group' ], | ||||||
1081 | pair_required => 0, | ||||||
1082 | multiple => 0, | ||||||
1083 | urgency => 0, | ||||||
1084 | sort_order => 84, | ||||||
1085 | applies_to => 'hashref', | ||||||
1086 | method_types => { | ||||||
1087 | hashref => 1, | ||||||
1088 | }, | ||||||
1089 | }, | ||||||
1090 | literal => { | ||||||
1091 | keyword => 'literal', | ||||||
1092 | label => 'Perl Hashref', | ||||||
1093 | descr => 'Supply a custom perl hashref', | ||||||
1094 | type => 'text', | ||||||
1095 | multiple => 1, | ||||||
1096 | urgency => 0, | ||||||
1097 | sort_order => 86, | ||||||
1098 | applies_to => 'hashref', | ||||||
1099 | method_types => { | ||||||
1100 | hashref => 1, | ||||||
1101 | }, | ||||||
1102 | }, | ||||||
1103 | all_fields_but => { | ||||||
1104 | keyword => 'all_fields_but', | ||||||
1105 | label => 'Exclued These Fields', | ||||||
1106 | descr => 'Fields to exclude from a form ' |
||||||
1107 | . '[either all_fields_but or fields is REQUIRED]', | ||||||
1108 | type => 'text', | ||||||
1109 | multiple => 1, | ||||||
1110 | urgency => 5, | ||||||
1111 | sort_order => 90, | ||||||
1112 | applies_to => 'form', | ||||||
1113 | method_types => { | ||||||
1114 | AutoCRUD_form => 1, | ||||||
1115 | CRUD_form => 1, | ||||||
1116 | }, | ||||||
1117 | }, | ||||||
1118 | fields => { | ||||||
1119 | keyword => 'fields', | ||||||
1120 | label => 'Include These Fields', | ||||||
1121 | descr => 'Fields to include on a form ' |
||||||
1122 | . '[either all_fields_but or fields is REQUIRED]', | ||||||
1123 | type => 'text', | ||||||
1124 | multiple => 1, | ||||||
1125 | urgency => 5, | ||||||
1126 | sort_order => 100, | ||||||
1127 | applies_to => 'form', | ||||||
1128 | method_types => { | ||||||
1129 | AutoCRUD_form => 1, | ||||||
1130 | CRUD_form => 1, | ||||||
1131 | }, | ||||||
1132 | }, | ||||||
1133 | extra_keys => { | ||||||
1134 | keyword => 'extra_keys', | ||||||
1135 | label => 'Keys for form hash', | ||||||
1136 | descr => 'Extra keys to put in the form method hash', | ||||||
1137 | type => 'pair', | ||||||
1138 | pair_labels => [ 'key', 'value' ], | ||||||
1139 | pair_required => 1, | ||||||
1140 | multiple => 1, | ||||||
1141 | urgency => 0, | ||||||
1142 | sort_order => 110, | ||||||
1143 | applies_to => 'form', | ||||||
1144 | method_types => { | ||||||
1145 | AutoCRUD_form => 1, | ||||||
1146 | CRUD_form => 1, | ||||||
1147 | }, | ||||||
1148 | }, | ||||||
1149 | form_name => { | ||||||
1150 | keyword => 'form_name', | ||||||
1151 | label => 'Form Name', | ||||||
1152 | descr => 'Form name [used with date selections]', | ||||||
1153 | type => 'text', | ||||||
1154 | multiple => 0, | ||||||
1155 | urgency => 0, | ||||||
1156 | sort_order => 120, | ||||||
1157 | applies_to => 'form', | ||||||
1158 | method_types => { | ||||||
1159 | AutoCRUD_form => 1, | ||||||
1160 | CRUD_form => 1, | ||||||
1161 | }, | ||||||
1162 | }, | ||||||
1163 | expects => { | ||||||
1164 | keyword => 'expects', | ||||||
1165 | label => 'Input Parameters', | ||||||
1166 | descr => 'Things your SOAP method receives', | ||||||
1167 | type => 'pair', | ||||||
1168 | pair_required => 0, | ||||||
1169 | pair_labels => [ 'Name', 'Type' ], | ||||||
1170 | multiple => 1, | ||||||
1171 | urgency => 10, | ||||||
1172 | sort_order => 130, | ||||||
1173 | applies_to => 'SOAP', | ||||||
1174 | method_types => { | ||||||
1175 | SOAP => 1, | ||||||
1176 | SOAPDoc => 1, | ||||||
1177 | }, | ||||||
1178 | }, | ||||||
1179 | returns => { | ||||||
1180 | keyword => 'returns', | ||||||
1181 | label => 'Output Parameters', | ||||||
1182 | descr => 'Things your SOAP method returns', | ||||||
1183 | type => 'pair', | ||||||
1184 | pair_required => 0, | ||||||
1185 | pair_labels => [ 'Name', 'Type' ], | ||||||
1186 | multiple => 1, | ||||||
1187 | urgency => 10, | ||||||
1188 | sort_order => 140, | ||||||
1189 | applies_to => 'SOAP', | ||||||
1190 | method_types => { | ||||||
1191 | SOAP => 1, | ||||||
1192 | SOAPDoc => 1, | ||||||
1193 | }, | ||||||
1194 | }, | ||||||
1195 | }, | ||||||
1196 | ); | ||||||
1197 | |||||||
1198 | sub get_docs_for { | ||||||
1199 | 24 | 24 | 1 | 39 | my $class = shift; | ||
1200 | 24 | 33 | my $type = shift; | ||||
1201 | 24 | 51 | my @keywords = @_; | ||||
1202 | |||||||
1203 | 24 | 212 | my @retvals = ( $type ); | ||||
1204 | |||||||
1205 | 24 | 534 | foreach my $keyword ( @keywords ) { | ||||
1206 | 101 | 248 | push @retvals, $doc_for{ $type }{ $keyword }; | ||||
1207 | } | ||||||
1208 | |||||||
1209 | 24 | 166 | return @retvals; | ||||
1210 | } | ||||||
1211 | |||||||
1212 | sub get_full_doc_hash { | ||||||
1213 | 0 | 0 | 1 | return \%doc_for; | |||
1214 | } | ||||||
1215 | |||||||
1216 | 1; | ||||||
1217 | |||||||
1218 | =head1 NAME | ||||||
1219 | |||||||
1220 | Bigtop::Keywords - A central place to describe all bigtop keywords | ||||||
1221 | |||||||
1222 | =head1 SYNOPSIS | ||||||
1223 | |||||||
1224 | In your backend or backend type module: | ||||||
1225 | |||||||
1226 | use Bigtop::Keywords; | ||||||
1227 | # There is no need to use Bigtop::Parser since it uses you. | ||||||
1228 | |||||||
1229 | BEGIN { | ||||||
1230 | Bigtop::Parser->add_valid_keywords( | ||||||
1231 | Bigtop::Keywords->get_docs_for( | ||||||
1232 | $keyword_level, | ||||||
1233 | qw( your keywords here ) | ||||||
1234 | ) | ||||||
1235 | ); | ||||||
1236 | } | ||||||
1237 | |||||||
1238 | Note that this must be done in a BEGIN block. | ||||||
1239 | |||||||
1240 | Or, if you are writing a documenation tool: | ||||||
1241 | |||||||
1242 | my $keyword_for = Bigtop::Keywords->get_full_doc_hash(); | ||||||
1243 | |||||||
1244 | =head1 DESCRIPTION | ||||||
1245 | |||||||
1246 | Since many backends need to use the same keywords, it eventually dawned | ||||||
1247 | on me that a central place to describe would be a good thing. This is | ||||||
1248 | that place. By keeping all the keyword definitions here, all backends | ||||||
1249 | can share them. This became especially helpful with the birth of tentmaker. | ||||||
1250 | It wants to consistently tell users about the keywords. | ||||||
1251 | |||||||
1252 | If you write or modify a backend and need new keywords in the process, | ||||||
1253 | define them here and send in a patch. This will avoid name collisions | ||||||
1254 | and keep the tentmaker functioning. Read on for how to define the keywords. | ||||||
1255 | |||||||
1256 | =head1 DEFINING KEYWORDS | ||||||
1257 | |||||||
1258 | To define a new keyword, first decide at what level it will be used. | ||||||
1259 | That is, does it apply inside controller blocks, table blocks, or somewhere | ||||||
1260 | else. See L |
||||||
1261 | |||||||
1262 | Once you know where your keyword should be legal, find its level among | ||||||
1263 | the top level keys in the C<%docs_for> in this file. Inside the hash for | ||||||
1264 | your level add a new hash keyed by your keyword name (pick the name | ||||||
1265 | carefully, changing them after release is painful). The value for your | ||||||
1266 | new hash key is itself a hash. Here are the legal keys for the hash (all | ||||||
1267 | keys are optional unless marked required): | ||||||
1268 | |||||||
1269 | =over 4 | ||||||
1270 | |||||||
1271 | =item keyword | ||||||
1272 | |||||||
1273 | Required and must be the same as the key for the hash. The official name | ||||||
1274 | of the keyword. The user must type this to use the keyword (or get a tool | ||||||
1275 | to do it for her). | ||||||
1276 | |||||||
1277 | =item label | ||||||
1278 | |||||||
1279 | Required for tentmaker. The name tentmaker shows its users for this keyword. | ||||||
1280 | Traditionally, this is just the keyword beautified so the label for | ||||||
1281 | keyword 'contact_us' is 'Contact Us'. | ||||||
1282 | |||||||
1283 | =item descr | ||||||
1284 | |||||||
1285 | tentmaker shows this next to the input box for the keyword. Feel free | ||||||
1286 | to use a bit of html in the value for descr. For instance, when providing | ||||||
1287 | examples, surround them with pre tags. | ||||||
1288 | |||||||
1289 | =item sort_order | ||||||
1290 | |||||||
1291 | tentmaker uses this to order the statements within their category. A | ||||||
1292 | simple numeric sort is done on these values. | ||||||
1293 | |||||||
1294 | =item multiple | ||||||
1295 | |||||||
1296 | Indicates that the keyword can accept a list of values (or pairs of them | ||||||
1297 | if its type is pair). This only applies to types text, pair, and select. | ||||||
1298 | The others ignore it. See below for information about types. | ||||||
1299 | |||||||
1300 | =item repeatable | ||||||
1301 | |||||||
1302 | Indicates that the statement can be repeated. Currently only data | ||||||
1303 | statements may be repeated to any useful effect. To contrast, multiple | ||||||
1304 | means that the single statement can take many values in a comma separated | ||||||
1305 | list, while repeatable means that the keyword itself may be used many | ||||||
1306 | times each timw with one or more values. Again, only data statements | ||||||
1307 | are repeatble. | ||||||
1308 | |||||||
1309 | =item pair_labels | ||||||
1310 | |||||||
1311 | You probably want to use this key if your keyword's type is pair. | ||||||
1312 | A two element array reference with the labels to display over the two | ||||||
1313 | input columns of keywords whose type is pair. Example: | ||||||
1314 | |||||||
1315 | pair_labels => [ 'Name', 'Email Address' ], | ||||||
1316 | |||||||
1317 | =item pair_required | ||||||
1318 | |||||||
1319 | Required for keywords of type pair. | ||||||
1320 | |||||||
1321 | Use this key for all pair keywords. Make it true if a pair is always | ||||||
1322 | required for the keyword and false if items may have only the first half | ||||||
1323 | of a pair (like author pairs where the name is in the hash key position | ||||||
1324 | and the optional email address is in the value position). | ||||||
1325 | |||||||
1326 | Look for keywords of type pair for examples. | ||||||
1327 | |||||||
1328 | =item options | ||||||
1329 | |||||||
1330 | An array reference of hashes describing the options for the keyword. Use | ||||||
1331 | this only for keywords of type select. Example: | ||||||
1332 | |||||||
1333 | options => [ | ||||||
1334 | { label => 'User Sees This', value => 'internal_value' }, | ||||||
1335 | { label => 'Hourly', value => '24' }, | ||||||
1336 | ], | ||||||
1337 | |||||||
1338 | If you don't want a default, you should include a hash like this: | ||||||
1339 | |||||||
1340 | { label => '-- Choose One --', value => 'undefined' }, | ||||||
1341 | |||||||
1342 | The value 'undefined' is special to JavaScript. So, tentmaker will unset | ||||||
1343 | the value if you the user selects '-- Choose One --'. | ||||||
1344 | |||||||
1345 | =item quick_label | ||||||
1346 | |||||||
1347 | Only applies to field keywords. Indicates that this keyword should appear | ||||||
1348 | in the Field Quick Edit box in tentmaker. Fields appear there in | ||||||
1349 | the same order they appear in the full edit expanding box. That order | ||||||
1350 | is controlled by the sort_order (see below). | ||||||
1351 | |||||||
1352 | Quick editing does not allow pairs or multiples. You can set a quick_label | ||||||
1353 | for a multiple entry keyword, but the quick edit will only update the first | ||||||
1354 | one. If the user changes the one in the quick edit, only that one will be | ||||||
1355 | preserved. Pairs will not work in the quick edit box. | ||||||
1356 | |||||||
1357 | =item refresh | ||||||
1358 | |||||||
1359 | Unused and ignored. | ||||||
1360 | |||||||
1361 | This used to indicate that a field keyword update should trigger a full | ||||||
1362 | page refresh. There is now javascript support to update the DOM no | ||||||
1363 | matter what happens and it should stay that way. Temptation to set | ||||||
1364 | this flag indicates a lack of javascript courage. | ||||||
1365 | |||||||
1366 | =item urgency | ||||||
1367 | |||||||
1368 | Indicates how useful the keyword is. Most have urgency 0, they show | ||||||
1369 | up white on the screen. tentmaker currently understands these urgency values: | ||||||
1370 | |||||||
1371 | value screen color implied meaning | ||||||
1372 | ----------------------------------------------------------------- | ||||||
1373 | 10 red required by someone | ||||||
1374 | 5 yellow this or a related keyword is likely required | ||||||
1375 | 3 green many people use this regularly | ||||||
1376 | 1 blue-green many people use this at least occasionally | ||||||
1377 | 0 white less frequently used | ||||||
1378 | |||||||
1379 | Note that only values from the above list are understood by tentmaker. | ||||||
1380 | If you use other values, they will be treated as zero. | ||||||
1381 | |||||||
1382 | =item method_types | ||||||
1383 | |||||||
1384 | This tells tentmaker which method types understand a keyword. It is | ||||||
1385 | a hash. They key are individual method types. The values are 1. | ||||||
1386 | There is one special key 'all'. If it has a true value, then the keyword | ||||||
1387 | is available to all methods regardless of type. | ||||||
1388 | |||||||
1389 | =item field_type | ||||||
1390 | |||||||
1391 | Not yet used. Meant to tell tentmaker that a field keyword only applies | ||||||
1392 | to a certain html_form_type. | ||||||
1393 | |||||||
1394 | =item type | ||||||
1395 | |||||||
1396 | Essentially the tentmaker html form element for the keyword. | ||||||
1397 | Note that literal keywords do not need to set this key (and if they do, | ||||||
1398 | it will be ignored). They always get a textarea for their input. | ||||||
1399 | For other keyword levels choose from these input types (in order by | ||||||
1400 | utility): | ||||||
1401 | |||||||
1402 | =over 4 | ||||||
1403 | |||||||
1404 | =item text | ||||||
1405 | |||||||
1406 | This is the most common type. | ||||||
1407 | It tells tentmaker to use a text input box for the keyword. | ||||||
1408 | |||||||
1409 | =item boolean | ||||||
1410 | |||||||
1411 | Indicates that the value is either 1 or 0 and tells tentmaker to use | ||||||
1412 | a checkbox for the keyword. | ||||||
1413 | |||||||
1414 | =item pair | ||||||
1415 | |||||||
1416 | Indicates that the keyword admits either single values or pairs. | ||||||
1417 | A pair is two things separated by =>, like | ||||||
1418 | |||||||
1419 | name => `email@example.com` | ||||||
1420 | |||||||
1421 | You want to use the pair_labels and pair_required keys if you use this | ||||||
1422 | type, trust me. | ||||||
1423 | |||||||
1424 | =item textarea | ||||||
1425 | |||||||
1426 | Indicates that typical values for this keyword are large text blocks, | ||||||
1427 | so tentmaker should use a textarea for their input. | ||||||
1428 | |||||||
1429 | =item select | ||||||
1430 | |||||||
1431 | Indicates that only certain values are legal so tentmaker users should | ||||||
1432 | pick them from a list. You must use the options key with this type. | ||||||
1433 | You might also want to use the multiple key. | ||||||
1434 | |||||||
1435 | =item deprecated | ||||||
1436 | |||||||
1437 | Tells tentmaker not to show this keyword, which is usually an archaic | ||||||
1438 | spelling for a keyword. | ||||||
1439 | |||||||
1440 | =back | ||||||
1441 | |||||||
1442 | =back | ||||||
1443 | |||||||
1444 | =head2 KEYWORD LEVELS | ||||||
1445 | |||||||
1446 | There are several levels in the parse tree where keywords may appear. | ||||||
1447 | These are the levels: | ||||||
1448 | |||||||
1449 | =over 4 | ||||||
1450 | |||||||
1451 | =item config | ||||||
1452 | |||||||
1453 | Keywords in the bigtop level config block (where the backends are defined). | ||||||
1454 | |||||||
1455 | =item app | ||||||
1456 | |||||||
1457 | Keywords at the top level of the bigtop app block. | ||||||
1458 | |||||||
1459 | =item app_literal | ||||||
1460 | |||||||
1461 | The legal names of literal statements at the bigtop app block level. | ||||||
1462 | |||||||
1463 | =item table | ||||||
1464 | |||||||
1465 | Keywords at the top level of table blocks. | ||||||
1466 | |||||||
1467 | =item field | ||||||
1468 | |||||||
1469 | Keywords in field blocks (inside table blocks). | ||||||
1470 | |||||||
1471 | =item controller | ||||||
1472 | |||||||
1473 | Keywords at the top level of controller blocks. | ||||||
1474 | |||||||
1475 | =item controller_literal | ||||||
1476 | |||||||
1477 | The legal names of literal statements at the controller block level. | ||||||
1478 | |||||||
1479 | =item method | ||||||
1480 | |||||||
1481 | Keywords in method blocks (inside controller blocks). | ||||||
1482 | |||||||
1483 | =back | ||||||
1484 | |||||||
1485 | There are no other valid keyword locations in the current grammar. Adding | ||||||
1486 | new levels will require substantial change to the grammar, the parser, | ||||||
1487 | and all the backends. Thus, such changes are extremely unlikely (though | ||||||
1488 | some are in the back of my mind). | ||||||
1489 | |||||||
1490 | =head1 METHODS | ||||||
1491 | |||||||
1492 | There is only one method defined in this module. Use it as shown in | ||||||
1493 | the SYNOPSIS above. | ||||||
1494 | |||||||
1495 | =over 4 | ||||||
1496 | |||||||
1497 | =item get_docs_for | ||||||
1498 | |||||||
1499 | Parameters: | ||||||
1500 | |||||||
1501 | keyword_level | ||||||
1502 | list of keywords | ||||||
1503 | |||||||
1504 | Returns: | ||||||
1505 | |||||||
1506 | an array whose first element is the keyword_level and whose remaining | ||||||
1507 | elements are keyword hashes. | ||||||
1508 | This return is designed for direct passing to the add_valid_keywords | ||||||
1509 | method of Bigtop::Parser | ||||||
1510 | |||||||
1511 | =item get_full_doc_hash | ||||||
1512 | |||||||
1513 | Parameters: none | ||||||
1514 | |||||||
1515 | Returns: the entire internal hash representation of all the keywords. | ||||||
1516 | This is useful for automated tools, like C |
||||||
1517 | the vim syntax file. | ||||||
1518 | |||||||
1519 | =back | ||||||
1520 | |||||||
1521 | =head1 AUTHOR | ||||||
1522 | |||||||
1523 | Phil Crow E |
||||||
1524 | |||||||
1525 | =head1 COPYRIGHT and LICENSE | ||||||
1526 | |||||||
1527 | Copyright (C) 2006-7 by Phil Crow | ||||||
1528 | |||||||
1529 | This library is free software; you can redistribute it and/or modify | ||||||
1530 | it under the same terms as Perl itself, either Perl version 5.8.6 or, | ||||||
1531 | at your option, any later version of Perl 5 you may have available. | ||||||
1532 | |||||||
1533 | =cut | ||||||
1534 |