Kwork هي مكتبة لبناء معاملات الأعمال في روبي مصممة ل:
Kwork::Result
، Dry::Monads::Result
، Dry::Monads::Maybe
...).ROM
، ActiveRecord
...). أضف هذا السطر إلى Gemfile في التطبيق الخاص بك:
gem 'kwork' , github : 'waiting-for-dev/kwork'
ثم تنفيذ:
$ bundle install
باستخدام 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
يمكنك الاستفادة من المعاملات لاستخدام نمط السكك الحديدية بأناقة لتحويل البيانات أو سير عمل المعاملات بأكملها. في الوقت الحالي ، يعمل فقط مع Dry::Monads::Result
:
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
في أكثر الأحيان ، يجب أن يتم لف معاملة العمل ضمن معاملة قاعدة البيانات. لدعم حالة الاستخدام هذه ، يمنحك Kwork القدرة على توسيع رد اتصال المعاملة حتى تتمكن من لفه بالرمز الخاص بك. يتم شحن بضع امتدادات افتراضيًا ، ولكن يمكنك بسهولة بناء خاص بك.
تحتاج إلى إضافة ROM إلى Gemfile
الخاص بك لاستخدامه. عند استخدام هذا الامتداد ، يتم لف معاملة Kwork داخل معاملة قاعدة البيانات ، والتي يتم ترحيلها مرة أخرى في حالة إرجاع الفشل.
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
على تطبيق Rails ، يمكنك استخدام امتداد ActivereCord. سيتم لف معاملة kwork الخام داخل معاملة قاعدة البيانات ، وسيتم ترحيلها مرة أخرى في حالة إرجاع الفشل.
require "kwork"
require "kwork/extensions/active_record"
class AddUser
include Kwork [
extension : Kwork :: Extensions :: ActiveRecord
]
# ...
end
الامتدادات المخصصة هي مجرد أي شيء يستجيب لـ #call
قبول رد اتصال معاملة Kwork. ما عليك سوى التأكد من استجابة نتيجة تنفيذ هذا الاتصال. خذ في الاعتبار أن رد الاتصال سيعيد مثيل Kwork::Result
، بغض النظر عن المحول المستخدم. الذي يضمن قابلية التشغيل الكاملة مع أي نوع نتيجة.
require "kwork"
MyExtension = lambda do | callback |
callback . ( ) . tap do | result |
do_something if result . success?
end
end
class AddUser
include Kwork [
extension : MyExtension
]
# ...
end
بعد التحقق من الريبو ، قم بتشغيل bin/setup
لتثبيت التبعيات. ثم ، قم بتشغيل rake spec
لتشغيل الاختبارات. يمكنك أيضًا تشغيل bin/console
للحصول على مطالبة تفاعلية تتيح لك التجربة.
لتثبيت هذه الأحجار الكريمة على جهازك المحلي ، قم بتشغيل bundle exec rake install
. لإصدار إصدار جديد ، قم بتحديث رقم الإصدار في version.rb
، ثم قم بتشغيل bundle exec rake release
، والذي سيقوم بإنشاء علامة GIT للإصدار ، و Push Git Commits والعلامة التي تم إنشاؤها ، ودفع ملف .gem
إلى Rubygems. ORG.
يتم الترحيب بتقارير الأخطاء وطلبات السحب على Github على https://github.com/ BudapUsername/kwork. يهدف هذا المشروع إلى أن يكون مساحة آمنة ومرحبة للتعاون ، ومن المتوقع أن يلتزم المساهمون بمدونة قواعد السلوك.
الجوهرة متوفرة كمصدر مفتوح بموجب شروط ترخيص معهد ماساتشوستس للتكنولوجيا.
من المتوقع أن يتبع كل من يتفاعل في قواعد الكود الخاصة بمشروع Kwork ، ومتتبعات المشكلات ، وغرف الدردشة والقوائم البريدية مدونة قواعد السلوك.