Ruby and Rails Rules Engine Framework
More detailed documentation at www.r3ef.com
Installation Guide
1. Install the Gem
sudo gem install rules_engine
sudo gem install rspec cucumber
2. Create the Rails App
rails MyCoolNewApp
cd MyCoolNewApp
rm ./public/index.html
./script/generate rspec
./script/generate cucumber --rspec
./script/generate rules_engine
rake db:migrate
3. Setup the Rails Environments
./config/environment.rb
Rails::Initializer.run do |config|
...
config.gem 'rules_engine'
config.gem 'will_paginate'
config.gem 'acts_as_list'
...
config.active_record.observers = :re_workflow_activated_observer
...
end
RulesEngine::Discovery.discover!
./config/environments/production.rb
./config/environments/development.rb
RulesEngine::Cache.cache_store = :mem_cache_store, "localhost:11210"
# RulesEngine::Cache.cache_store = :memory_store
# RulesEngine::Cache.cache_store = :file_store, "/path/to/cache/directory"
# RulesEngine::Cache.cache_store = :drb_store, "druby://localhost:9192"
# RulesEngine::Cache.cache_store = :mem_cache_store, "localhost"
# RulesEngine::Cache.cache_store = MyOwnStore.new("parameter")
./config/environments/test.rb
./config/environments/cucumber.rb
config.gem "rspec", :version => '>=1.3.0', :lib => false
config.gem "rspec-rails", :version => '>=1.3.2', :lib => false
config.gem "faker", :version => '>=0.3.1', :lib => false
config.gem "machinist", :version => '>=1.0.6', :lib => false
config.gem 'rcov', :version => '>=0.9.8', :lib => false
config.gem 'remarkable_rails', :version => '>=3.1.13', :lib => false
require 'machinist/active_record'
require 'sham'
require 'faker'
require 'remarkable_rails'
4. Install the Required Gems
rake gems:install
rake gems:install RAILS_ENV=test
5. Add the Routes
./config/routes.rb
ActionController::Routing::Routes.draw do |map|
...
### remove map.root if already defined
map.root :controller => 're_workflows', :action => 'template'
### map.preview '/preview', :controller => 're_workflows', :action => 'template'
map.resources :re_workflows,
:collection => {:lookup => :get,
:activate_all => :put},
:member => {:change => :get,
:activate => :put,
:deactivate => :put,
:revert => :put} do |re_workflow|
re_workflow.resources :re_rules,
:controller => :re_workflow_rules,
:collection => {:help => :get, :error => :get},
:member => {:move_up => :put, :move_down => :put}
re_workflow.resources :re_processs,
:controller => :re_workflow_processs,
:only => [:index]
end
map.resources :re_processs, :only => [:index, :show]
...
end
6. Define the Access Levels
./app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
helper_method :rules_engine_reader?, :rules_engine_editor?
def rules_engine_reader?
# why cookies[:rules_engine_reader] ? It's a workaround for cucumber testing
return cookies[:rules_engine_reader].nil? ? true :
cookies[:rules_engine_reader].downcase == 'true'
end
def rules_engine_editor?
# why cookies[:rules_engine_editor] ? It's a workaround for cucumber testing
return cookies[:rules_engine_editor].nil? ? true :
cookies[:rules_engine_editor].downcase == 'true'
end
def rules_engine_reader_access_required
unless rules_engine_reader?
redirect_to(root_path)
flash[:success] = 'Rules Engine Access Denied.'
end
end
def rules_engine_editor_access_required
unless rules_engine_editor?
redirect_to(root_path)
flash[:success] = 'Rules Engine Editor Access Denied.'
end
end
7. Create a Simple Rule
./script/generate rules_engine simple my_simple_rule
8. Create a more Complex Rule
./script/generate rules_engine complex another_complex_rule
9. Run the Tests
rake spec
rake spec:rcov
rake cucumber
open coverage/index.html
10. Start the Server
./script/server
open http://localhost:3000/re_workflows
11. Create Workflows and Rules
Watch the demo at TODO