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 ، ومتتبعات المشكلات ، وغرف الدردشة والقوائم البريدية مدونة قواعد السلوك.