# frozen_string_literal: true module ActionMan module Model extend ActiveSupport::Concern module ClassMethods def action(action_name, class_name=nil) define_method(action_name) do |params| (class_name || self.class.action_class(action_name)).constantize.new(self).run(params) end define_method("#{action_name}?") do (class_name || self.class.action_class(action_name)).constantize.new(self).executable? end end def action_class(action_name) "#{name.pluralize}::#{action_name.to_s.camelcase}Action" end end end end