存储配置信息并从模块中访问它

问题描述:

我正在编写一个API(/lib文件夹中的一个模块)。在示例应用程序中,我将使用它来存储用户配置数据,如client_id存储配置信息并从模块中访问它

的lib/specific_api.rb

module SpecificApi 
#client_id and redirect_uri will be accessed from here 
end 

控制器/ sessions_controller.rb

class SessionsController < ApplicationController 
include SpecificApi 
CLIENT_ID = "dlfjksldkjfs" 
REDIRECT_URI = "http://127.0.0.1:3000/auth" 
end 
  1. 什么应该被用来存储这样的信息:类,全局变量,或常量?

  2. 如何从API(包含在类中的模块)访问这些变量?我无法从模块访问类变量或常量。全局变量的工作,但我不知道如果这是一个很好的方式来存储这样的信息。

Equalizer宝石回答了这个使用此模式:

class SomeClass 
    include Equalizer.new(:method, ...) 
end 

你可以达到同样具有:

class SessionsController < ApplicationController 
    include SpecificApi.new(
    client_id: 'dlfjksldkjfs', 
    redirect_uri: 'http://127.0.0.1:3000/auth') 
    ... 
end 

的模式是这样的:

class SpecificApi < Module 
    def initialize(args) 
    @client_id = args[:client_id] 
    @redirect_uri = args[:redirect_uri] 
    end 
end 

而且然后分机使用#define_method以及included回调。

+0

我很抱歉没有在开始时澄清这一点,但我只是希望这些模块方法在SessionsController类中作为私有方法使用,并从模块访问会话,而不将其作为参数传递给方法。 – Marcis