5

我想创建一个基于应用中已有文件(例如视图或控制器)创建文件(和目录等)的生成器。因此,如果我们有意见设立这样Rails Generator:根据已经存在的rails文件生成文件

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

,我想创建一个基于他们,我可以做(只用红宝石)

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或者我应该把它放在其他地方,或者我应该使用发生器创建裸文件和popul用init脚本吃了吗?

是否还有更多rails填充生成文件的方式类型,还是应该将所有格式代码都放在生成器中?如果是这样,那么解决这个问题的恰当方法是什么?

+0

你的问题非常突然地结束“如果是这样,那是什么”。你有更多补充吗? – 2011-06-06 15:50:03

回答

5

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

所以我肯定会将你的文件填充到一个生成器中,因为这样会发生在用户请求上,用户可以选择是否需要或可以覆盖某些文件。

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

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

希望这会有所帮助。

1

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

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

,如果你想查询一些代码

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

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

+0

有人已经低估了我的答案。它出什么问题了? – 2011-06-06 12:50:27

+2

这不是我投票回答你的答案,但我会建议它被拒绝投票,因为它是3个链接到其他没有真正内容的网站。由于外部链接有时是短暂的,所以这个答案最终可能只是一组死链接。 – 2011-06-06 15:12:40

+0

@Steve:谢谢你的解释。 blinldy粘贴链接不是我的习惯。在这种情况下,考虑到解决方案不是很容易*以适应完整的答案,我粘贴了一个完整的指南,其中包含一些真实的(简单的)示例,以展示如何使用rails generator。我是tamed_beast发电机的作者,所以如果需要的话我可以提供更多的帮助。 – 2011-06-06 15:32:28