class MrDarcy::Role
Attributes
name[RW]
options[RW]
Public Class Methods
new(name, opts={})
click to toggle source
# File lib/mr_darcy/role.rb, line 5 def initialize name, opts={}, &block self.name = name self.options = opts @module = Module.new(&block) end
Public Instance Methods
clean(player)
click to toggle source
# File lib/mr_darcy/role.rb, line 21 def clean player clean_singleton_methods player unless jruby? end
pollute(player)
click to toggle source
# File lib/mr_darcy/role.rb, line 11 def pollute player guard_against_false_players player if jruby? pollute_with_module_extension player else pollute_with_singleton_methods player end end
Private Instance Methods
clean_singleton_methods(player)
click to toggle source
# File lib/mr_darcy/role.rb, line 59 def clean_singleton_methods player @module.instance_methods.each do |method_name| player.singleton_class.send :remove_method, method_name if player.respond_to? method_name end end
guard_against_false_players(player)
click to toggle source
# File lib/mr_darcy/role.rb, line 31 def guard_against_false_players player options.each do |test_type, values| case test_type when :must_respond_to Array(values).each do |method_name| raise ArgumentError, "player must implement #{method_name}" unless player.respond_to? method_name end when :must_not_respond_to Array(values).each do |method_name| raise ArgumentError, "player must not implement #{method_name}" if player.respond_to? method_name end else raise ArgumentError, "unknown restriction #{test_type}" end end end
jruby?()
click to toggle source
# File lib/mr_darcy/role.rb, line 27 def jruby? RUBY_ENGINE == 'jruby' end
pollute_with_module_extension(player)
click to toggle source
# File lib/mr_darcy/role.rb, line 48 def pollute_with_module_extension player player.send :extend, @module end
pollute_with_singleton_methods(player)
click to toggle source
# File lib/mr_darcy/role.rb, line 52 def pollute_with_singleton_methods player @module.instance_methods.each do |method_name| implementation = @module.instance_method method_name player.define_singleton_method method_name, implementation end end