需要有关创建Rails 3引擎/插件/宝石的指导

时间:2010-12-30 22:24:59

标签: ruby-on-rails-3 rubygems

我需要一些帮助,找出继续创建Rails 3引擎(或插件和/或gem)的最佳方法。

对这个问题的篇幅深表抱歉......这是第1部分:

我公司使用电子邮件服务提供商发送所有出站客户电子邮件。他们创建了一个SOAP Web服务,我已将其合并到一个示例Rails 3应用程序中。首先创建应用程序的目的是让我可以将该代码转换为宝石。

以下是一些背景知识:SOAP服务总共有23个操作,在创建我的示例应用程序时,我将类似的操作组合在一起。其中一些操作涉及通过SOAP WS上传/下载邮件列表和HTML内容,因此,有一个MySQL数据库,其中包含一些用于存储HTML内容和列表的表,作为一种“暂存区”。

总而言之,我有5个模型来包含SOAP操作(它们继承自ActiveRecord :: Base)和3个与MySQL数据库交互的模型。

我还为每个模型都有一个相应的控制器,并为每个SOAP操作提供了一个视图,用于帮助我在实现时测试操作。

所以......我不知道从哪里开始。我的代码需要大量干预。例如,WS要求在每个请求的信封体中发送用户认证信息。因此,这意味着模型中的每个方法都有相同的auth信息硬编码到其中,这是非常重复的;显然我希望它更清洁。我现在回顾一下代码,看看请求本身是重复的,可能会合并。

所有这一切我认为我可以自己解决,但这里似乎很明显,但我无法弄明白。如何创建可以在我的所有模型中使用的方法(特别考虑用户身份验证部分的方法)。

这是第2部分:

我从一开始的意图是提取我的代码并将其打包成一个宝石,我的任何ESP的其他客户端都可以使用它(我将在几个不同的应用程序中使用它)。但是,我希望它是非常可配置的。应该有一个默认的最小配置(即模型包装SOAP操作),只需将gem添加到Gemfile即可。但是,我也希望有一些可用的工具(如生成器或Rake任务)来启动用户。我想到的是创建迁移文件,模型,控制器或视图的选项(如果需要,可以选择整个九码)。

所以,这就是我不知道自己是否应该追求插件或引擎路线的地方。我阅读了Jordan West关于创建引擎的系列文章,我非常喜欢这个想法,但我不确定这是否适合我。

所以,如果你已经阅读了这篇文章并且我没有把你弄糊涂,我可以使用一些指导:)

由于

1 个答案:

答案 0 :(得分:0)

让我们部分回答你的问题。

第一部分

Ruby的灵活性意味着您可以非常轻松地在所有模型中共享代码。他们是否会扩展任何类别的课程?如果是,只需将方法添加到父对象,如下所示:

class SOAPModel
  def request(action, params)
    # Request code goes in here
  end
end

然后,这只是在各自模型中调用request的情况。或者,您可以使用SOAPModel.request静态访问此方法。这完全取决于你。否则,如果(出于某些奇怪的原因)您无法触摸父对象,则可以动态定义方法:

[User, Post, Message, Comment, File].each do |model|
  model.send :define_method, :request, proc { |action, params|
    # Request code goes in here
  }
end

这是Ruby,因此有很多方法可以做到。

第二部分

宝石可以灵活处理您的问题; Rails和Rake都很聪明,它们会查看你的gem(只要它在你的环境文件和Gemfile中)。创建generators目录和/name/name_generator.rb,其中名称是您的生成器的名称。正好运行rails g name,你就在那里。同样适用于Rake(tasks)。

我希望有所帮助!