Plugin Namespace Oddities?


#1

Hi all,

I’m trying to throw together an acts_as_copyable, to add the ability to:

@new_ar_object = @ar_object.copy

I’m using the Fox example for the basic loading into AR with a module:

http://wiki.rubyonrails.org/rails/pages/HowToWriteAnActsAsFoxPlugin

so in my instance methods:

  module InstanceMethods
    def copy( options = {} )
      copyable_attributes = self.attributes
      copyable_attributes.delete 'id'
      options.each do |key, value|
        next if key.class == String
        options.delete key
        options[key.to_s] = value
      end
      copyable_attributes.merge! options
      logger.info self.class.to_s
      new_copy = self.class.send :new, copyable_attributes
      new_copy.save
    end
  end

Originally I was calling self.create, but that failed as well. Rails is
tossing my to an error page claiming:

undefined method `datatype’ for false:FalseClass

however, in my log, the self.class.to_s is Datatype, which should load
the
Datatype class. IRB shows this:

irb(main):001:0> class Foo
irb(main):002:1> def hello
irb(main):003:2> puts ‘hello
irb(main):004:2’ ’
irb(main):005:2> end
irb(main):006:1> def self.whoa
irb(main):007:2> puts ‘whoa’
irb(main):008:2> end
irb(main):009:1> end
=> nil
irb(main):010:0> a = Foo.new
=> #Foo:0x402d862c
irb(main):011:0> a.send :hello
hello
=> nil
irb(main):012:0> a.send :whoa
NoMethodError: undefined method whoa' for #<Foo:0x402d862c> from (irb):12:insend’
from (irb):12
from :0
irb(main):013:0> a.class.send :whoa
whoa
=> nil

So, why doesn’t self.class.send work the same in a rails plugin? Why is
Datatype being changed to datatype, and being called as a method, not a
class definiton?

Thanks,


Matthew B. :: 607 227 0871
Resume & Portfolio @ http://madhatted.com