Rails Generator:根据现有的rails文件生成文件

时间:2011-06-03 02:38:59

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-plugins

我想创建一个基于应用程序中现有文件(例如视图或控制器)创建文件(和目录等)的生成器。所以,如果我们设置了像这样的视图

-app
   -views 
        - layouts
             - application.html.erb
        - users
             - index.html.erb
             - show.html.erb 
             - etc ...

我想根据它们创建文件(我只能使用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

所以这基本上就是我想用生成器做的事情,所以我可以将我的代码转换成插件并将其用于其他应用程序。

第一个问题,如何生成任意文件(使用生成器基于现有文件名的文件名。如上所述遍历目录,抓取目录/文件并生成是否合适文件?有没有办法用更简单的方法做我做的事情(我看起来很容易破解)。

另外,我应该将所有读取/格式化/写入代码 放在生成器本身 中,并将字符串传递到"initialize content" create_file部分1}}或者我应该把它放在别的地方。或者我应该使用生成器来创建裸文件并使用init脚本填充它?

是否有更多 rails 类型的方式来填充生成的文件,或者我应该只将所有格式化代码推送到生成器中。如果是这样,采用这种方法的适当方法是什么。

2 个答案:

答案 0 :(得分:5)

我不确定您是否想知道如何在rails3中构建生成器。您显示的代码不是类似于生成器的代码。在生成器中,您可以使用来自Thor的所有命令,它为您提供了一个非常强大的工具集来操作文件,并将代码(字符串)注入到类或文件中。

所以我绝对会在发生器中填充你的文件,因为它会在用户请求时发生,用户可以选择是否需要或可以覆盖某些文件。

在您的gem中,您将拥有一个lib/generators文件夹,其中包含一个templates文件夹,其中包含您可能希望放置在rails应用程序中的所有文件。

从Thor文档中,这里是a nice example来构建生成器中的文件。

希望这有帮助。

答案 1 :(得分:1)

有一个简单的API可以在Rails中使用生成器。在这里你可以找到一个很好的指南:

http://guides.rubyonrails.org/generators.html

如果你想检查一些代码:

https://github.com/coderloop/tamed_beast(我是其发电机的作者)

https://github.com/pilu/web-app-theme(另一个干净的例子)