OSDN Git Service

プラグイン画面の遷移を修正
[elecoma/elecoma.git] / app / models / payment_plugin.rb
1 # -*- coding: utf-8 -*-
2 class PaymentPlugin < ActiveRecord::Base
3   
4   ENABLE_LABEL = { "有効" => true, "無効" => false }
5
6   validates_presence_of :name, :model_name, :detail
7
8   def get_plugin_instance(disable = false)
9     return nil unless self.enable || disable
10     ret = nil
11     class_name = self.model_name.classify
12     if Object.const_defined?(class_name)
13       ret = Object.const_get(class_name).new
14     end
15     return ret
16   end
17
18   def self.enable_select
19     ENABLE_LABEL.collect{|key, value| [key, value]}
20   end
21
22   def validate
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, "はインスタンス化できるクラス名を入力してください")
27     else
28       ret = Object.const_get(class_name).new
29       errors.add(:model_name, "はPaymentPluginBaseをMix-inしたクラスを指定してください") if ret.methods.grep(/next_step/).length < 1
30     end
31     if self.enable
32       unless Object.const_defined?(class_name)
33         errors.add("インスタンス化できないクラスを指定した場合は有効にできません", "")
34       else
35         obj = Object.const_get(class_name).new
36         if obj.methods.grep(/next_step/).length < 1
37           errors.add("PaymentPluginBaseをMix-inしたクラス以外の場合は有効にできません", "")
38         else
39           ret, reason = obj.check_enable
40           unless ret
41             errors.add(reason, "")
42           end
43         end
44       end
45     end
46   end
47
48 end