Re: [Catalyst] Best practices: XML output from static XML

2010-03-07 Thread Bill Moseley
On Sat, Mar 6, 2010 at 2:33 PM, J. Shirley jshir...@gmail.com wrote:

This is where I actually really love ::REST.  If you make a JSON call,
 then whatever is in the stash key that ::REST is returned to the
 client (via -status_ok) -- but if you combine this with chained and
 setup other data in the stash, the TT view can access all of that.


That sounds good.  So, what does that exactly look like?  Can you help with
a few examples?

These are the goals:

   - Don't repeat action code.  i.e. don't have separate actions for REST
   and web requests for the same resource.
   - Same URLs for the same data (e.g. /blog/recent_posts) for both the REST
   actions and when rendering with TT.
   - Separate out View from Controller.  i.e. don't have actions build data
   structures that won't be used in the response.
   - Web browser requests differ from REST requests, so may need to map the
   request into a common format before running the action.
   - Clean and tidy controllers ;)

Here's two very simple actions.  The first is in a REST app that needs to
add a TT view.  The second is an existing web (browser) action that need to
extend to accept JSON input and generate JSON output (i.e. convert to using
::REST).


First, here's a pseudo REST action for recent blog posts.  How would you
modify or extend so it works with a TT view?

Assume that the TT view needs more data from the posts (i.e. include \...@posts
in the stash), and always returns a 200 since the page will always have
content.  Also, the TT view has no need for the entity structure created
in this existing action:

sub recent_posts : Local ActionClass( 'REST' ) {}

sub recent_posts_GET {
my ( $self, $c ) = @_;

my @posts = map {
{
id  = $_-id,
body= $_-description,
created = $_-created_time-iso8601_with_zone,
}
} $c-model( 'Blog::Post' )-recent;

return @posts
? $self-status_ok( $c, entity = { posts = \...@posts } )
: $self-status_no_content( $c ) unless @posts;

}


Or going the other direction, here's an existing action used by web browsers
to view a blog, create a blog, or update an existing one.

A web form POSTs to /blog to create and POSTs to /blog/1234 to update.
 The request parameters are validated and used to update/create the blog.
The action builds a $form object that used for this purpose and is used by
TT to render the form.

Note that a GET to this action works, too.  It simply returns a form object
in the stash which TT can use to display the post (or can get at the blog
object
directly with $form-object).  But, would be better to chain from an action
with Args(1).


sub blog : Path {
my ( $self, $c, $id ) = @_;

# is user authorized for this method?
return $c-res-status( 403 )
unless $self-authorize( $c ):

# build form object and place in stash;
my $form = Form::Blog-new(
$id,  # will be undefined for CREATE
$c-req-parameters,
);
$c-stash-{form} = $form;


# GET requires an id to a valid blog
return $c-status( 404 )
   if $c-req-method eq 'GET'  !$form-object;


# was form POSTed?
return unless $c-req-method eq 'POST';

# redisplay page if does not validate
return unless $form-validate;

# write data to model
$form-update_or_create;

# Redirect to show new post:
my $uri = $c-uri_for( 'blog', $form-object-id );
return $c-res-redirect( $uri );
}



Now, for REST it's a POST to /blog to create and NO arguments are allowed,
and for update it's a PUT to /blog/$id and $id is REQUIRED.  The request
parameters are in a blog_data key in the JSON request.  For create return
201 with a Location: header.  On update probably return a 204.

If the request parameters do not validate (as tested by the form) then need
to serialize the form's errors in a JSON response.

Much of the existing blog action can be used for both the POST and PUT (and
probably GET), but need to map the blog_data into parameters used by the
form object.

That seems a bit more straight forward -- just add blog_$METHOD methods
that (re-set) the status code (and for GET) builds the rest stash.  But,
still need a way to extract out the blog_data from $c-req-data and use
it as the request parameters.



 Just curious, but if you apply the REST action class (and define
 _GET/_POST methods) and keep stash population to your actions, what is
 failing there?  I've done similar things to what you are discussing
 (and will again in about a week or two from now) and hadn't run into
 anything severe.


The main issue is just finding a clean way to handle both web browser and
REST request and responses.

But specifically, two issues:

First, input munging is often required.  I want to share action code for
processing input data but the web request comes in $c-req-parameters, but
with ::REST the request data comes in $c-req-data and may be formatted
slightly differently or with different parameter 

Re: [Catalyst] Best practices: XML output from static XML

