Object DSL
This is a prototype oriented to use OOP and a functional programming approach by providing a DSL to decouple code logic from coding itself while enforcing good practices and providing:
- Design patterns
- Inmutability
- Dry off
- Decouple aspects from code ( background, paralelization )
Your code
class ScoreBoard
def initialize(game_object)
@game, @player = game_object.game, game_object.player
end
def publish
STDOUT.puts "Player: @player.name is playing: #{@game.game_type}"
end
end
module Game
def start(game_type)
@game = Struct.new(game_type: game_type, player: @player.name)
self
end
end
module Player
def with_player(player)
@player = Struct.new(name: player)
self
end
end
module Game
module Crud
def create
build(Game, Players)
.get(:game_object)
with(:args, :game_object)
.set(:new_game)
.get(:game_instance)
with(:game_object)
.instanciate(ScoreBoard)
.get(:score_board_object)
with(:score_board_object)
.call(:publish)
finish_with(:game_instance)
end
def delete(id)
end
private
def new_game(args, game_object)
game_object
.with_player(args[:player])
.start(args[:game_name])
end
end
end
module Game
class Service < Odsl:Dsl
include Crud
inmutable true
end
end
How to use call it.
Games::Service
.new(player: { name: 'alejandro' } , game: 'chez')
.run(:create)
Future development
- Run in background mode
- Run sevreral methods in paralell
```.run_in_parallel(:method_a, :method_b)```
- Make service objects subscribe to messaages
module Game
class Service < Odsl:Dsl
include Crud
subscribe 'start_game', to: :create
subscribe 'end_game', to: end_game
end
end