/[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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 722 by dpavlin, Thu Dec 4 22:37:26 2008 UTC revision 1035 by dpavlin, Sun Feb 8 12:23:01 2009 UTC
# Line 2  Line 2 
2    
3  This page describes how to use and develop with L<Frey>  This page describes how to use and develop with L<Frey>
4    
5    =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<DBIx::Class> to introspect existing
35    database and implement user interface for it.
36    
37    Steps to create classes for your existing L<Reblog> database:
38    
39     ./bin/dbic-generate-schema.pl 'DBI:mysql:database=reblog;host=127.0.0.1;port=13306' Reblog
40    
41    Open L<Frey::DBIC::Browser/as_sponge> and verify that your generated schema works
42    
43    
44    =head1 User parts
45    
46    =head2 Pipes
47    
48    See L<Frey::Pipe> for now.
49    
50  =head1 Designing user interaction flows  =head1 Designing user interaction flows
51    
52  Frey is all about creating Moose classes as your interaction with pages.  Frey is all about creating Moose classes as your interaction with pages.
53  Each page is instance of class with some parametars received with post or  Each page is instance of class with some parameters received with post or
54  get request.  get request.
55    
56  If you want to access those parameters in your object, you have to define  If you want to access those parameters in your object, you have to define
# Line 13  attributes for it using L<Moose/has> Line 58  attributes for it using L<Moose/has>
58    
59  You can also generate result in three different forms:  You can also generate result in three different forms:
60    
61    
62  =over 20  =over 20
63    
64  =item as_markup  =item as_markup
# Line 31  Any perl hash structure Line 77  Any perl hash structure
77    
78  =back  =back
79    
80    
81    =head2 No html templates
82    
83  Frey doesn't have html templates. Since your methods are part of REST URIs,  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  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  web page. L<Frey::Web> provides role which has a bunch of helpful things
# Line 41  to you, it the right track. Line 90  to you, it the right track.
90    
91  You don't even have to create initial entry form as L<Frey::Run>,  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>  which will start your L<Moose> classes, will call L<Frey::Action>
93  for help and generate initial form for you.  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    
97  Creating files is mess, so L<Frey::ClassCreator/create_class_source> will  =head2 Easy skeletons
98    
99    Creating files is mess, so L<Frey::Class::Create/create_class_source> will
100  create class and test skeleton for you.  create class and test skeleton for you.
101    
102  If I did it right, it should read similar to human language, like SmallTalk.  If I did it right, it should read similar to human language, like Smalltalk.
103    
104    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  To make things simple, there are few convertions (with nod to Ruby on Rails)  To make things simple, there are few conventions (with nod to Ruby on Rails)
109  which will help you get started:  which will help you get started:
110    
 =head2 default parametars  
111    
112  =head2 html markup  =head2 HTML markup convetion
113    
114  HTML markup should be enclosed in C< qq| > and C< | > quotes. There is also  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  funny but very readable convention of multi line html when you have to
116  intermix confitions:  intermix conditions:
117    
118    my $html    my $html
119      = qq|<h1>First</h1>|      = qq|<h1>First</h1>|
# Line 76  write just Line 132  write just
132    
133  which is valid perl syntax but doesn't work as expected.  which is valid perl syntax but doesn't work as expected.
134    
135  =head2 examples  
136    =head2 Smalltalk like refactoring
137    
138    Frey is heavily influenced by Smalltalk, up to the point of syntax. Coding
139    Frey code should be like playing with L<Frey>. And you might end up with
140    result which might surprise you.
141    
142    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    
145    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    
150    =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    
158    =head1 Examples
159    
160  To help you get started, here are few implemented flows in Frey:  To help you get started, here are few implemented flows in Frey:
161    
# Line 96  Display a huge amount of icons with sing Line 175  Display a huge amount of icons with sing
175    
176  =back  =back
177    
178    
179  =head1 Command-line integration  =head1 Command-line integration
180    
181  One of key points is that L<Frey> runs under your user. This means it has  One of key points is that L<Frey> runs under your user. This means it has
182  access to your termnial, and ssh keys, so beware!  access to your terminal, and ssh keys, so beware!
183    
184  =head1 Install  =head1 Install
185    
# Line 136  Used for switching focus between browser Line 216  Used for switching focus between browser
216    
217  =head2 bin/dev.sh  =head2 bin/dev.sh
218    
219  Recommeded way to start development L<Frey> server since it will restart it  Recommended way to start development L<Frey> server since it will restart it
220  automatically and kill running instance if existing.  automatically and kill running instance if existing.
221    
222  =head2 bin/check-syntax.sh  =head2 bin/check-syntax.sh
# Line 145  Check syntax of modified files. Line 225  Check syntax of modified files.
225    
226  =head2 bin/grep-iselect.sh  =head2 bin/grep-iselect.sh
227    
228  Helper using C<iselect> to quickly grep, select result and jump to C<vim>  Helper using C<iselect> to quickly grep, select result and jump to C<vim>.
229    
230    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  =head2 bin/log.sh  =head2 bin/log.sh
236    
# Line 159  used in Frey and rest is kind of TODO li Line 244  used in Frey and rest is kind of TODO li
244  =head2 bin/clean-var.sh  =head2 bin/clean-var.sh
245    
246  Cleanup C<var/> directory which gets a lot of dumps. Most of useful data  Cleanup C<var/> directory which gets a lot of dumps. Most of useful data
247  is held forever because I belive that trends are most interesting way to  is held forever because I believe that trends are most interesting way to
248  look at data.  look at data.
249    
250  =cut  =cut

Legend:
Removed from v.722  
changed lines
  Added in v.1035

  ViewVC Help
Powered by ViewVC 1.1.26