module OpenHouse::Acceptor
Public Instance Methods
accept_visitor(visitor, *args)
click to toggle source
# File lib/openhouse/acceptor.rb, line 3 def accept_visitor(visitor, *args) visitor.public_send("visit_#{own_acceptor_type_id}", self, *args) end
accept_visitor_in_ancestry(visitor, *args)
click to toggle source
# File lib/openhouse/acceptor.rb, line 7 def accept_visitor_in_ancestry(visitor, *args) accept_visitor_in_modules(visitor, self.class.ancestors, *args) end
Private Instance Methods
accept_visitor_in_modules(visitor, modules, *args)
click to toggle source
# File lib/openhouse/acceptor.rb, line 25 def accept_visitor_in_modules(visitor, modules, *args) modules.each do |modul| method_name_suffix = acceptor_type_id(modul) if visitor.respond_to?("visit_#{method_name_suffix}") return visitor.public_send("visit_#{method_name_suffix}", self, *args) end end error_message = "undefined method 'visit_[acceptor_type_id]' for #{visitor.class} for any of these modules: #{modules}" raise NoMethodError, error_message end
acceptor_type_id(modul)
click to toggle source
# File lib/openhouse/acceptor.rb, line 17 def acceptor_type_id(modul) if modul.const_defined?(:ACCEPTOR_TYPE_ID, false) modul::ACCEPTOR_TYPE_ID else OpenHouse.simple_inflector.underscored_demodulized(modul.name).to_sym end end
own_acceptor_type_id()
click to toggle source
# File lib/openhouse/acceptor.rb, line 13 def own_acceptor_type_id acceptor_type_id(self.class) end