author(s) | |
---|---|
|
Tüm kiracılarda ortak olarak kullanılan lojiği barındıran modül.
Aktif kiracı aşağıdaki olay sırasıyla yüklenir. Örneklendirme Nokul::Tenant::OMU
kiracısı üzerinden yapılmıştır.
-
NOKUL_TENANT
ortam değişkeni ayarlanır. Geçerli değerplugins/tenant
dizini altındaki bir dizin adı (common
dışında) olmalıdır. ÖrneğinNOKUL_TENANT=omu
iseplugins/tenant/omu
dizini hedef alınmıştır. -
config/application
yapılandırmasındaplugins/tenant/common/lib/nokul/tenant.rb
dosyasında tanımlıNokul::Tenant.load
çağrılır. -
Nokul::Tenant.load
Tenant adınıplugins/tenant
altındaki ilgili Gem ile eşleştirerek Gem'irequire
ile yükler; örneğinplugins/tenant/omu
. -
Yüklenen Gem'de
lib/nokul/tenant/omu/engine.rb
dosyasında tanımlıNokul::Tenant::OMU < Rails::Engine
sınıfıplugins/tenant/common/lib/nokul/tenant/engine.rb
dosyasında tanımlıNokul::Tenant::Engine
modülünü katıştırır.class Nokul::Tenant::KİRACI < Rails::Engine include Nokul::Tenant::Engine ... end
-
Nokul::Tenant::Engine
birActiveSupport::Concern
modülüdür. Modülde tanımlıincluded
hook ileplugins/tenant/common/lib/nokul/tenant.rb
dosyasındakiNokul::Tenant.initialize
metodu çağrılarak, metoda aktif Tenant sınıf adı geçirilir.Nokul::Tenant.initialize(Nokul::Tenant::OMU)
-
Nokul::Tenant.initialize
kendisine geçirilen aktif Tenant sınıfı bilgisini kullanarakNokul::Tenant.engine
atamasını yapar.Nokul::Tenant.engine = Nokul::Tenant::OMU.instance
-
Artık aktif Tenant atandığından
plugins/tenant/omu/config/tenant.yml
dosyasındaki ana yapılandırma yüklenebilir.Nokul::Tenant.configuration = Nokul::Tenant.engine.deep_config_for :tenant
Tüm Nokul::Tenant API metodlarını plugins/tenant/common/lib/nokul/tenant/api.rb
dosyasında bulabilirsiniz.
-
Nokul::Tenant.name
: Aktif Tenant adını döner.Örnek:
Nokul::Tenant.name #=> 'omu'
-
Nokul::Tenant.engine
: Aktif Tenant nesnesini döner.Rails::Engine
sınıfından miras alan bu nesneRuby.application
ana uygulama nesnesiyle benzer bir işleve sahiptir.Rails::Engine
sınıfındaki bazı metodları çalıştırmak için nadir durumlarda kullanılır. Çoğu durumda bu nesneyi kullanmak yerine aşağıdaki sarmalayıcı metodları kullanmak yeterlidir. -
Nokul::Tenant.configuration
: Aktif Tenant yapılandırması.Örnek:
Nokul::Tenant.configuration.name #=> 'Ondokuz Mayıs Üniversitesi'
-
Nokul::Tenant.root
: Aktif Tenant kök dizinini döner.Rails.root
ile benzer işlevde kullanılır.Nokul::Tenant.root #=> '/rails/root/plugins/tenant/omu'
-
Nokul::Tenant.deep_config_for(name)
: Aktif Tenant için verilenname
yapılandırmasının ilgili ortamda etkin bölümünü içi içeOpenStruct
nesnesi halinde döner.Örnek:
cd /rails/root/plugins/tenant/omu
$ cat config/foo.yml production: bar: baz: ok
Rails.env.production? #=> true foo_config = Nokul::Tenant.deep_config_for(:foo) foo_config.bar.baz #=> 'ok'
-
Nokul::Tenant.load(fallback: DEFAULT_TENANT)
:NOKUL_TENANT
ortam değişkenine bakarak aktif Tenantı yükler.Örnek:
Nokul::Tenant.load
-
Nokul::Tenant.units(predication = nil)
: Birleştirilmiş birimler kolleksiyonunu (src/all
kaynağından yükleyerek) döner. İsteğe bağlı olarak verilenpredication
argümanıyla dönülen kolleksiyonda filtreleme yapar.Örnek:
Nokul::Tenant.units #=> Tüm birleştirilmiş birimler Nokul::Tenant.units :administrative #=> Sadece idari birimler Nokul::Tenant.units :academic #=> Sadece akademik birimler
Kullanılabilecek
predication
seçenekleri içinplugins/tenant/common/lib/nokul/tenant/units/concerns/predicable.rb
dosyasına başvurun (method adlarındaki?
karakterini kaldırmayı unutmayın). -
Nokul::Tenant.unit_types(category = nil)
: Birleştirilmiş birimler bağlamında tüm tekil birim tiplerini döner. İsteğe bağlı olarak verilencategory
argümanıyla sadece ilgili kategorideki birim tiplerini döner.category
argümanıadminisitrative
veacademic
değerlerini alabilir.Örnek:
Nokul::Tenant.unit_types #=> Tüm birim tipleri Nokul::Tenant.unit_types :administrative #=> Sadece idari birim tipleri Nokul::Tenant.unit_types :academic #=> Sadece akademik birim tipleri