2010-03-06 Thread David
Exactly, as there is a little bit of application logic, so I need this process.
Thanks for the solution Jay. I'll go for it.

Just one last question. When you talk about using 'lib/MyApp/View/MyView.pm', 
you mean that is also correct to create a simple perl Module for your view. 
Then implement process method in the View.pm and forward the context from the 
Controller ( $c-forward( $c-view('MyView') ); )?

 
David






De: Mesdaq, Ali ames...@websense.com
Para: The elegant MVC web framework catalyst@lists.scsys.co.uk
Enviado: vie,5 marzo, 2010 21:42
Asunto: RE: [Catalyst] Best practices: XML output from static XML

 Catalyst to serve a static file (which would only make sense if there *is* 
application logic) putting this in a View would be the Right Way.

Yes my point exactly. That’s why I was comparing it to serving static image 
files and how it's similar to this situation because there seems to be no 
application logic at all needed for this example so putting it in a view just 
to follow the design pattern does not make sense to me. That’s why I gave the 
previous example as an example of overkilling with the design pattern where it 
really serves no purpose. I completely agree that it makes much more sense to 
leverage the webserver for dealing with static files when necessary/possible. 

Thanks,
--
Ali Mesdaq (CISSP, GIAC-GREM)
Sr. Security Researcher
Websense Security Labs
http://www.WebsenseSecurityLabs.com
--


-Original Message-
From: J. Shirley [mailto:jshir...@gmail.com] 
Sent: Friday, March 05, 2010 12:20 PM
To: The elegant MVC web framework
Subject: Re: [Catalyst] Best practices: XML output from static XML

On Fri, Mar 5, 2010 at 11:31 AM, Mesdaq, Ali ames...@websense.com wrote:
 To me this sounds like it’s the same issue as serving static images you
 wouldn’t create a view for that unless you need to wrap it around some
 application logic. Or at least that’s what it sounds like to me based on the
 information provided. We could take the MVC concept really far and say that
 static files need to have a filesystem Model with Controller logic for
 finding the files and each have their own View for each filetype.




I would say that putting it into a view allows a greater degree of
future-proof and foresight.  Putting it into the controller would work
fine, up until you need to serve another static file (or a different
file), or add an access control layer, or switch to use sendfile, or
switch to start serving from something like MogileFS.

If you put it all the above in one method, why put it in a controller
rather than a view?

In all of what you said you haven't actually said what is wrong with
using a view.

I would certainly recommend that serving static files would be done by
the webserver and render this moot.  However, if you want to use
Catalyst to serve a static file (which would only make sense if there
*is* application logic) putting this in a View would be the Right Way.

-Jay

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Protected by Websense Hosted Email Security -- www.websense.com 

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/



  ___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-06 Thread J. Shirley
On Sat, Mar 6, 2010 at 6:17 AM, David oldskif...@yahoo.es wrote:
 Exactly, as there is a little bit of application logic, so I need this
 process.
 Thanks for the solution Jay. I'll go for it.

 Just one last question. When you talk about using
 'lib/MyApp/View/MyView.pm', you mean that is also correct to create a simple
 perl Module for your view. Then implement process method in the View.pm and
 forward the context from the Controller ( $c-forward( $c-view('MyView') );
 )?


 David


Yup, that is exactly right.

-J

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-06 Thread Bill Moseley
On Sat, Mar 6, 2010 at 6:34 AM, J. Shirley jshir...@gmail.com wrote:

  Just one last question. When you talk about using
  'lib/MyApp/View/MyView.pm', you mean that is also correct to create a
 simple
  perl Module for your view. Then implement process method in the View.pm
 and
  forward the context from the Controller ( $c-forward( $c-view('MyView')
 );
  )?
 
 
  David
 

 Yup, that is exactly right.


Expanding this thread a bit...

I asked a related question in another thread.  What if you want a view that
needs separate code for each action?

For example, when no template is explicitly defined in the action,
C::View::TT will pass control to a template based on the action's name.
 Each action can have its own associated template.

Likewise, for a different type of output I might need code to run for each
action.

Say the controller action for the path /music/recent_uploads places a list
of objects in the stash.  Rendering with HTML sends it to TT (e.g
/templates/music/recent_uploads.tt).  But, what if the client wants, say an
RSS feed or JSON response for that same action?  Doesn't that seems like a
View's job to turn that into a feed or JSON?

But for both of those examples I need code to serialize those objects in the
stash (into a feed or JSON).  So, my question is 1) how to map the action
into a view method, and 2) where those view methods should live?

