Sha256: d387da36c6e6d63222ba7563591296fd60e5396762a1cd5ddf979b447804f2d9

Contents?: true

Size: 1.92 KB

Versions: 2

Compression:

Stored size: 1.92 KB

Contents

# SimpleCommand

A simple, standardized way to build and use _Service Objects_ (aka _Commands_) in Ruby

## Requirements

* Ruby 2.0+

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'simple_command'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install simple_command

## Usage

Here's a basic example of a command that authenticates a user

```ruby
# define a command class
class AuthenticateUser
  # put SimpleCommand before the class' ancestors chain
  prepend SimpleCommand

  # optional, initialize the command with some arguments
  def initialize(user, password)
    @user = user
    @password = password
  end

  # mandatory: define a #perform method. its return value will be available
  #            through #result
  def perform
    if user = User.authenticate(@email, @password)
      return user
    else
      errors.add_error(authentication: I18n.t "authenticate_user.failure")
    end
    nil
  end
end
```

Then, in your controller:

```ruby
class SessionsController < ApplicationController
  def create
    # initialize and execute the command
    # NOTE: `.perform` is a shortcut for `.new(args).perform)`
    command = AuthenticateUser.perform(session_params[:user], session_params[:password])

    # check command outcome
    if command.success?
      # command#result will contain the user instance, if found
      session[:user_token] = command.result.secret_token
      redirect_to root_path
    else
      flash.now[:alert] = t(command.errors[:authentication])
      render :new
    end
  end

  private

  def session_params
    params.require(:session).permit(:email, :password)
  end
end
```

## Contributing

1. Fork it ( https://github.com/nebulab/simple_command/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
simple_command-0.0.7 README.md
simple_command-0.0.6 README.md