Skip to content

A simple set of AOP filters for Ruby classes: before, after and around

Notifications You must be signed in to change notification settings

davesims/simple-aop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 

Repository files navigation

A simple AOP framework for Ruby classes.

Originally written to eliminate code duplication like error trapping and logging from a non-rails Ruby application I was working on. I figured it might be useful to others in a non-rails context like Sinatra, who need something lightweight with few dependencies.

SimpleAOP is obviously inspired by Rails controller filters, but much less powerful at this point. Right now only works with instance methods. Now handles nested around filters.

SimpleAOP was cribbed and adapted from bits of DataMapper’s callbacks/filters and this StackOverflow comment.

Examples

class AOPClass 
  include SimpleAOP

  before :before_method, :before_filter
  after :after_method, :after_filter

  around :around_method, :around_filter

  around :multiple_around, :around_one
  around :multiple_around, :around_two

  def before_method
    puts "before method"
  end

  def after_method
    puts "after method"
  end

  def before_filter
    puts "before filter"
  end

  def after_filter
    puts "after filter"
  end

  def around_method
    puts "around method"
  end

  def around_filter
    puts "start around"
    yield
    puts "end around"
  end

  def multiple_around
    puts "multi-around"
  end

  def around_one
    puts "start around one"
    yield
    puts "end around one"
  end

  def around_two
    puts "start around two"
    yield
    puts "end around two"
  end
end

aop = AOPClass.new

aop.before_method 
-> before filter
-> before method

aop.after_method
-> after method
-> after filter

aop.around_method
-> start around
-> around method
-> end around

aop.multiple_around
-> start around one
-> start around two
-> multi-around
-> end around two
-> end around one

You can also pass arrays of methods to be filtered:

before [:test_one, :test_two, :test_three], :before_filter
after [:test_one, :test_two, :test_three], :after_filter
around [:test_one, :test_two], :around_filter

About

A simple set of AOP filters for Ruby classes: before, after and around

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages