- Notifications
You must be signed in to change notification settings - Fork0
A very tiny DCI (Data, context and interaction) toolkit with true ruby implementation without the boiler plate.
License
RichOrElse/greedy-dci
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A Toolkit for rapid prototyping of interactors, use cases and service objects, using the DCI paradigm.
WARNING!This implementation will blow the method cache, slow down performance and consume excessive resources (hence the name), thereforeproduction usage is seriously discouraged. Instead, use of aWrapper Based alternative is highly recommended.
DCI (Data, context and interaction) is a new Role-Based Paradigm for specifying collaborating objects.Trygve Reenskaug is the originator best known for formulating the MVC (model–view–controller) pattern.
You can read more about DCI at the following links:
Add this line to your application's Gemfile:
gem'greedy-dci'
And then execute:
$ bundle
Or install it yourself as:
$ gem install greedy-dci
require'greedy/dci'# DataPurchase=Struct.new(:toy,:buyer)Deliver=Struct.new(:toy,:recipient,:purchase,:status)# BehaviorsmoduleBuyerdefbuy(toy)Purchase.newtoy,selfendendmoduleRecipientdefreceive(purchased)Deliver.newpurchased.toy,self,purchased,:pendingendend# ContextsPurchaseToy=Greedy.context{ |purchaser|usingpurchaser.asBuyerusingpurchaser.asRecipientdefcall(toy)purchased=purchaser.buytoypurchaser.receivepurchasedend}GiftToy=Greedy.context{ |gifter,giftee|usinggifter.asBuyerusinggiftee.asRecipientdefcall(toy)gift=gifter.buytoygiftee.receivegiftend}# Interactionsfinn_purchase_toy=PurchaseToy[purchaser:'Finn']finn_purchase_toy.call'Rusty sword'finn_purchase_toy.('Armor of Zeldron')finn_purchase_toy['The Enchiridion']['Card Wars','Ice Ninja Manual','Bacon'].each &GiftToy[gifter:'Jake',giftee:'Finn']
Returns call method as a Proc.
['Card Wars','Ice Ninja Manual','Bacon'].map &GiftToy[gifter:'Jake',giftee:'Finn']
Square brackets are alias for call method.
TransferMoney[from:source_account,to:destination_account][amount:100]
After checking out the repo, runbin/setup
to install dependencies. Then, runrake test
to run the tests. You can also runbin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, runbundle exec rake install
. To release a new version, update the version number inversion.rb
, and then runbundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the.gem
file torubygems.org.
Bug reports and pull requests are welcome on GitHub athttps://github.com/RichOrElse/greedy-dci.
The gem is available as open source under the terms of theMIT License.