Seperation of concerns without meta-madness and namespace pollution.
Normal includes and extensions pollute the namespace and share private/protected.
With concern, everything stays in the Concern, can access the concerned and keep namespaced+private.
Install
As Gem: sudo gem install grosser-concern -s http://gems.github.com
Or as Rails plugin: script/plugins install git://github.com/grosser/concern.git
Usage
Normal usage: # a.rb require 'concern' class A concern 'a/acl'
def admin? ...
end
# a/acl.rb
class A::ACL < Concern
def can_access?(vault)
admin? and secret
end
private
def secrect ...
end
A.new.acl.can_access?(BankAccount)
Delegate usage:
class A
class Message
def write_message ...
def read_message ...
end
concern 'a/acl', :delegate => :true # all public
concern 'a/messages', :delegate => [:write_message]
end
A.new.can_access?(BankAccount)
A.new.write_message
A.new.message.read_message
Adding to concerned: class A class B < Concern def initialize super @something = {} end
def self.included(base)
base.class_eval do
test
end
end
end
def self.test
puts "it works"
end
concern 'a/b'
end
More examples can be found in spec/examples
Author
Michael Grosser
[email protected]
Hereby placed under public domain, do what you want, just do not hold me accountable...