Rails partial generator of template - ruby-on-rails

Is there a way in rails, that I can only generate templates partially?
For example in my generators/generatorName/templates folder, there is template1.html.erb and template2.html.erb files
in console when I run the command
rails g generatorName
It will just generate by default the template1,html.erb.
and if I want to add the another template, how can I do that? Is there a way?

Sounds like you're looking for a custom generator. You'll need to create/copy the second file on invoke.
http://guides.rubyonrails.org/generators.html

Related

How to convert Rails whole application in erb to haml

I have one Rails application and all files are in erb format. Is there any quick way to convert whole application's erb file to haml.. without any conflict.
And also would like to know for the Reverse..
Thanks in advance. :)
For erb-to-haml
You can use from the command line html2haml
html2haml your_erb_file new_haml_file
If you want to convert all your files in one go, look at this article : http://shifteleven.com/articles/2008/06/08/converting-erb-to-haml-snippet
erb2haml gem will do the trick.. have a look to https://github.com/dhl/erb2haml
For haml-to-erb
I recommend you HAML2ERB service . It's really cool and generates valid ERB/HTML code! Tested on big HAML views (over 800 lines of markup) from the real production app. Project active :)
have a look to this also http://makandracards.com/makandra/544-convert-haml-to-erb

How can I pre-process .rb files in Rails?

I wrote a Ruby language pre-processor that I also want to tie in to Rails.
Accomplishing this isn't exactly clear from my research. I want the same effect of having .rb.erb or .rb.haml but on files that are not templates(models and controllers, for example). It seems that typical pre-processing is specific to the asset pipeline.
http://guides.rubyonrails.org/v3.2.17/asset_pipeline.html#preprocessing
Does anyone know where I could start in writing a pre-processor for code that is not part of the asset pipeline?
EDIT: I want to do something to the following effect:
Write Ruby code in a custom syntax.
Each file with the custom syntax has an extra extension to denote custom syntax. For example, the model page.rb would be page.rb.custom.
When Rails runs(or when Spring reloads the app), code that has a .custom file extension is preprocessed(or precompiled, rather) into pure Ruby and is executed.

Rails overriding Mini-Test templates

I am trying to override the generator templates here, but am having no luck.
I have configured mini-test to use the spec syntax, and it generates the spec template but not my custom one. Also it calls the generated file for example *controller_test.rb even though it contains the spec syntax.
Here is my structure:
OK it turns out that the mini-test folder should be mini_test

Rails Generator: generate files based on already existing rails files

I wanted to make a generator that created files (and directories, etc...) based on already existing files in the app (for instance, the views or controllers). So if we had views set up like this
-app
-views
- layouts
- application.html.erb
- users
- index.html.erb
- show.html.erb
- etc ...
and I wanted to create files based on them I can do (with just ruby)
directories = Dir.entries("#{Rails.root}/app/views")
directories.each do |directory|
unless directory == "." or directory == ".."
files = Dir.entries("#{Rails.root}/app/views/#{directory}")
files.each do |file|
unless file == "." or file == ".."
text = File.read("#{Rails.root}/app/views/#{directory}/#{file}")
something #=> whatever else needs to go here to edit the file
something else #=> output_file.puts whatever
end
end
end
end
so this is basically what I would like to do with a generator so I can roll my code into a plugin and use it for other apps.
First question, how can I generate arbitrary files (with filenames based on existing filenames using the generator. Is it appropriate to cycle through the directories like I did above, grab the directory/file and generate files? Is there a way to do what I did using a simpler method (mine seems easily breakable).
Also, should I put all that read/format/write code inside the generator itself and just pass a string into the "initialize content" section of create_file or should I put it somewhere else. Or should I use the generator to create the bare files and populate it with an init script?
Is there a more rails type of way of populating generated files, or should I just shove all my formatting code inside the generator. If so, what is the appropriate way to approach this.
I am not sure if you want to know how generators are built in rails3 or not. The code you are showing is not very generator-like. In generators you can use all commands from Thor, which offers you a very powerful toolset of manipulating files, and injecting code (strings) into classes or files.
So I would most definitely fill your files inside a generator, because then it happens on user request, and the user can choose whether or not certain files need or can be overwritten or not.
Inside your gem, you will have a lib/generators folder, containing a templates folder, containing all files you might want to place inside the rails application.
From the Thor documentation, here is a nice example to construct files in a generator.
Hope this helps.
there's a simple API to use generators in Rails. here you can find a good guide:
http://guides.rubyonrails.org/generators.html
if you want to check some code:
https://github.com/coderloop/tamed_beast (I'm the author of its generators)
https://github.com/pilu/web-app-theme (another clean example)

Easily create a Ruby on Rails partial from an existing block of markup using vim

Is there currently a plugin that you ruby on rails developers that are also using macvim/gvim/vim that allows you to take a quick block of code and create a partial from it? I know that TextMate does this, figured someone has ported it by now to vim also.
You want Tim Pope's rails.vim plugin:
http://rails.vim.tpope.net/
It provides an :Rextract command that pulls a range of lines into a partial. Here's a very short demo of it in action:
http://rails.vim.tpope.net/images/rpartial.gif
(The :Rpartial command in the demo is an alias for :Rextract.)
The plugin provides dozens of other features, too, and many people consider it a must-have for Rails development in Vim.
It works in vim with vim-rails plugin.
Select in visual mode code which you need to send to partial
Press key : and you will see :'<,'>
Complete command to :'<,'>Rextract partial_name where partial_name will your partial's file name. You can set folder for partial, for example :'<,'>Rextract shared/menu
Press Enter and enjoy.
rails.vim can do this. From the features summary:
:Rextract file replaces the desired
range (ideally selected in visual line
mode) with render :partial => 'file',
which is automatically created with
your content. The #file instance
variable is replaced with the file
local variable.

Resources