module CoreExtensions module TicketPatch def custom_method "Extended #self.number" end end end Zammad::Plugin.after_load do Ticket.include(CoreExtensions::TicketPatch) end In config/routes.rb :
# test/integration/plugin_test.rb require 'test_helper' class MyPluginTest < ActiveSupport::TestCase setup do Zammad::Plugin.load end zammad plugins
Zammad::Plugin.register('my_plugin') do name 'My Plugin' version '1.0.0' author 'Your Name' license 'AGPL-3.0' description 'Extends Zammad with custom functionality' required_version '>= 5.0' load_order 10 end zammad plugins
test 'custom method works' do ticket = Ticket.first assert_equal "Extended #ticket.number", ticket.custom_method end end zammad plugins
cd /opt/zammad bundle exec rails db:migrate:plugins In lib/core_extensions/ticket_patch.rb :