Skip to content
This repository has been archived by the owner on Jun 16, 2021. It is now read-only.

Latest commit

 

History

History
85 lines (65 loc) · 2.01 KB

structure.md

File metadata and controls

85 lines (65 loc) · 2.01 KB
author(s)
Recai Oktaş (@roktas)

Structure

Bu modülümsü sınıf Struct sınıfına uygulanan ve pek çok olağan senaryoda fazladan kod yazmadan sonuç almanızı sağlayan basit bir sarmalayıcıdır. Sınıfın kendisi Module'den miras aldığından katıştırma ("mixin") yaparak kullanılıyor. Olağan kullanım senaryosu da zaten bu: hafif bir DSL üzerinden katıştırma yapmak.

Her biri aşağıdaki YAML yapısında anahtar, değer çiftlerinden oluşan bir veriyi göz önüne alalım:

name: Mühendislik Fakültesi
abbreviation: MÜHENDİSLİK
yoksis_id: 122183
unit_type_id: Fakülte

Bu veri üzerinde ilave metodlar da ekleyerek çalışmak isterseniz:

class Unit
  include Structure.of %i[
    name
    abbreviation
    yoksis_id
    unit_type_id
  ]

  def faculty?
    unit_type_id == 'Fakülte'
  end
end

unit = Unit.new(name: 'Mühendislik Fakültesi', abbreviation: 'MÜHENDİSLİK',
                yoksis_id: '122183', unit_type_id: 'Fakülte')

unit.name     #=> "Mühendislik Fakültesi"
unit.faculty? #=> true

Görüldüğü gibi yapılması gereken basitçe yeni bir sınıf oluşturup Structure.of DSL'ini kullanarak ilgili nitelikleri listelemek. Sınıfa isimleri veri nitelikleriyle çakışmamak kaydıyla istediğiniz isim ve sayıda metod ekleyebilirsiniz.

Nesne için initialize metodu yazmanız gerekmiyor, yazma olanağınız da yok. Ama nesne inşa edilirken initialize sürecinde yapmayı istediğiniz bir işlem varsa argüman almayan after_initialize metodunu kullanabilirsiniz.

class Unit
  class_attribute :units, default: []

  include Structure.of %i[
    name
    abbreviation
    yoksis_id
    unit_type_id
  ]

  def after_initialize
    self.class.units << name
  end

  def faculty?
    unit_type_id == 'Fakülte'
  end
end

Unit.units.size #=> 0

unit = Unit.new(name: 'Mühendislik Fakültesi', abbreviation: 'MÜHENDİSLİK',
                yoksis_id: '122183', unit_type_id: 'Fakülte')

Unit.units.size #=> 1