2013-09-25 3 views
3
module Asterisk 
    class Client 
    include HTTParty 
    base_uri 'https://asterisk.dev/' 

    def initialize(session_key = nil) 
     @session_key = session_key 
    end 

    def get_session_key(login, password) 
     self.class.put('/api/auth', query: { login: login, password: password }) 
    end 

    def get_contacts 
     self.class.get("/api/#{@session_key}/contacts") 
    end 

    def get_contact(id) 
     self.class.get("/api/#{@session_key}/contact/#{id}") 
    end 

    def create_contact 
     self.class.put("/api/#{@session_key}/create") 
    end 

    def logout 
     self.class.delete("/api/#{@session_key}/logout") 
    end 
    end 
end 

Прямо сейчас он работает, как показано нижеКак рефакторировать обертку с помощью singleton для настройки сеанса?

session_key = Asterisk::Client.new.get_session_key('login', 'pass') 
client = Asterisk::Client.new(session_key) 
client.get_contacts 

Я хотел бы получить и установить ключ сеанса с помощью синглтон. Как это сделать?

+0

вопрос здесь ваш аргумент в Initialize, нужно ли это? может ли это быть перенесено другим методом? – apneadiving

+0

Да, я хотел бы сначала пропустить заданный ключ сеанса, просто настроить учетные данные '' login'' и '' password' в инициализации – tomekfranek

+0

, почему это? вам нужно изменить логин и пароль для каждого пользователя или это приложение широко? – apneadiving

ответ

2
module Asterisk 
    class Client 
    include HTTParty 
    include Singleton 
    base_uri 'https://asterisk.dev/' 

    attr_reader :last_session_update 

    private 

    def session_key 
     if [email protected]_key || session_refresh_needed? 
     @session_key = set_session_key 
     @last_session_update = Time.now 
     else 
     @session_key 
     end 
    end 

    def set_session_key 
     self.class.put('/api/auth', query: { login: login, password: password }) 
    end 

    def password 
    #the way you get pass 
    end 

    def login 
    #the way you get login (ENV...) 
    end 

    def session_refresh_needed? 
     return true unless last_session_update 
     (Time.now - last_session_update) > 30.minute 
    end 
    end 
end 

Включает в себя вашу проблему с обновлением 30 минут.

Позовите Asterisk::Client.instance

+1

+1 приветствуются, когда много времени, проведенных с ответом – apneadiving

+0

, конечно, спасибо за этот ответ – tomekfranek

+0

Как должен выглядеть мой метод инициализации здесь? '@session = set_session' – tomekfranek

Смежные вопросы