Calling a method directly from a test => no method error

I'm trying to get a test to pass and keep getting a "no method error" I'm using the routines from Chapter 8 of "Security on Rails" and can't get the test to pass. I keep getting "no method error" for decrypt. Can someone help me with the correct "address" for decrypt so I can call it directly.

Here is the routine definition:

module Encryptor   module Routines     def decrypt(cipher_text, key, opts)       cipher = OpenSSL::Cipher::Cipher.new(algorithm(opts))       decoded_cipher_text = Base64.decode64(cipher_text)       #cipher.decrypt(key, decoded_cipher_text.slice!(0..15))       cipher.decrypt       cipher.pkcs5_keyivgen(key)       # DW 11/3/10 Above two lines per deprecation warning and stackoverflow site       # TODO Use a real Salt instead of Thoracic1       out = cipher.update(decoded_cipher_text)       out << cipher.final     end   end end

Here is the "after save" hook:

module Encryptor   module ActiveRecord     class Encryptor       include ::Encryptor::Routines

      def after_save(model)         unless model[@field].blank?           key = model.class.encryption_key           model[@field] = decrypt(model[@field], key, @options)         end       end     end   end end

Here is the test:

require 'test_helper' class UserTest < ActiveSupport::TestCase

  fixtures :users

  test "the_encrypter" do     @user = users(:bob)     @user.secret_answer = "Volvo"     assert @user.save     @answer = User.connection.select_all(       "select secret_answer from users where id = 1"     )     cipher_text = @answer.first['secret_answer']     opts = Encryptor::ActiveRecord::Encryptor.default_options     @plain_text = decrypt(cipher_text, User.encryption_key, opts)     assert_equal @plain_text, "Volvo"   end end

I'm trying to get a test to pass and keep getting a "no method error" I'm using the routines from Chapter 8 of "Security on Rails" and can't get the test to pass. I keep getting "no method error" for decrypt. Can someone help me with the correct "address" for decrypt so I can call it directly.

Depending on what it is you're trying to test you could either create an instance of your Encryptor class (decrypt is an instance method there) or mixin your Routines module into the test case.

Fred