Skip to content

Service #2

@blackchestnut

Description

@blackchestnut

Service

# lib/service.rb
module Service
  extend ActiveSupport::Concern

  included do
    def self.call(*args)
      new(*args).call
    end
  end
end

With Attributes

# Gemfile
gem 'virtus'

# lib/attributable_service.rb
module AttributableService
  extend ActiveSupport::Concern

  included do
    include Service
    include Virtus.model
  end
end

Using

module Users
  class Create
    include AttributableService

    attribute :params, Hash
    attribute :password, String

    def call
      user.password = password
      user.save

      user
    end

  private

    def user
      @user ||= User.new(params)
    end
end
Users::Create.call(params: params, password: 'asdf')

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions