我有一個經典的西納特拉應用:紅寶石/西納特拉 - 使用助手*類,還可以消耗西納特拉設置
module Tds
class Application < Sinatra:: Application
set :persons, []
end
end
我所有的航線被分解成在風格上面的控制器。
我正在使用sinatra-websockets構建一個websockets應用程序,所以我想使用一些自行開發的對象來幫助我管理連接狀態。我可能要一個輔助類是這樣的:
class Person
attr_accessor: :favorite_color, :name, :etc
end
我想保存我的人在西納特拉設置陣列:
get '/' do
person = Person.new(init_data)
settings.persons << person
erb :whatev
end
但我想Person類能夠訪問sinatra設置對象,所以它可以做一些自我維護。也許是這樣的:
get '/quit' do
person.delete!
end
這將做到這一點:
class Person
#....
def delete!
settings.persons.delete_if{|p| p == self}
end
end
我敢肯定我的僞代碼是非常接近實際的代碼,允許有語法問題,或記錯關鍵字。
我一直存在的問題是名稱空間問題 - 要麼我不明白將幫助類放在哪裏(我必須將它們放在模塊Tds中並將它們包含在某處?)或者Sinatra不支持類作爲幫手?或者我根本不使用幫助器?)
命名空間問題後,我仍然有範圍問題。無論我嘗試過什麼,即使我可以找出命名空間問題(並且我不記得我是如何做的),我的幫助器類也無法訪問Settings對象。
我很確定我只是不習慣西納特拉會議。任何指導給我?
我有點困惑,如何存儲使用設置的人員可以工作。也許我有點愚蠢。每個用戶如何從中獲得相同的價值,除非它存儲在Sinatra以外的某個地方? –
建議不要讓您的Person類取決於Sinatra。這會讓測試變得更加困難,不是嗎? IMO依賴注入是你的朋友 - 當然這會讓你的問題消失... –