Last active
October 15, 2020 21:18
-
-
Save serradura/da4af04ec23064d5370bb8aa73ecfd9a to your computer and use it in GitHub Desktop.
u-case + u-observers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'bundler/inline' | |
gemfile do | |
source 'https://rubygems.org' | |
gem 'u-case' | |
gem 'u-observers' | |
end | |
class Person | |
include Micro::Observers | |
attr_reader :name | |
def initialize(name) | |
@name = name | |
end | |
def name=(new_name) | |
return unless observers.subject_changed(new_name != @name) | |
@name = new_name | |
observers.notify(:name_has_been_changed) | |
end | |
end | |
class PrintPersonName < Micro::Case | |
attributes :person, :number | |
def call! | |
puts("Person name: #{person.name}, number: #{number}") | |
Success() | |
end | |
end | |
person = Person.new('Rodrigo') | |
person.observers.on( | |
event: :name_has_been_changed, | |
call: PrintPersonName, | |
with: -> event { {person: event.subject, number: rand} } | |
) | |
person.name = 'Serradura' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'bundler/inline' | |
gemfile do | |
source 'https://rubygems.org' | |
gem 'u-case' | |
gem 'u-observers' | |
end | |
class Person | |
include Micro::Attributes.with(:initialize) | |
include Micro::Observers | |
attribute :name | |
def name=(new_name) | |
return unless observers.subject_changed(new_name != @name) | |
@name = new_name | |
observers.notify(:name_has_been_changed) | |
end | |
end | |
class PrintPersonName < Micro::Case | |
attributes :person, :number | |
def call! | |
puts("Person name: #{person.name}, number: #{number}") | |
Success() | |
end | |
end | |
person = Person.new(name: 'Rodrigo') | |
person.observers.on( | |
event: :name_has_been_changed, | |
call: PrintPersonName, | |
with: -> event { {person: event.subject, number: rand} } | |
) | |
person.name = 'Serradura' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment