Skip to content

内部アトリビュート

internalメソッドでinternalプライベートアトリビュートを追加します。

使い方

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

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

カスタム

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

設定例

mustの例

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

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

  # ...
end

メソッド

メソッドonly

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

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

メソッドexcept

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

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

プレディケートメソッド

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

ruby
# ...

internal :full_name, type: String

# ...

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

  # ...
end