Skip to content

Instantly share code, notes, and snippets.

@serradura
Last active October 15, 2020 21:18
Show Gist options
  • Save serradura/da4af04ec23064d5370bb8aa73ecfd9a to your computer and use it in GitHub Desktop.
Save serradura/da4af04ec23064d5370bb8aa73ecfd9a to your computer and use it in GitHub Desktop.
u-case + u-observers
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'
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