Ignacio,

I think you should take a second look at Lifecycles.   By using a
lifecycle, Hobo automatically generates controller actions and views.

But more importantly, lifecycles encourage structuring your code as a
state machine.   I'm biased because I used to be an Electronic
Engineer in a past life, but I love state machines.

Most solutions to Drew's problem involve some sort of explicit or
implicit state on a file -- it's either parsed or unparsed.  Using an
explicit state machine to describe it makes the code a lot cleaner,
IMO.

It's my rule of thumb that all controller actions should:

1) be create, update or destroy
2) multiple show & index actions are OK
3) be a lifecycle action

In other words REST + a state machine should be good enough for 99.9%
of all controller actions.

Drew:  this advice is for Ignacio.   Ignacio's advice of "just get it
to work before worrying about style" applies to you.

Ignacio: don't take my advice as criticism.  I know you're good at
what you do and probably don't need the advice.   I just couldn't
resist a chance to pontificate.

Bryan


On Wed, Nov 21, 2012 at 9:50 AM, Ignacio Huerta <[email protected]> wrote:
> Hi,
>
> Bryan's suggestions are very good. In your case, I would suggest starting
> with a basic code to get a mental picture of the whole Rails app:
>
> - Make the link point to "/files/1/parse". Edit the "show.dryml" page for
> this.
> - Add a route to config/routes.rb to match this link to the action "parse"
> in the controller "FilesController"
> - Add the action parse in the "FilesController" (using logger.info and
> monitoring the log will help to know if you are on the right way).
> - Inside the action: run your code and redirect the user to somewhere.
> - Try not to put too much code inside the action. It's much better to call
> model methods. But as a start, just make it work :). The "fat models, thin
> controllers" philosophy will come later.
>
>
> A couple of examples of show_pages in Hobo apps:
> -
> https://github.com/suyccom/member-manage/blob/master/app/views/members/show.dryml
> -
> https://github.com/suyccom/agility_bootstrap/blob/master/app/views/projects/show.dryml
>
> To make all this happen, I would browse Rails official docs or even better,
> grab a copy of the book "Agile Web Development with Rails" (4th edition is
> for Rails 3) .
>
> Regards,
> Ignacio
>
> El 21/11/12 14:50, Bryan Larsen escribió:
>
>> Obviously, there's more than one way to do this, but here's my
>> suggestion.   Perhaps others will chime in with different suggestions
>> and you can pick and choose.
>>
>> Assumptions: the model that contains the CSV is called UploadedCsv,
>> which is used to create a bunch of records named Contract.
>>
>> "business logic" in general belongs in the model.   So add a method to
>> UploadedCsv that parses your CSV.   It should be responsible for
>> parsing the CSV and call out to a class method on Contract responsible
>> for creating new contracts, checking for dupes, et cetera.
>>
>> I'd expose this logic to the UI by adding a lifecycle to UploadedCsv.
>>   2 or three states:  unprocessed, processed and maybe an error state.
>> The transition from unprocessed to processed would call the parsing
>> method.   Lifecycle buttons are then almost automatically added by
>> Hobo if you have the permissions and visibility set correctly.
>>
>> suggested reading: the lifecycle chapter in Hobo, and the ActiveRecord
>> query interface:
>> http://guides.rubyonrails.org/active_record_querying.html
>>
>> Bryan
>>
>> On Wed, Nov 21, 2012 at 7:57 AM, Drew Hamilton <[email protected]> wrote:
>>>
>>> Hi all,
>>>
>>> First off, a very quick introduction of where I'm coming from,
>>> skill-level-wise:  I'm a complete neophyte with both Rails and Hobo,
>>> although I'm familiar with Ruby.  I do understand web development, MVC
>>> architecture, OOP, etc., and have used a variety of platforms and
>>> frameworks.
>>>
>>> My company needs a small internal database to keep track of contracts,
>>> and
>>> I'm using that as an opportunity to learn Rails.  I was attracted to Hobo
>>> because it seems like it will eliminate a lot of the "busy work" involved
>>> in
>>> making an application.
>>>
>>> I did the Agility tutorial, and also followed along with my own
>>> application.
>>> Indeed, I was amazed at how I needed to do little more than declare my
>>> model
>>> to have a full application up and running.  I also did some work at
>>> changing
>>> some of the cards for my application, just to show that I can, although I
>>> prefer not to do a whole lot of that until the application is more
>>> complete
>>> than it is.
>>>
>>> Where I'm stuck now is that after the tutorial, I have an app that allows
>>> users to enter and view data, but I don't have a really good
>>> understanding
>>> of how to make it do things programmatically.
>>>
>>> In my specific case, the contract data in my application really only
>>> needs
>>> to be *viewed*; the data itself should be uploaded once per month from a
>>> CSV
>>> file and then cleaned up, have the uploader notified of problem rows,
>>> etc.
>>> I used Paperclip and made a model that would take the raw CSV files, and
>>> I
>>> also made a model to hold the actual data from the files.
>>>
>>> Parsing the CSV isn't the problem; I'm sure there are many Ruby libraries
>>> that can help.  What I don't know is
>>>
>>> - If I wanted to make a link in the "uploaded csv file" page that, when
>>> clicked would run code, how do I make that link?  And where does the code
>>> itself go?
>>> - How do I access the data (not the CSV file; I mean how do I make new
>>> records; how do I search existing records, etc.) from that code?
>>>
>>> I'm certainly not asking anyone to do my work for me; just hoping that
>>> someone could give me a link that I can read, or a link to a hobo-based
>>> project with public source code, etc. that would help point me in the
>>> right
>>> direction.
>>>
>>> Thanks!
>>>
>>>   - Drew
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Hobo Users" group.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/hobousers/-/zvwqiZ7JjuMJ.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/hobousers?hl=en.
>>
>>
>
> --
> Ignacio Huerta Arteche
> http://www.ihuerta.net
> Teléfono: 0034 645 70 77 35
> Email realizado con software libre
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Hobo Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/hobousers?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hobousers?hl=en.

Reply via email to