简体   繁体   中英

Initialize Ruby module

Trying to learn Ruby and below is a module I have created in order to test IO Ruby features. When I run the following tests:

    subject{TestGem.new}    

    it 'should be_a Module' do
      subject.is_a Module
    end 

    it 'creates a config file' do
      subject.init_config
      File.open("program.config", "r") { |io| io.readline }.should eq "default_file.txt"    
    end 

I get this error for both:

 Failure/Error: subject{TestGem.new}
 NoMethodError:
   undefined method `new' for TestGem:Module

Here is the Module I am testing. Any help/suggestions would greatly appreciated :)

$LOAD_PATH.unshift File.expand_path("../test_gem", __FILE__)

require 'version'
require 'hello'

module TestGem

  @default_file_name
  @supported_types

  def initialize
    default_file_name = 'default_file.txt'
    supported_types = ['txt', 'pdf']
  end  

  puts "module TestGem defined"

  def self.init_config
    File.open('program.config', "w") do |f|
      f.write(yaml(@default_file_name))
      f.write(yaml(@supported_types))  
    end
  end  

  class MyFile

    def self.first(filename)
        File.open(filename, "r") {|f| f.readline}
    end

    def self.last(filename)
        File.open(filename, "r")[-1]
    end 
  end

  class MyError < StandardError
    puts "Standard Error"
  end   
end

Short answer: You can't instantiate modules objects

module A
end

class B
end

B.methods - A.methods #=> [:new, :superclass, :allocate]

To test a module you can include it in a object like this

  object = Object.new
  object.extend(TestGem)

Or you can create some example class if your module depends on some class behavior.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM