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 |
|
=over 5 |
38 |
|
|
39 |
|
Steps to create classes for your existing L<Reblog> database: |
40 |
|
|
41 |
|
=item 1 |
42 |
|
|
43 |
|
|
44 |
|
|
45 |
|
=back |
46 |
|
|
47 |
|
=head1 User parts |
48 |
|
|
49 |
|
=head2 Pipes |
50 |
|
|
51 |
|
See L<Frey::Pipe> for now. |
52 |
|
|
53 |
=head1 Designing user interaction flows |
=head1 Designing user interaction flows |
54 |
|
|
55 |
Frey is all about creating Moose classes as your interaction with pages. |
Frey is all about creating Moose classes as your interaction with pages. |
56 |
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 |
57 |
get request. |
get request. |
58 |
|
|
59 |
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 |
93 |
|
|
94 |
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>, |
95 |
which will start your L<Moose> classes, will call L<Frey::Action> |
which will start your L<Moose> classes, will call L<Frey::Action> |
96 |
for help and generate initial form for you. |
for help and generate initial form for you. If this magic is wrong, |
97 |
|
just define C<< sub render_pipe { 'radio' } >> to force rending of |
98 |
Creating files is mess, so L<Frey::ClassCreator/create_class_source> will |
C<pipe> attribute as radio buttons. |
|
create class and test skeleton for you. |
|
99 |
|
|
100 |
If I did it right, it should read similar to human language, like SmallTalk. |
=head2 Easy skeletons |
101 |
|
|
102 |
To make things simple, there are few convertions (with nod to Ruby on Rails) |
Creating files is mess, so L<Frey::Class::Create/create_class_source> will |
103 |
which will help you get started: |
create class and test skeleton for you. |
104 |
|
|
105 |
|
If I did it right, it should read similar to human language, like Smalltalk. |
106 |
|
|
107 |
=head2 default parametars |
L<Frey> is careful to provide enough magic to build skeletons just of files |
108 |
|
which contain some specific logic to your aplication, so it's not massive code |
109 |
|
generation as in Java... |
110 |
|
|
111 |
Default values for |
To make things simple, there are few conventions (with nod to Ruby on Rails) |
112 |
|
which will help you get started: |
113 |
|
|
114 |
|
|
115 |
=head2 html markup |
=head2 HTML markup convetion |
116 |
|
|
117 |
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 |
118 |
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 |
119 |
intermix confitions: |
intermix conditions: |
120 |
|
|
121 |
my $html |
my $html |
122 |
= qq|<h1>First</h1>| |
= qq|<h1>First</h1>| |
136 |
which is valid perl syntax but doesn't work as expected. |
which is valid perl syntax but doesn't work as expected. |
137 |
|
|
138 |
|
|
139 |
=head2 SmallTalk like refactoring |
=head2 Smalltalk like refactoring |
140 |
|
|
141 |
Frey is heavily influcenced by SmallTalks, up to the point of syntax. Coding |
Frey is heavily influenced by Smalltalk, up to the point of syntax. Coding |
142 |
Frey code should be like playing with L<Frey>. And you might end up with |
Frey code should be like playing with L<Frey>. And you might end up with |
143 |
result which might surprise you. |
result which might surprise you. |
144 |
|
|
145 |
Refactoring tools are not new in perl. However, |
Refactoring tools are not new in perl. We have L<PPI>, L<App::Ack> and C<vim> |
146 |
|
so what more do we want? |
147 |
|
|
148 |
|
If you look closely into Smalltalk development work-flow, you really need |
149 |
|
ability to rename class or method without any additional effort. For that, |
150 |
|
we use L<Frey::Class::Refactor> which allows code modifications at source |
151 |
|
level with just few clicks. |
152 |
|
|
153 |
|
=head2 Default values |
154 |
|
|
155 |
=head2 examples |
When L<Frey::Run> tries to create instance of class (usually because of web |
156 |
|
request) it tried to read default values from C<yaml> files in C<etc/> and |
157 |
|
if it doesn't find all of required values it will invoke L<Frey::Action> to |
158 |
|
create end-user html form with missing fields. |
159 |
|
|
160 |
|
|
161 |
|
=head1 Examples |
162 |
|
|
163 |
To help you get started, here are few implemented flows in Frey: |
To help you get started, here are few implemented flows in Frey: |
164 |
|
|
182 |
=head1 Command-line integration |
=head1 Command-line integration |
183 |
|
|
184 |
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 |
185 |
access to your termnial, and ssh keys, so beware! |
access to your terminal, and ssh keys, so beware! |
186 |
|
|
187 |
=head1 Install |
=head1 Install |
188 |
|
|
219 |
|
|
220 |
=head2 bin/dev.sh |
=head2 bin/dev.sh |
221 |
|
|
222 |
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 |
223 |
automatically and kill running instance if existing. |
automatically and kill running instance if existing. |
224 |
|
|
225 |
=head2 bin/check-syntax.sh |
=head2 bin/check-syntax.sh |
228 |
|
|
229 |
=head2 bin/grep-iselect.sh |
=head2 bin/grep-iselect.sh |
230 |
|
|
231 |
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>. |
232 |
|
|
233 |
|
You can also pass grep params for context etc, like this: |
234 |
|
|
235 |
|
./bin/grep-iselect.sh something -C 3 |
236 |
|
./bin/grep-iselect.sh something -A 10 -B 3 |
237 |
|
|
238 |
=head2 bin/log.sh |
=head2 bin/log.sh |
239 |
|
|
247 |
=head2 bin/clean-var.sh |
=head2 bin/clean-var.sh |
248 |
|
|
249 |
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 |
250 |
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 |
251 |
look at data. |
look at data. |
252 |
|
|
253 |
=cut |
=cut |