/[Frey]/trunk/lib/Frey/Manual.pod
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Frey/Manual.pod

Parent Directory Parent Directory | Revision Log Revision Log


Revision 941 - (hide annotations)
Tue Jan 6 13:20:39 2009 UTC (15 years, 4 months ago) by dpavlin
File size: 6466 byte(s)
tweaks
1 dpavlin 693 =head1 Frey Manual
2    
3     This page describes how to use and develop with L<Frey>
4    
5 dpavlin 801 =head1 Developer parts
6    
7     =head2 Moose classes
8    
9     All Moose classes have simple introspection API which use
10     L<Frey::Introspect> to show class and it's pod (using L<Frey::Pod>).
11    
12     Example of valid REST URL is
13    
14     http://localhost:16001/Frey
15    
16     which will show L<Frey> class introspection.
17    
18     You can also add method invocation and optional parameters to C<new>
19     constructor like this:
20    
21     http://localhost:16001/Frey::Pod/as_markup?class=Frey
22    
23     this is same using L<Frey::Pod> from perl as
24    
25     Frey::Pod->new( class => 'Frey' )->as_markup;
26    
27     Forms to enter required parameters will be generated automatically,
28     allowing you to explore your data while you are making interface for it.
29    
30     =head2 Database
31    
32     FIXME broken if not noted in C<TODO>
33    
34     For database objects we support L<Fey> and when your objects are created
35     C<< with 'Frey::Collection' >> they will have basic CRUD functionality
36     implemented by L<Frey::ObjectBrowser>.
37    
38     =head1 User parts
39    
40     =head2 Pipes
41    
42     See L<Frey::Pipe> for now.
43    
44 dpavlin 722 =head1 Designing user interaction flows
45    
46     Frey is all about creating Moose classes as your interaction with pages.
47 dpavlin 801 Each page is instance of class with some parameters received with post or
48 dpavlin 722 get request.
49    
50     If you want to access those parameters in your object, you have to define
51     attributes for it using L<Moose/has>
52    
53     You can also generate result in three different forms:
54    
55 dpavlin 729
56 dpavlin 722 =over 20
57    
58     =item as_markup
59    
60     HTML content
61    
62     =item as_sponge
63    
64     Tabular output
65    
66     FIXME link to description
67    
68     =item as_data
69    
70     Any perl hash structure
71    
72     =back
73    
74 dpavlin 729
75     =head2 No html templates
76    
77 dpavlin 722 Frey doesn't have html templates. Since your methods are part of REST URIs,
78     it doesn't make sense to separate html from object itself, which represent
79     web page. L<Frey::Web> provides role which has a bunch of helpful things
80     when creating html.
81    
82     Basically, if html you are generating in readable code semantically correct
83     to you, it the right track.
84    
85     You don't even have to create initial entry form as L<Frey::Run>,
86     which will start your L<Moose> classes, will call L<Frey::Action>
87 dpavlin 941 for help and generate initial form for you. If this magic is wrong,
88     just define C<< sub render_pipe { 'radio' } >> to force rending of
89     C<pipe> attribute as radio buttons.
90 dpavlin 722
91 dpavlin 941 =head2 Easy skeletons
92    
93 dpavlin 778 Creating files is mess, so L<Frey::Class::Create/create_class_source> will
94 dpavlin 722 create class and test skeleton for you.
95    
96 dpavlin 801 If I did it right, it should read similar to human language, like Smalltalk.
97 dpavlin 722
98 dpavlin 941 L<Frey> is careful to provide enough magic to build skeletons just of files
99     which contain some specific logic to your aplication, so it's not massive code
100     generation as in Java...
101    
102 dpavlin 801 To make things simple, there are few conventions (with nod to Ruby on Rails)
103 dpavlin 722 which will help you get started:
104    
105 dpavlin 729
106 dpavlin 941 =head2 HTML markup convetion
107 dpavlin 722
108     HTML markup should be enclosed in C< qq| > and C< | > quotes. There is also
109     funny but very readable convention of multi line html when you have to
110 dpavlin 801 intermix conditions:
111 dpavlin 722
112     my $html
113     = qq|<h1>First</h1>|
114     . ( $is_second ? qq|<h2>Second</h2>| : '' )
115     . qq|<h3>Third</h3>|
116     ;
117    
118     This will be checked and reported at some point. Ideally, I would like to
119     write just
120    
121     my $html
122     = qq|<h1>First</h1>|
123     . $is_second ? qq|<h2>Second</h2>| : ''
124     . qq|<h3>Third</h3>|
125     ;
126    
127     which is valid perl syntax but doesn't work as expected.
128    
129 dpavlin 729
130 dpavlin 801 =head2 Smalltalk like refactoring
131 dpavlin 729
132 dpavlin 801 Frey is heavily influenced by Smalltalk, up to the point of syntax. Coding
133 dpavlin 729 Frey code should be like playing with L<Frey>. And you might end up with
134     result which might surprise you.
135    
136 dpavlin 801 Refactoring tools are not new in perl. We have L<PPI>, L<App::Ack> and C<vim>
137     so what more do we want?
138 dpavlin 729
139 dpavlin 801 If you look closely into Smalltalk development work-flow, you really need
140     ability to rename class or method without any additional effort. For that,
141     we use L<Frey::Class::Refactor> which allows code modifications at source
142     level with just few clicks.
143 dpavlin 729
144 dpavlin 801 =head2 Default values
145    
146     When L<Frey::Run> tries to create instance of class (usually because of web
147     request) it tried to read default values from C<yaml> files in C<etc/> and
148     if it doesn't find all of required values it will invoke L<Frey::Action> to
149     create end-user html form with missing fields.
150    
151 dpavlin 722
152 dpavlin 941 =head1 Examples
153    
154 dpavlin 722 To help you get started, here are few implemented flows in Frey:
155    
156     =over 20
157    
158     =item L<Frey::Shell::Grep>
159    
160     Simple interaction with C<grep>
161    
162     =item L<Frey::SVK>
163    
164     Gather data, display selection form with checkboxes
165    
166     =item L<Frey::IconBrowser>
167    
168     Display a huge amount of icons with single HTTP request
169    
170     =back
171    
172 dpavlin 729
173 dpavlin 701 =head1 Command-line integration
174    
175     One of key points is that L<Frey> runs under your user. This means it has
176 dpavlin 801 access to your terminal, and ssh keys, so beware!
177 dpavlin 701
178 dpavlin 693 =head1 Install
179    
180 dpavlin 701 =head2 Firefox
181    
182 dpavlin 693 Frey is designed to provide close integration between your day-to-day data
183     mungling work in console and Firefox.
184    
185     You might want to open separate Firefox and terminal for Frey sessions.
186    
187     It's also useful to have Firebug extension installed in Firefox to provide
188     quick introspection on html, network traffic and request parameters.
189    
190 dpavlin 701 If nothing else, L<Frey::Bookmarklet> provides Firebug lite bookmarklet.
191 dpavlin 693
192 dpavlin 701 It's all Text! Firefox extension at
193     L<https://addons.mozilla.org/en-US/firefox/addon/4125> provides integration
194     between form textarea and your editor, so it's also handy.
195 dpavlin 693
196     =head2 vim
197    
198     Content on page will be linked to vim using L<Frey::Web/html_links>
199    
200     You might want to install vim plugin C<prel_synwrite.vim> from
201     L<http://www.vim.org/scripts/script.php?script_id=896>
202     to check syntax on every C<:Write>
203    
204    
205     =head2 xdotool
206    
207     Used for switching focus between browser and terminal
208    
209     =head1 Command-line helpers
210    
211 dpavlin 701 =head2 bin/dev.sh
212    
213 dpavlin 801 Recommended way to start development L<Frey> server since it will restart it
214 dpavlin 701 automatically and kill running instance if existing.
215    
216 dpavlin 693 =head2 bin/check-syntax.sh
217    
218     Check syntax of modified files.
219    
220 dpavlin 701 =head2 bin/grep-iselect.sh
221    
222 dpavlin 937 Helper using C<iselect> to quickly grep, select result and jump to C<vim>.
223 dpavlin 701
224 dpavlin 937 You can also pass grep params for context etc, like this:
225    
226     ./bin/grep-iselect.sh something -C 3
227     ./bin/grep-iselect.sh something -A 10 -B 3
228    
229 dpavlin 704 =head2 bin/log.sh
230    
231     Open last 3 logs in vim
232    
233 dpavlin 701 =head2 bin/checkout-js.sh
234    
235     Checkout bunch of JavaScript code from all over the net, some of which is
236     used in Frey and rest is kind of TODO list...
237    
238     =head2 bin/clean-var.sh
239    
240     Cleanup C<var/> directory which gets a lot of dumps. Most of useful data
241 dpavlin 801 is held forever because I believe that trends are most interesting way to
242 dpavlin 701 look at data.
243    
244 dpavlin 693 =cut

  ViewVC Help
Powered by ViewVC 1.1.26