source wrapper 的職責很簡單,他負責將外部資源的介面轉換給 Boxenn::Repository
使用。
在 Boxenn::Repository
總共用了三個 method :
find_by(hash)
Boxenn::Repositories::Factory
建成 entity。save(hash, hash)
destroy(hash)
範例的外部資源是使用 ActiveRecord 的 Model。
class Order < Boxenn::Repositories::SourceWrapper
param :source, default: -> { Models::Order } # 這邊的 order 是 active record 的 model
def find_by(primary_keys)
source.find_by(primary_keys)
end
def save(primary_keys, attributes)
record = source.find_or_initialize_by(primary_keys)
record.assign_attributes(attributes)
record.save!
end
def destroy(primary_keys)
record = source.find_by(primary_keys)
record.destroy!
end
end
下一篇我們就可以簡單地使用 Boxenn::Repository
來操作資料庫,另外會介紹 Boxenn::Repositories::Query
,用來收斂複雜的 sql query。