Sha256: c7a435a79a81dc7a5ea36a7928ea534bdc12fe9ccfa2c6e1c9f01c12ac14a274

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

require 'observe_event'

# A simple "user" class
class User
  extend ObserveEvent

  def initialize(name)
    @elevated = false
    self.name = name
  end

  event :permissions_elevated # Define publisher/observable `permissions_elevated`

  def elevate_permissions
    @elevated = true

    permissions_elevated # Notify `permissions_elevated` subscribers/observers
  end

  event_accessor :name # Define publisher/observable `name_changed`, which notifies it's subscribers/observers
end

user = User.new('Jeff')

user.name_changed do |from, to| # Define subscriber
  puts 'User name changed'
  puts "From: #{from}"
  puts "To: #{to}"
  puts '-' * 80
  p user
  p self
  puts
end

user.permissions_elevated do # Define subscriber
  puts 'User permissions elevated'
  puts '-' * 80
  p user
  p self
  puts
end

user.name = 'Geoff' # Notify observers via `event_accessor :name`

user.elevate_permissions # Notify observers via `event :permissions_elevated`

__END__
Output:
$ be ruby ./examples/simple.rb
User name changed
From: Jeff
To: Geoff
--------------------------------------------------------------------------------
#<User:0x007fb60e19b8f8 @name="Geoff", @name_changed=[#<Proc:0x007fb60e19b6c8@./examples/simple.rb:23>], @permissions_elevated=[#<Proc:0x007fb60e19b5b0@./examples/simple.rb:33>]>
main

User permissions elevated
--------------------------------------------------------------------------------
#<User:0x007fb60e19b8f8 @name="Geoff", @name_changed=[#<Proc:0x007fb60e19b6c8@./examples/simple.rb:23>], @permissions_elevated=[#<Proc:0x007fb60e19b5b0@./examples/simple.rb:33>]>
main

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
observe_event-0.1.0 examples/user.rb