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

  ViewVC Help
Powered by ViewVC 1.1.26