Kwork ist eine Bibliothek für den Aufbau von Geschäftstransaktionen in Ruby, das entwickelt wurde:
Kwork::Result
, Dry::Monads::Result
, Dry::Monads::Maybe
...).ROM
, ActiveRecord
...). Fügen Sie diese Zeile der GemFile Ihrer Anwendung hinzu:
gem 'kwork' , github : 'waiting-for-dev/kwork'
Und dann ausführen:
$ bundle install
Verwenden von 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
Sie können transaktivierbar nutzen, um das Eisenbahnmuster für die Datenumwandlung oder den gesamten Transaktions -Workflow elegant zu verwenden. Im Moment funktioniert es nur mit 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
In den meisten Fällen muss eine Geschäftstransaktion in eine Datenbanktransaktion eingepackt werden. Um diesen Anwendungsfall zu unterstützen, gibt Ihnen Kwork die Möglichkeit, den Transaktions -Rückruf zu erweitern, damit Sie ihn mit Ihrem eigenen Code einwickeln können. Ein paar Erweiterungen werden standardmäßig versendet, aber Sie können problemlos Ihre eigenen erstellen.
Sie müssen Ihrem Gemfile
ROM hinzufügen, um es zu verwenden. Wenn diese Erweiterung verwendet wird, ist die Kwork -Transaktion in eine Datenbanktransaktion abgeschlossen, die bei der Rückgabe eines Fehlers zurückgerollt wird.
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
Bei einer Rails -Anwendung können Sie die ActiveCord -Erweiterung verwenden. Die Raw Kwork -Transaktion wird in eine Datenbank -Transaktion abgeschlossen und wird bei der Rückgabe eines Fehlers zurückgerollt.
require "kwork"
require "kwork/extensions/active_record"
class AddUser
include Kwork [
extension : Kwork :: Extensions :: ActiveRecord
]
# ...
end
Benutzerdefinierte Erweiterungen sind einfach alles, was auf #call
reagiert und den KWWOR -Transaktions -Rückruf akzeptiert. Sie müssen nur sicherstellen, dass Sie auf das Ergebnis der Ausführung dieses Rückrufs antworten. Berücksichtigen Sie, dass der Rückruf eine Instanz von Kwork::Result
zurückgibt, unabhängig vom verwendeten Adapter. Dies gewährleistet die vollständige Funktionsfähigkeit bei jedem Ergebnistyp.
require "kwork"
MyExtension = lambda do | callback |
callback . ( ) . tap do | result |
do_something if result . success?
end
end
class AddUser
include Kwork [
extension : MyExtension
]
# ...
end
Führen Sie bin/setup
nach dem Auschecken des Repo aus, um Abhängigkeiten zu installieren. Führen Sie dann rake spec
aus, um die Tests auszuführen. Sie können auch bin/console
für eine interaktive Eingabeaufforderung ausführen, mit der Sie experimentieren können.
Um dieses Juwel auf Ihrem lokalen Computer zu installieren, führen Sie bundle exec rake install
aus. Um eine neue Version zu veröffentlichen, aktualisieren Sie die Versionsnummer in version.rb
und führen Sie bundle exec rake release
aus, die ein Git -Tag für die Version erstellt, Git Commits und das erstellte Tag drücken und die .gem
-Datei in Rubygems überschreiten. Org.
Fehlerberichte und Pull -Anfragen sind auf Github unter https://github.com/username weibs/kwork willkommen. Dieses Projekt soll ein sicherer, einladender Raum für die Zusammenarbeit sein, und die Mitwirkenden sollen sich an den Verhaltenskodex halten.
Das Edelstein ist unter den Bedingungen der MIT -Lizenz als Open Source erhältlich.
Jeder, der in den Codebasen, Ausgabeträgern, Chatrooms und Mailinglisten des Kwork -Projekts interagiert, wird voraussichtlich dem Verhaltenskodex folgen.