move extra module to concerns, use extend ActiveSupport::Concern