#!/usr/bin/env ruby require "bundler/setup" require "usable" # You can add fixtures and/or initialization code here to make experimenting # with your gem easier. You can also use a different console, if you like. # (If you use this, don't forget to add pry to your Gemfile!) # require "pry" # Pry.start module VersionMixin def save_version "Saving up to #{self.class.usable_config.max_versions} versions to #{self.class.usable_config.table_name}" end def destroy_version "Deleting versions from #{self.class.usable_config.table_name}" end end module Mixin def name "defined by Mixin" end def from_mixin "always here" end # @description Usable will apply the :only to just the methods defined by this module module UsableSpec def from_spec "can be excluded" end def name "defined by UsableSpec" end end end class Model extend Usable usable VersionMixin, only: :save_version do |config| config.max_versions = 10 config.table_name = 'custom_versions' end def save self.class.usable_method(self, :save_version).call end end module PersistenceOverride def save 'nope' end end class Example extend Usable usable Mixin usable VersionMixin, max_versions: 10 end Model.usable PersistenceOverride, method: 'prepend' require "irb" IRB.start