2016-05-15 8 views
-1

Um eine Methode zu Kern-Klasse hinzufügen habe ich eine leere Juwel von:Wie ein Verfahren zur Kern Klasse gem hinzufügen

bundle gem my_gem 

Dann ein .gemspec bearbeiten und eine lib/my_gem/core_ext/array.rb Datei erstellen.

module MyGem::CoreExt::Array 
    def foo 
    p 'foo' 
    end 
end 

class Array 
    include MyGem::CoreExt::Array 
end 

Dann benötige ich die Datei von lib/my_gem.rb.

require 'my_gem/core_ext/array.rb' 

Und dann von bundle exec irb

> MyGem 
=> MyGem 
> [1,2,3].foo 
NoMethodError: undefined method `foo' for [1, 2, 3]:Array 
> MyGem::CoreExt::Array 
NameError: uninitialized constant MyGem::CoreExt 

ich die Datei verstehen nicht geladen wird, wie kann ich die Datei laden?

Antwort

0

Ihr Problem ist, wie Sie Ihr Modul hier definieren: module MyGem::CoreExt::Array seit Sie MyGem::CoreExt::Array nicht definieren können, wenn MyGem::CoreExt nicht existiert.

my_gem/core_ext/array.rb

module MyGem 
    module CoreExt 
    module Array 
     def foo 
     p 'foo' 
     end 
    end 
    end 
end 

Oder definieren einfach MyGem::CoreExt vor MyGem::CoreExt::Array:

module MyGem::CoreExt 
end 

module MyGem::CoreExt::Array 
    def foo 
    p 'foo' 
    end 
end 

class Array 
    include MyGem::CoreExt::Array 
end 

In IRB

require 'my_gem' 

[].foo # Should output 'foo' 
Verwandte Themen