Simple module, to tidy service objects.
You can read our guide how we think service objects should works The best service object (for us)
class Service
def call
puts 'hello'
end
end
Service.new.call
To simplify this ServiceObjecter provides some shortcuts
class Service
include ServiceObjecter
def call
puts 'hello'
end
end
Service.call
class Service
include ServiceObjecter
def call
puts 'hello'
success('some value')
end
end
service = Service.call
service.success? #=> true
service.failure? #=> false
service.value #=> 'some value'
With ServiceObjecter You can end call in many ways
success(:optional_value)
failed(:optional_value)
Result.new(
true, #=> success?
'optional_value'
)
class Service
include ServiceObjecter
def call(params) #=> instead of passing params to #new, do it in #call
a = params[:a]
# do something important
Result.new(true, a)# return result object
end
end
params = {a: 1}
service = Service.call(params)
if service.success?
puts service.value
end
Install ChainIt
to get more power of service objects.
Read more ChainIt gem
With ServiceObjecter
you get shortcuts.
class Service
include ServiceObjecter
def call(params)
chain { some method }
chain { other method }
result
end
end
Bug reports and pull requests are welcome on GitHub at https://github.com/tier-tools/service_objecter.
The gem is available as open source under the terms of the MIT License.