I don't think a separate view for every possible action is the correct
approach.  Seems better to have in an end() method simply:

$c-forward( $c-view( $view_type ) );


A simplistic or naive View approach might look like:

sub process {
my ( $self, $c ) = @_;

my $method = $c-action-reverse;

$method =~ s{/}{_};

$self-$method( $c ) if $self-can( $method );
}

But, that's flat and ugly.

I could keep the view code in with the controllers which in some way makes
maintenance easier (related code is together), but then the view is not
separate.

my $method = $c-action-name;
$method .= '_render_json';
$c-action-controller-$method( $c );


So, what's the recommended approach to per-action view code?



-- 
Bill Moseley
mose...@hank.org
___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-06 Thread J. Shirley
On Sat, Mar 6, 2010 at 8:25 AM, Bill Moseley mose...@hank.org wrote:


 On Sat, Mar 6, 2010 at 6:34 AM, J. Shirley jshir...@gmail.com wrote:

  Just one last question. When you talk about using
  'lib/MyApp/View/MyView.pm', you mean that is also correct to create a
  simple
  perl Module for your view. Then implement process method in the View.pm
  and
  forward the context from the Controller ( $c-forward(
  $c-view('MyView') );
  )?
 
 
  David
 

 Yup, that is exactly right.

 Expanding this thread a bit...
 I asked a related question in another thread.  What if you want a view that
 needs separate code for each action?
 For example, when no template is explicitly defined in the action,
 C::View::TT will pass control to a template based on the action's name.
  Each action can have its own associated template.
 Likewise, for a different type of output I might need code to run for each
 action.
 Say the controller action for the path /music/recent_uploads places a list
 of objects in the stash.  Rendering with HTML sends it to TT (e.g
 /templates/music/recent_uploads.tt).  But, what if the client wants, say an
 RSS feed or JSON response for that same action?  Doesn't that seems like a
 View's job to turn that into a feed or JSON?
 But for both of those examples I need code to serialize those objects in the
 stash (into a feed or JSON).  So, my question is 1) how to map the action
 into a view method, and 2) where those view methods should live?
 I don't think a separate view for every possible action is the correct
 approach.  Seems better to have in an end() method simply:
 $c-forward( $c-view( $view_type ) );

 A simplistic or naive View approach might look like:
 sub process {
     my ( $self, $c ) = @_;
     my $method = $c-action-reverse;
     $method =~ s{/}{_};
     $self-$method( $c ) if $self-can( $method );
 }
 But, that's flat and ugly.
 I could keep the view code in with the controllers which in some way makes
 maintenance easier (related code is together), but then the view is not
 separate.
 my $method = $c-action-name;
 $method .= '_render_json';
 $c-action-controller-$method( $c );

 So, what's the recommended approach to per-action view code?



I don't think the path taken with Catalyst::Action::REST is the best,
but it does work very very well in my opinion and I certainly can't
think of anything better.  Being able to send to a serialization
method based on the content-type solves a lot of these issues.  You
could just setup a content type for your feed in configuration and
write a custom serialize class and get exactly what you are asking
for.

I don't want to evangelize ::REST too much, so to address your
suggestions more directly I'd have to say that relying on $self-can
seems a bit too limited for my tastes.

I'd lean on configuration more so than $self-can.  Then a call to
$self-get_serializer_for('JSON') that returns some serialization
object (or whatever handler you have) is simple, and coupling it with
Moose would work very well.  Then you can work out adding new
serialization calls just in config.

However, I'm having a hard time thinking about any valid use cases for
this, especially since ::REST does things fairly well (especially for
how old the code is) so I'd automatically use that for all the cases I
can think of. Anything else that doesn't fit, I'd just defer to having
separate views (and possibly a different RenderView+end action as
appropriate).

-J

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-06 Thread Bill Moseley
On Sat, Mar 6, 2010 at 12:59 PM, J. Shirley jshir...@gmail.com wrote:


 I don't think the path taken with Catalyst::Action::REST is the best,
 but it does work very very well in my opinion and I certainly can't
 think of anything better.  Being able to send to a serialization
 method based on the content-type solves a lot of these issues.  You
 could just setup a content type for your feed in configuration and
 write a custom serialize class and get exactly what you are asking
 for.


I agree, ::REST works well for what it does, but doesn't provide a framework
for a View that is action-specific.  ::REST assumes that the actions set an
entity in the rest stash that can be serialized.  But, if the same action
is used for a TT View then probably want to just pass model objects in the
stash instead of creating a rest structure in the stash.

