All attributes that the service should expect when called must be added using the
input method. If the service receives attributes that were not added via the
input method, it will return an error.
The use of the attributes included in the service is done through the
class UsersService::Create < ApplicationService::Base input :first_name, type: String input :middle_name, type: String input :last_name, type: String internal :full_name, type: String output :user, type: User make :assign_full_name make :create! def assign_full_name internals.full_name = [ inputs.first_name, inputs.middle_name, inputs.last_name ].join(" ") end def create! outputs.user = User.create!(full_name: internals.full_name) end end
You can find out more about options in the using options section.
Servactory has a set of ready-made helpers, and also allows you to add custom helpers for project purposes.
By "helper" we mean some shorthand spelling that, when used, expands into a specific option.
This helper is equivalent to the
required: false option.
class UsersService::Create < ApplicationService::Base input :first_name, type: String input :middle_name, :optional, type: String input :last_name, type: String # ... end
Custom helpers can be added using the
input_option_helpers method in
Such helpers can be based on existing options.
class PaymentsService::Create < ApplicationService::Base input :invoice_numbers, :must_be_6_characters, type: Array, consists_of: String # ... end
class PaymentsService::Create < ApplicationService::Base input :amount_cents, :to_money, as: :amount, type: Integer # ... end
Any input attribute can be accessed as a predicate method.
input :first_name, type: String # ... def something return unless inputs.user? # instead of `inputs.user.present?` # ... end