Nyanko

       _ ∧ ∧___
     /(*゚ー゚)  /\  Nyanko is a Rails extension framework,
  /| ̄ ∪∪  ̄|\/   which is deeply inspired from Chanko
    |         |/     and has same API and clean implementation as Chanko.
      ̄ ̄ ̄ ̄ ̄         https://github.com/cookpad/chanko

Requirements

  • Ruby >= 1.8.7
  • Rails >= 3.0.10

Install

$ gem install nyanko

Usage

Gemfile

# Gemfile
gem "nyanko"

Invoke

class EntriesController < ApplicationController
  unit_action :entry_deletion, :destroy

  def index
    invoke(:entry_deletion, :index) do
      @entries = Entry.all
    end
  end
end

Unit

# app/units/entry_deletion/entry_deletion.rb
module EntryDeletion
  include Nyanko::Unit

  active_if { Rails.env.development? }

  scope(:view) do
    function(:delete_link) do
      render "/delete_link", :entry => entry if entry.persisted?
    end
  end

  scope(:controller) do
    function(:destroy) do
      entry = Entry.find(params[:id])
      entry.unit.soft_delete
      redirect_to entries_path
    end

    function(:index) do
      @entries = Entry.unit.active
    end
  end

  models do
    expand(:Entry) do
      scope :active, lambda { where(:deleted_at => nil) }

      def soft_delete
        update_attributes(:deleted_at => Time.now)
      end
    end
  end

  helpers do
    def link_to_deletion(entry)
      link_to "Delete", entry, :method => :delete
    end
  end
end
-# app/units/entry_deletion/views/_delete_link.html.slim
= unit.link_to_deletion(entry)

Example App

There is an example rails application for Nyanko in spec/dummy directory.

$ git clone [email protected]:r7kamura/nyanko.git
$ cd nyanko/spec/dummy
$ rails s

Todo

  • Test macros
  • Generator
  • Documentation
  • Backward compatibility