1 # -*- coding: utf-8 -*-
2 class PaymentPlugin < ActiveRecord::Base
4 ENABLE_LABEL = { "有効" => true, "無効" => false }
6 validates_presence_of :name, :model_name, :detail
8 def get_plugin_instance(disable = false)
9 return nil unless self.enable || disable
11 class_name = self.model_name.classify
12 if Object.const_defined?(class_name)
13 ret = Object.const_get(class_name).new
18 def self.enable_select
19 ENABLE_LABEL.collect{|key, value| [key, value]}
23 return if self.model_name.nil?
24 class_name = self.model_name.classify
25 unless Object.const_defined?(class_name)
26 errors.add(:model_name, "はインスタンス化できるクラス名を入力してください")
28 ret = Object.const_get(class_name).new
29 errors.add(:model_name, "はPaymentPluginBaseをMix-inしたクラスを指定してください") if ret.methods.grep(/next_step/).length < 1
32 unless Object.const_defined?(class_name)
33 errors.add("インスタンス化できないクラスを指定した場合は有効にできません", "")
35 obj = Object.const_get(class_name).new
36 if obj.methods.grep(/next_step/).length < 1
37 errors.add("PaymentPluginBaseをMix-inしたクラス以外の場合は有効にできません", "")
39 ret, reason = obj.check_enable
41 errors.add(reason, "")