Skip to content

出力アトリビュート

outputメソッドですべての戻り値アトリビュートを追加します。これらはResultクラスを通じて利用できます。

使い方

outputs=/outputsメソッドでoutputアトリビュートの割り当てとアクセスを行います。

ruby
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

オプション

詳細はオプションの使い方を参照してください。

ヘルパー

Servactoryはプロジェクト用のカスタムヘルパーをサポートしています。ヘルパーは特定のオプションに展開される省略記法です。

カスタム

configurationoutput_option_helpersでカスタムヘルパーを追加します。ヘルパーは既存のオプションに基づいて作成できます。

設定例

mustの例

ruby
class PaymentsService::Create < ApplicationService::Base
  # ...

  output :invoice_numbers,
         :must_be_6_characters,
         type: Array,
         consists_of: String

  # ...
end

メソッド

メソッドonly

onlyメソッドでoutputsをフィルタリングします。指定されたアトリビュートを含むHashを返します。

ruby
outputs.full_name =
  outputs.only(:first_name, :middle_name, :last_name)
    .values
    .compact
    .join(" ")

メソッドexcept

exceptメソッドでoutputsをフィルタリングします。指定されたアトリビュートを除いたHashを返します。

ruby
outputs.full_name =
  outputs.except(:gender)
    .values
    .compact
    .join(" ")

プレディケートメソッド

任意のoutputアトリビュートをプレディケートメソッドとしてアクセスできます。

ruby
# ...

output :full_name, type: String

# ...

def something
  return unless outputs.full_name? # instead of `outputs.full_name.present?`

  # ...
end