Ruby on rails 设计建议:Gemify ActiveResource子类

Ruby on rails 设计建议:Gemify ActiveResource子类,ruby-on-rails,activeresource,Ruby On Rails,Activeresource,我被要求在我们的一个Rails应用程序中用许多ActiveResource子类构建一个gem 困难在于self.site调用在Rails环境文件中使用一个常量集,以便开发、测试和生产指向不同的网站。将我的新gem添加到gem文件后,我发现应用程序在加载环境文件之前加载gem,因此我的ActiveResource模型破坏了应用程序 我该怎么办 规范:Rails 3.2.3、Ruby 1.9.3我最终做的是覆盖self.site、self.format和self.connection,让他们只在第一

我被要求在我们的一个Rails应用程序中用许多ActiveResource子类构建一个gem

困难在于self.site调用在Rails环境文件中使用一个常量集,以便开发、测试和生产指向不同的网站。将我的新gem添加到gem文件后,我发现应用程序在加载环境文件之前加载gem,因此我的ActiveResource模型破坏了应用程序

我该怎么办


规范:Rails 3.2.3、Ruby 1.9.3

我最终做的是覆盖self.site、self.format和self.connection,让他们只在第一次调用方法时查找环境常量:

module MyActiveResource

    # A flag to indicate whether the environment variable has already been sought
    attr_accessor :active_record_fields_set

    # Set site & format if not set
    def connection(refresh=false)
        set_my_active_record_fields unless active_record_fields_set
        super(refresh)
    end

    # Set site & format if not set
    def site
        set_my_active_record_fields unless active_record_fields_set
        super
    end

    # Set site & format if not set
    def format
        set_my_active_record_fields unless active_record_fields_set
        super
    end

    # Set site & format
    def set_my_active_record_fields
        self.active_record_fields_set = true
        self.site = MY_CONSTANT
        self.format = ActiveResource::Formats::XmlFormat
    end

end
然后在从ActiveResource::Base派生的类中扩展MyActiveResource