One could argue that actions should always result in the same data in the
stash regardless of the View (the Controller has no idea about the final
View).  The reality is that a request to /blob/recent_posts would return
different data in a JSON response than would be use to render a web page
with a TT view.



The problem I'm up against is we have an existing application written for
the web -- so actions expect GET and POST requests and place objects in the
stash.  Then TT uses the objects in the stash to render the markup.

Now we need to expose these same methods (which means same URLs really) for
two similar purposes.  New development for the web app is all client side.
 Fat AJAX that talks to the application via JSON serialized (mostly)
requests and responses.  Plus, we need to expose a REST API for third party
customers.  So, really it's just an API for both.

::REST will work fine for new actions, but there's a lot of existing actions
that need to work both for TT rendered pages and for JSON responses.

I think the action's job should be to take a request, validate,
authenticate, authorize, etc, then either generate error or place model
objects in the stash.  Then pass off to the view to render/serialize.

The problem is that a request coming from a browser may be slightly
different than from an AJAX or API request.  (Request might come in a as a
POST on the web and a PUT via the API and parameters might be slightly
different.)  So, either need to dispatch to different actions for same
request URL or have some kind of filtering code that runs before the action
to normalize the request for the action depending on where it's coming
from.

Obviously, it makes sense to share the actions where possible.

Likewise, the TT View passes control to an action-specific template to
render the markup for the request, but the same action might need to return
JSON  so in that case would need to also have action-specific code to build
the json stash from the objects the action fetched.

I don't want to evangelize ::REST too much, so to address your

suggestions more directly I'd have to say that relying on $self-can

 seems a bit too limited for my tastes.


I don't like it either.  Still, to me it seems the act of taking the model
objects loaded by the controller and building the json stash is a View
action -- not something that should happen in the controller action.


 I'd lean on configuration more so than $self-can.  Then a call to
 $self-get_serializer_for('JSON') that returns some serialization
 object (or whatever handler you have) is simple, and coupling it with
 Moose would work very well.  Then you can work out adding new
 serialization calls just in config.


So are you suggesting that $self-get_serializer_for('JSON') would return
code that would be action-specific?  That is for a request to
/blog/recent_posts would return code that would know what to put in the
json stash for that specific request?

I like the idea of leaning on the configuration implementation -- just not
sure what that looks like. ;)




 However, I'm having a hard time thinking about any valid use cases for
 this, especially since ::REST does things fairly well (especially for
 how old the code is) so I'd automatically use that for all the cases I
 can think of. Anything else that doesn't fit, I'd just defer to having
 separate views (and possibly a different RenderView+end action as
 appropriate).


