I have the following code which prints the ip’s from fail2ban.log and
puts then in an array:
class ReadIPs
attr_accessor :ip
def initialize(ip) @ip = ip
end
def ip(filename)
ips = []
File.read(filename).lines.to_a.each do |place|
sf = 0
while sfn =
place.index(/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/,sf)
sf = sfn + 3
ips << $&
end
end
return ips
end
end
print methods
a = ReadIPs.new(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)
puts a.ip(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)
What I don’t understand is why do I need to give the argument to the new
instance of ReadIPs.new class. In my view the code should look like:
a = ReadIPs.new
puts a.ip(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)
But this returns an error and does not run. Can someone please drop a
few light here please
On Sat, Dec 5, 2009 at 10:17 AM, Panagiotis A. [email protected] wrote:
def initialize(ip) @ip = ip
end
When you define an initialize method that receives an argument, you
must pass an argument when you create an instance with new.
return ips
What I don’t understand is why do I need to give the argument to the new instance of ReadIPs.new class. In my view the code should look like:
a = ReadIPs.new
puts a.ip(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)
Then you can remove the initialize method from the ReadIPs class. In
fact, if that’s the only thing you are going to do, you don’t even
need a to be an instance. You can have a class method instead, since
you are not maintaining state: