Rails生成器:基于现有的Rails文件生成文件



我想制作一个生成器,根据应用程序中已有的文件(例如,视图或控制器)创建文件(和目录等)。因此,如果我们有这样的视图设置

-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

所以这基本上就是我想用生成器做的,这样我就可以把我的代码滚动到一个插件中,并将其用于其他应用程序。

第一个问题,我如何使用生成器生成任意文件(使用基于现有文件名的文件名。像上面那样在目录中循环,获取目录/文件并生成文件是否合适?有没有一种方法可以使用更简单的方法来做我所做的事情(我的方法似乎很容易破坏)。

此外,我应该把所有读/格式化/写代码放在生成器本身中,然后把一个字符串传递到create_file"initialize content"部分,还是应该把它放在其他地方。或者我应该使用生成器来创建裸文件并用init脚本填充它吗?

是否有更多rails类型的方法来填充生成的文件,或者我应该把所有的格式化代码都塞进生成器中。如果是这样的话,处理这一问题的适当方式是什么。

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

所以我肯定会在生成器中填充你的文件,因为这是根据用户的请求进行的,用户可以选择是否需要或可以覆盖某些文件。

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

从Thor文档中,这里有一个在生成器中构造文件的好例子。

希望这能有所帮助。

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

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

如果你想检查一些代码:

https://github.com/coderloop/tamed_beast(我是其生成器的作者)

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

相关内容

  • 没有找到相关文章

最新更新