ActiveShippingUPSクラスでモンキーパッチを適用しようとしています。
クラスレベルのメソッド(で始まる.self
)を追加する必要があるので、これが私がやろうとしていることです:
module ActiveMerchant
module Shipping
class UPS < Carrier
def self.process_request(receiver, sender, packages, options = {})
# some code
end
def regular_method
"foobar"
end
end
end
end
残念ながら、私がそれを使おうとしているとき:
ActiveMerchant::Shipping::UPS.process_request(receiver etc)
エラーが発生します:
NoMethodError: undefined method `process_request' for ActiveMerchant::Shipping::UPS:Class
from (irb):6
from C:/Ruby19/bin/irb.bat:19:in `<main>'
元のクラスで指定されたクラスメソッドはありませんprocess_request
。
gemで提供されている元のUPSクラスには、1つの静的メソッドが定義されself.retry_safe = true
ており、エラーなしで使用できます。
regular_method
UPSクラスのインスタンスを作成した後にも使用できます。
提供される詳細:
Rails 2.3(:-()およびRuby1.9.2を使用しています。環境への影響はありません。
モンキーパッチコードは下にありますplugins/my_plugin/lib/active_shipping/ext/carriers/ups.rb
/ active_shippingには、extensions.rbという名前のファイルがあります。
require 'active_shipping'
require_relative 'ext/carriers'
require_relative 'ext/carriers/ups'
regular_method
それはすべてを適切にロードすることを扱います(私の質問のコードの最初のチャンクからの振る舞いに基づいていると思います)。
コントローラの1つでprocess_requestを呼び出そうとしました。この部分は少しトリッキーです。なぜなら、私は次のようなsthを使用しているからです。
MyModel.courier_service.process_request(parameters)
ここcourier_service
で、この場合はActiveMerchant::Shipping::UPS
クラスを保持します。
私はまだRubyの初心者であり、どのような詳細を提供すべきかわかりません。