Kwork adalah perpustakaan untuk membangun transaksi bisnis di Ruby yang dirancang untuk:
Kwork::Result
, Dry::Monads::Result
, Dry::Monads::Maybe
...).ROM
, ActiveRecord
...). Tambahkan baris ini ke gemfile aplikasi Anda:
gem 'kwork' , github : 'waiting-for-dev/kwork'
Dan kemudian mengeksekusi:
$ bundle install
Menggunakan dry-auto_inject
& dry-monads
.
require "kwork"
class CheckOutOrder
include Kwork [ adapter : :result ]
include Deps [ :update_line_items , :update_order , :calculate_best_prices , :enqueue_order_completed_email ]
def call ( order_id , attrs )
attrs = step validate ( attrs )
line_items = step update_line_items . ( order_id , attrs [ :line_items ] )
order = step update_order . ( order_id , attrs . except ( :line_items ) )
step calculate_best_prices . ( order : , line_items : )
step enqueue_order_completed_email . ( order )
success ( order )
end
private
def validate ( attrs )
# ...
end
end
include Dry :: Monads [ :result ]
case CheckoutOrder . new
in Success [ message ]
puts message
in Failure [ error ]
puts error
end
Anda dapat memanfaatkan transaksi yang dapat ditransaksikan untuk menggunakan pola kereta api secara elegan untuk transformasi data atau seluruh alur kerja transaksional. Untuk saat ini, ini hanya berfungsi dengan Dry::Monads::Result
Adaptor:
class CreateUser
include Kwork [ adapter : :result ]
include Deps [ "user_repo" , "validate_user" ]
include Dry :: Monads [ :result ]
DEFAULT_USER_ATTRS = {
country : :us ,
currency : :usd
}
def call ( user_attrs )
user = pipe user_attrs ,
merge ( DEFAULT_USER_ATTRS ) ,
method ( :validate_user )
step create_user ( user )
end
private
def create_user ( user )
Success ( user_repo . create ( user ) )
end
end
Lebih sering daripada tidak, transaksi bisnis perlu dibungkus dalam transaksi database. Untuk mendukung kasus penggunaan ini, KWOW memberi Anda kemampuan untuk memperpanjang panggilan balik transaksi sehingga Anda dapat membungkusnya dengan kode Anda sendiri. Beberapa ekstensi dikirim secara default, tetapi Anda dapat dengan mudah membangun sendiri.
Anda perlu menambahkan ROM ke Gemfile
Anda untuk menggunakannya. Ketika ekstensi ini digunakan, transaksi KWORK dibungkus dalam transaksi database, yang digulung kembali dalam hal mengembalikan kegagalan.
require "kwork"
require "kwork/extensions/rom"
rom = # ROM container
class AddUser
include Kwork [
extension : Kwork :: Extensions :: ROM [ rom , :default ] # :default is the name of the gateway
]
# ...
end
Pada aplikasi Rails, Anda dapat menggunakan Extension Activerecord. Transaksi KWOW mentah akan dibungkus dalam transaksi database, dan itu akan digulung kembali jika terjadi kembali kegagalan.
require "kwork"
require "kwork/extensions/active_record"
class AddUser
include Kwork [
extension : Kwork :: Extensions :: ActiveRecord
]
# ...
end
Ekstensi khusus hanyalah segala sesuatu yang menanggapi #call
menerima panggilan balik transaksi KWOW. Anda hanya perlu memastikan bahwa Anda menanggapi hasil pelaksanaan panggilan balik itu. Mempertimbangkan bahwa panggilan balik akan mengembalikan instance dari Kwork::Result
, terlepas dari adaptor yang digunakan. Itu memastikan operabilitas penuh dengan jenis hasil apa pun.
require "kwork"
MyExtension = lambda do | callback |
callback . ( ) . tap do | result |
do_something if result . success?
end
end
class AddUser
include Kwork [
extension : MyExtension
]
# ...
end
Setelah memeriksa repo, jalankan bin/setup
untuk menginstal dependensi. Kemudian, jalankan rake spec
untuk menjalankan tes. Anda juga dapat menjalankan bin/console
untuk prompt interaktif yang akan memungkinkan Anda untuk bereksperimen.
Untuk menginstal permata ini ke mesin lokal Anda, jalankan bundle exec rake install
. Untuk merilis versi baru, perbarui nomor versi di version.rb
, dan kemudian jalankan bundle exec rake release
, yang akan membuat tag git untuk versi, Push Git Commits dan Tag yang dibuat, dan tekan file .gem
ke RubyGems. org.
Laporan bug dan permintaan tarik dipersilakan di GitHub di https://github.com/htusernameace/kwork. Proyek ini dimaksudkan untuk menjadi ruang yang aman dan ramah untuk kolaborasi, dan kontributor diharapkan untuk mematuhi kode etik.
Permata tersedia sebagai open source di bawah ketentuan lisensi MIT.
Semua orang yang berinteraksi dalam basis kode proyek KWork, pelacak masalah, ruang obrolan dan milis diharapkan mengikuti kode etik.