Skip to content
Simple DCI
Ruby
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
test
.gitignore
.simplecov
.travis.yml
Gemfile
LICENSE
README.md
Rakefile
neo-dci.gemspec

README.md

Neo::DCI

Simple DCI (Data Context Interaction). Includes Data, Roles and Context.

Travis Gem Version Code Climate Test Coverage Inline docs

Gem | Source | Documentation

Installation

Add this line to your application's Gemfile:

gem 'neo-dci'

And then execute:

$ bundle

Or install it yourself as:

$ gem install neo-dci

You can generate base classes for your roles and contexts with

$ rake neo-dci:setup

Usage

Data

class User < ActiveRecord::Base
  include Neo::DCI::Data

  attr_accessible
end

Context

class Context < Neo::DCI::Context
end

class RenameUserContext < Context
  # Define callbacks called inside a context.
  callbacks :success, :failure

  def initialize(user_id, new_name)
    @user     = User.find(user_id)
    @new_name = new_name
  end

  def call
    @user.role_as(Renamer)
    if @user.rename_to(@new_name)
      callback.call :success, @new_name
    else
      callback.call :failure, "renaming failed"
    end
  end
end

Interaction (Role)

module Renamer
  extend Neo::DCI::Role

  def rename_to(new_name)
    self.name = new_name
    save
  end
end

Rails Controller

class UsersController < ApplicationController
  def rename
    RenameUserContext.call(current_user.id, params[:name]) do |callback|
      callback.on :success do |new_name|
        redirect_to users_path, :notice => "Renamed successfully to #{new_name}"
      end
      callback.on :failure do |error_message|
        render :alert => "Renaming failed: #{error_message}!"
      end
    end
  end
end

Contributing

  1. Fork it ( https://github.com/neopoly/neo-dci/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
Something went wrong with that request. Please try again.