File Coverage

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             ' block and in the CGI scripts',
159             sort_order => 30,
160             },
161             PerlBlock => {
162             keyword => 'PerlBlock',
163             label => 'Epilogue',
164             descr => 'in the httpd.conf block (in order
' .
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 for a list of all the choices.
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 that builds
1517             the vim syntax file.
1518              
1519             =back
1520              
1521             =head1 AUTHOR
1522              
1523             Phil Crow Ecrow.phil@gmail.comE
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