If I was starting fresh I'd be tempted to write all the controller actions
with ::REST.  I'd like it if the various _METHOD actions were real actions
for dispatching (they aren't right?).  Real actions would mean could test
things like Args:

 sub blog_GET : Local Args(1) {  # GET requires an argument
 sub blog_POST: Local Args(0)  { # POST creates and must not have an
argument
 sub blog_PUT : Local Args(1) {  # PUT requires and argument
 sub blog_DELETE : Local Args(1) {

Then layer the web app on top -- especially if it's all client side.  But,
again I still think the action's job would be to just place model objects in
the stash -- not build a json structure as that is only needed 

Re: [Catalyst] Best practices: XML output from static XML

2010-03-06 Thread J. Shirley
On Sat, Mar 6, 2010 at 2:20 PM, Bill Moseley mose...@hank.org wrote:


 On Sat, Mar 6, 2010 at 12:59 PM, J. Shirley jshir...@gmail.com wrote:

 I don't think the path taken with Catalyst::Action::REST is the best,
 but it does work very very well in my opinion and I certainly can't
 think of anything better.  Being able to send to a serialization
 method based on the content-type solves a lot of these issues.  You
 could just setup a content type for your feed in configuration and
 write a custom serialize class and get exactly what you are asking
 for.

 I agree, ::REST works well for what it does, but doesn't provide a framework
 for a View that is action-specific.  ::REST assumes that the actions set an
 entity in the rest stash that can be serialized.  But, if the same action
 is used for a TT View then probably want to just pass model objects in the
 stash instead of creating a rest structure in the stash.
 One could argue that actions should always result in the same data in the
 stash regardless of the View (the Controller has no idea about the final
 View).  The reality is that a request to /blob/recent_posts would return
 different data in a JSON response than would be use to render a web page
 with a TT view.


This is where I actually really love ::REST.  If you make a JSON call,
then whatever is in the stash key that ::REST is returned to the
client (via -status_ok) -- but if you combine this with chained and
setup other data in the stash, the TT view can access all of that.

So I view it more that the JSON response is limited to showing *only*
the request result, where as TT can show everything else surrounding
it.

This allows me a great amount of flexibility in my templates, without
having any [% c.model('Schema::Whatever') %] in them.


 The problem I'm up against is we have an existing application written for
 the web -- so actions expect GET and POST requests and place objects in the
 stash.  Then TT uses the objects in the stash to render the markup.
 Now we need to expose these same methods (which means same URLs really) for
 two similar purposes.  New development for the web app is all client side.
  Fat AJAX that talks to the application via JSON serialized (mostly)
 requests and responses.  Plus, we need to expose a REST API for third party
 customers.  So, really it's just an API for both.
 ::REST will work fine for new actions, but there's a lot of existing actions
 that need to work both for TT rendered pages and for JSON responses.
 I think the action's job should be to take a request, validate,
 authenticate, authorize, etc, then either generate error or place model
 objects in the stash.  Then pass off to the view to render/serialize.
 The problem is that a request coming from a browser may be slightly
 different than from an AJAX or API request.  (Request might come in a as a
 POST on the web and a PUT via the API and parameters might be slightly
 different.)  So, either need to dispatch to different actions for same
 request URL or have some kind of filtering code that runs before the action
 to normalize the request for the action depending on where it's coming
 from.
 Obviously, it makes sense to share the actions where possible.
 Likewise, the TT View passes control to an action-specific template to
 render the markup for the request, but the same action might need to return
 JSON  so in that case would need to also have action-specific code to build
 the json stash from the objects the action fetched.

Just curious, but if you apply the REST action class (and define
_GET/_POST methods) and keep stash population to your actions, what is
failing there?  I've done similar things to what you are discussing
(and will again in about a week or two from now) and hadn't run into
anything severe.

As long as the content-type (no problem for XmlHttpRequest) is set to
application/json I get back the data I expect.  I do have to modify
some of the actions to set the final stash result, but in most cases
this is just a single line of code.


 I don't want to evangelize ::REST too much, so to address your

 suggestions more directly I'd have to say that relying on $self-can

 seems a bit too limited for my tastes.

 I don't like it either.  Still, to me it seems the act of taking the model
 objects loaded by the controller and building the json stash is a View
 action -- not something that should happen in the controller action.

 I'd lean on configuration more so than $self-can.  Then a call to
 $self-get_serializer_for('JSON') that returns some serialization
 object (or whatever handler you have) is simple, and coupling it with
 Moose would work very well.  Then you can work out adding new
 serialization calls just in config.

 So are you suggesting that $self-get_serializer_for('JSON') would return
 code that would be action-specific?  That is for a request to
 /blog/recent_posts would return code that would know what to put in the
 json stash for that specific request?
 I like the 

Re: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread J. Shirley
On Fri, Mar 5, 2010 at 5:10 AM, David oldskif...@yahoo.es wrote:
 Hi,

 I need to generate an XML output (Content-type: application/xml), but this
 XML output is the XML content which is stored in an XML file. I don't need
 to dinamically generate this XML content.
 I have searched in google but I don't find any catalyst view module for
 managing this case. I don't know if exists any module for generating XML
 output from a static file as, for example, Catalyst::View::XSLT module
 (http://search.cpan.org/~janus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pm)
 does. That is, generate an output from a static file, in this case, an XML
 output.

 I am not finding much information about designing your own views in
 Catalyst, or at least, I don't see much flexibility. All examples I have
 found need to be generated, through the helper view, with TT template or any
 other templates.
 Is it possible to create your own view, with no template, and for example,
 in my case, read the output from a static file and send this output to the
 client? (I don't know exactly how Views works in Catalyst, though I have
 already read Catalyst tutorial and cookbook)

 Thanks in advanced,


 David



Well, you could do your own view or just rely on
Catalyst::Plugin::Static::Simple:

http://search.cpan.org/~mstrout/Catalyst-Plugin-Static-Simple-0.29/lib/Catalyst/Plugin/Static/Simple.pm#serve_static_file_$file_path

You could wrap this in a view:

package MyApp::View::StaticFile;

use parent 'Catalyst::View';

sub process {
my ( $self, $c ) = @_;
$c-serve_static_file( $c-stash-{static_file} );
}

1;



Then just do $c-forward( $c-view('StaticFile') ); after setting the stash key.

-Jay

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


RE: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread Mesdaq, Ali
Maybe I am missing something but why is a view needed? If you are serving up a 
static file and its xml why don’t you just serve that file statically based on 
path? Is the header content-type not getting set properly for that file?

Thanks,
--
Ali Mesdaq (CISSP, GIAC-GREM)
Sr. Security Researcher
Websense Security Labs
http://www.WebsenseSecurityLabs.comhttp://www.websensesecuritylabs.com/
--

From: David [mailto:oldskif...@yahoo.es]
Sent: Friday, March 05, 2010 5:10 AM
To: catalyst@lists.scsys.co.uk
Subject: [Catalyst] Best practices: XML output from static XML

Hi,

I need to generate an XML output (Content-type: application/xml), but this XML 
output is the XML content which is stored in an XML file. I don't need to 
dinamically generate this XML content.
I have searched in google but I don't find any catalyst view module for 
managing this case. I don't know if exists any module for generating XML output 
from a static file as, for example, Catalyst::View::XSLT module 
(http://search.cpan.org/~janus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pmhttp://search.cpan.org/%7Ejanus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pm)
 does. That is, generate an output from a static file, in this case, an XML 
output.

I am not finding much information about designing your own views in Catalyst, 
or at least, I don't see much flexibility. All examples I have found need to be 
generated, through the helper view, with TT template or any other templates.
Is it possible to create your own view, with no template, and for example, in 
my case, read the output from a static file and send this output to the client? 
(I don't know exactly how Views works in Catalyst, though I have already read 
Catalyst tutorial and cookbook)

Thanks in advanced,


David




Click herehttps://www.mailcontrol.com/sr/wQw0zmjPoHdJTZGyOCrrhg== to report 
this email as spam.


 Protected by Websense Hosted Email Security -- www.websense.com 
___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread David
Thanks Jay.

I thought of that solution too when I had a look at 
Catalyst::Plugin::Static::Simple. But in this case, my doubt was, and is, how 
should I create the view through the helper?
Most of the examples for creating views are TT views, so they create it as 
'script/hello_create.pl view my_TT_view TT'.
 David





De: J. Shirley jshir...@gmail.com
Para: The elegant MVC web framework catalyst@lists.scsys.co.uk
Enviado: vie,5 marzo, 2010 16:45
Asunto: Re: [Catalyst] Best practices: XML output from static XML

On Fri, Mar 5, 2010 at 5:10 AM, David oldskif...@yahoo.es wrote:
 Hi,

 I need to generate an XML output (Content-type: application/xml), but this
 XML output is the XML content which is stored in an XML file. I don't need
 to dinamically generate this XML content.
 I have searched in google but I don't find any catalyst view module for
 managing this case. I don't know if exists any module for generating XML
 output from a static file as, for example, Catalyst::View::XSLT module
 (http://search.cpan.org/~janus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pm)
 does. That is, generate an output from a static file, in this case, an XML
 output.

 I am not finding much information about designing your own views in
 Catalyst, or at least, I don't see much flexibility. All examples I have
 found need to be generated, through the helper view, with TT template or any
 other templates.
 Is it possible to create your own view, with no template, and for example,
 in my case, read the output from a static file and send this output to the
 client? (I don't know exactly how Views works in Catalyst, though I have
 already read Catalyst tutorial and cookbook)

 Thanks in advanced,


 David



Well, you could do your own view or just rely on
Catalyst::Plugin::Static::Simple:

http://search.cpan.org/~mstrout/Catalyst-Plugin-Static-Simple-0.29/lib/Catalyst/Plugin/Static/Simple.pm#serve_static_file_$file_path

You could wrap this in a view:

package MyApp::View::StaticFile;

use parent 'Catalyst::View';

sub process {
my ( $self, $c ) = @_;
$c-serve_static_file( $c-stash-{static_file} );
}

1;



Then just do $c-forward( $c-view('StaticFile') ); after setting the stash key.

-Jay

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/



  ___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread David
Well, as Catalyst works under MVC model, I thought that a best practice would 
be to use a view module although in this case, obiously, the view task is 
insignificant.

 David





De: Mesdaq, Ali ames...@websense.com
Para: The elegant MVC web framework catalyst@lists.scsys.co.uk
Enviado: vie,5 marzo, 2010 19:04
Asunto: RE: [Catalyst] Best practices: XML output from static XML

 
Maybe I am missing
something but why is a view needed? If you are serving up a static file and its
xml why don’t you just serve that file statically based on path? Is the header
content-type not getting set properly for that file?
 
Thanks,
--
Ali
Mesdaq (CISSP, GIAC-GREM)
Sr.
Security Researcher
Websense
Security Labs
http://www.WebsenseSecurityLabs.com
--
 
From:David [mailto:oldskif...@yahoo.es] 
Sent: Friday, March 05, 2010 5:10 AM
To: catalyst@lists.scsys.co.uk
Subject: [Catalyst] Best practices: XML output from static XML
 
Hi,

I need to generate an XML output (Content-type: application/xml), but this XML
output is the XML content which is stored in an XML file. I don't need to
dinamically generate this XML content. 
I have searched in google but I don't find any catalyst view module for
managing this case. I don't know if exists any module for generating XML output
from a static file as, for example, Catalyst::View::XSLT module 
(http://search.cpan.org/~janus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pm)
does. That is, generate an output from a static file, in this case, an XML
output.

I am not finding much information about designing your own views in Catalyst,
or at least, I don't see much flexibility. All examples I have found need to be
generated, through the helper view, with TT template or any other templates.
Is it possible to create your own view, with no template, and for example, in
my case, read the output from a static file and send this output to the client?
(I don't know exactly how Views works in Catalyst, though I have already read
Catalyst tutorial and cookbook)

Thanks in advanced,


David
 


Click here to report this email as spam.


Protected by Websense Hosted Email Security — www.websense.com


  ___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread J. Shirley
On Fri, Mar 5, 2010 at 10:46 AM, David oldskif...@yahoo.es wrote:
 Thanks Jay.

 I thought of that solution too when I had a look at
 Catalyst::Plugin::Static::Simple. But in this case, my doubt was, and is,
 how should I create the view through the helper?
 Most of the examples for creating views are TT views, so they create it as
 'script/hello_create.pl view my_TT_view TT'.

 David


I'd really recommend just creating a sample application you can mess
with, like 'catalyst.pl Foo' -- I do this frequently when testing new
things.

Then just script/foo_create.pl view StaticFile would create a skeleton view.

When you supply additional arguments (the TT) then you are looking
at basing your view off the helper, which is sourced from
Catalyst::View::Helper::TT.  It's fully optional, and omitting that
will just create a very basic package.

Of course you don't have to use any of this, you can just edit
lib/MyApp/View/MyView.pm directly and code it up -- it's just a
simple perl package (like what I wrote out above).

-J

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


RE: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread Mesdaq, Ali
To me this sounds like it’s the same issue as serving static images you 
wouldn’t create a view for that unless you need to wrap it around some 
application logic. Or at least that’s what it sounds like to me based on the 
information provided. We could take the MVC concept really far and say that 
static files need to have a filesystem Model with Controller logic for finding 
the files and each have their own View for each filetype.

Thanks,
--
Ali Mesdaq (CISSP, GIAC-GREM)
Sr. Security Researcher
Websense Security Labs
http://www.WebsenseSecurityLabs.comhttp://www.websensesecuritylabs.com/
--

From: David [mailto:oldskif...@yahoo.es]
Sent: Friday, March 05, 2010 10:49 AM
To: The elegant MVC web framework
Subject: Re: [Catalyst] Best practices: XML output from static XML

Well, as Catalyst works under MVC model, I thought that a best practice would 
be to use a view module although in this case, obiously, the view task is 
insignificant.

David



De: Mesdaq, Ali ames...@websense.com
Para: The elegant MVC web framework catalyst@lists.scsys.co.uk
Enviado: vie,5 marzo, 2010 19:04
Asunto: RE: [Catalyst] Best practices: XML output from static XML
Maybe I am missing something but why is a view needed? If you are serving up a 
static file and its xml why don’t you just serve that file statically based on 
path? Is the header content-type not getting set properly for that file?

Thanks,
--
Ali Mesdaq (CISSP, GIAC-GREM)
Sr. Security Researcher
Websense Security Labs
http://www.WebsenseSecurityLabs.comhttp://www.websensesecuritylabs.com/
--

From: David [mailto:oldskif...@yahoo.es]
Sent: Friday, March 05, 2010 5:10 AM
To: catalyst@lists.scsys.co.uk
Subject: [Catalyst] Best practices: XML output from static XML

Hi,

I need to generate an XML output (Content-type: application/xml), but this XML 
output is the XML content which is stored in an XML file. I don't need to 
dinamically generate this XML content.
I have searched in google but I don't find any catalyst view module for 
managing this case. I don't know if exists any module for generating XML output 
from a static file as, for example, Catalyst::View::XSLT module 
(http://search.cpan.org/~janus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pmhttp://search.cpan.org/%7Ejanus/Catalyst-View-XSLT-0.08/lib/Catalyst/View/XSLT.pm)
 does. That is, generate an output from a static file, in this case, an XML 
output.

I am not finding much information about designing your own views in Catalyst, 
or at least, I don't see much flexibility. All examples I have found need to be 
generated, through the helper view, with TT template or any other templates.
Is it possible to create your own view, with no template, and for example, in 
my case, read the output from a static file and send this output to the client? 
(I don't know exactly how Views works in Catalyst, though I have already read 
Catalyst tutorial and cookbook)

Thanks in advanced,


David





Click herehttps://www.mailcontrol.com/sr/wQw0zmjPoHdJTZGyOCrrhg== to report 
this email as spam.


Protected by Websense Hosted Email Security — 
www.websense.comhttp://www.websense.com

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread J. Shirley
On Fri, Mar 5, 2010 at 11:31 AM, Mesdaq, Ali ames...@websense.com wrote:
 To me this sounds like it’s the same issue as serving static images you
 wouldn’t create a view for that unless you need to wrap it around some
 application logic. Or at least that’s what it sounds like to me based on the
 information provided. We could take the MVC concept really far and say that
 static files need to have a filesystem Model with Controller logic for
 finding the files and each have their own View for each filetype.




I would say that putting it into a view allows a greater degree of
future-proof and foresight.  Putting it into the controller would work
fine, up until you need to serve another static file (or a different
file), or add an access control layer, or switch to use sendfile, or
switch to start serving from something like MogileFS.

If you put it all the above in one method, why put it in a controller
rather than a view?

In all of what you said you haven't actually said what is wrong with
using a view.

I would certainly recommend that serving static files would be done by
the webserver and render this moot.  However, if you want to use
Catalyst to serve a static file (which would only make sense if there
*is* application logic) putting this in a View would be the Right Way.

-Jay

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


RE: [Catalyst] Best practices: XML output from static XML

2010-03-05 Thread Mesdaq, Ali
 Catalyst to serve a static file (which would only make sense if there *is* 
application logic) putting this in a View would be the Right Way.

Yes my point exactly. That’s why I was comparing it to serving static image 
files and how it's similar to this situation because there seems to be no 
application logic at all needed for this example so putting it in a view just 
to follow the design pattern does not make sense to me. That’s why I gave the 
previous example as an example of overkilling with the design pattern where it 
really serves no purpose. I completely agree that it makes much more sense to 
leverage the webserver for dealing with static files when necessary/possible. 

Thanks,
--
Ali Mesdaq (CISSP, GIAC-GREM)
Sr. Security Researcher
Websense Security Labs
http://www.WebsenseSecurityLabs.com
--


-Original Message-
From: J. Shirley [mailto:jshir...@gmail.com] 
Sent: Friday, March 05, 2010 12:20 PM
To: The elegant MVC web framework
Subject: Re: [Catalyst] Best practices: XML output from static XML

On Fri, Mar 5, 2010 at 11:31 AM, Mesdaq, Ali ames...@websense.com wrote:
 To me this sounds like it’s the same issue as serving static images you
 wouldn’t create a view for that unless you need to wrap it around some
 application logic. Or at least that’s what it sounds like to me based on the
 information provided. We could take the MVC concept really far and say that
 static files need to have a filesystem Model with Controller logic for
 finding the files and each have their own View for each filetype.




I would say that putting it into a view allows a greater degree of
future-proof and foresight.  Putting it into the controller would work
fine, up until you need to serve another static file (or a different
file), or add an access control layer, or switch to use sendfile, or
switch to start serving from something like MogileFS.

If you put it all the above in one method, why put it in a controller
rather than a view?

In all of what you said you haven't actually said what is wrong with
using a view.

I would certainly recommend that serving static files would be done by
the webserver and render this moot.  However, if you want to use
Catalyst to serve a static file (which would only make sense if there
*is* application logic) putting this in a View would be the Right Way.

-Jay

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


 Protected by Websense Hosted Email Security -- www.websense.com 

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/