Service encapsulates an object which executes a bit of code in a loop that can be started or stopped and query whether it is running or not.
gem install service
examples/directory for more usage examples.
You can define an Object as a Service by subclassing
Service or by including
class ServiceA < Service end class ServiceB include Service::Base end
Serviceobject stores it's state in the
@_service_stateinstance variable as to be as unobtrusive as possible when integrating with your custom objects.
The next thing to do is to define an
#execute instance method on your object:
class MyService < Service def execute # ... end end
Service simply allows you to run your code that is within the
#execute instance method in four different ways:
- Once (
- Once, within a new Thread (
- Looping (
- Looping, within a new Thread (
#run instance method to call the
#execute instance method in a loop.
class MyService < Service def execute puts "Hello" end end MyService.new.run # => Hello # => Hello # => ...
#run! to call the
#execute instance method in a new Thread.
class MyService < Service def execute puts "Hello" end end thread = MyService.new.run! thread.join # => Hello # => Hello # => ...
#stop instance method break the run loop.
This will also kill the Thread it is running in, if running within a Thread.
class CountingService < Service def initialize @count = 0 end def execute puts @count sleep 1 @count += 1 end end service = CountingService.new service.run! # Run the #execute method in a loop within a new Thread sleep 5 service.stop
stopped? instance methods to determine the current state of
the Service instance.
class MyService < Service def execute sleep 10 end end service = MyService.new p service.running? # => false service.run! sleep 1 p service.running? # => true
Copyright © 2012 Ryan Scott Lewis email@example.com.
The MIT License (MIT) - See LICENSE for further details.