# Class arguments (newbe question)

**URL:** <https://www.ruby-forum.com/t/class-arguments-newbe-question/179852>\
**Category:** Ruby\
**Created:** [December 5, 2009, 10:17am UTC](https://www.ruby-forum.com/t/class-arguments-newbe-question/179852 "2009-12-05T10:17:55Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![atma](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/858c86/32.png) [@atma](https://www.ruby-forum.com/u/atma)\
**Post date:** [December 5, 2009, 10:17am UTC](https://www.ruby-forum.com/t/class-arguments-newbe-question/179852/1 "2009-12-05T10:17:55Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Hello to the list!

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 🙂

best regards & thanks in advance

Panagiotis (atmosx) Atmatzidis

email: removed\_email\_address@domain.invalid  
URL: [http://www.convalesco.org](http://www.convalesco.org)  
GnuPG ID: 0xFC4E8BB4  
gpg --keyserver x-hkp://pgp.mit.edu --recv-keys 0xFC4E8BB4

* * *

The wise man said: “Never argue with an idiot. They bring you down to  
their level and beat you with experience.”

-----BEGIN PGP SIGNATURE-----  
Version: GnuPG/MacGPG2 v2.0.12 (Darwin)

iEYEARECAAYFAksaJSAACgkQrghUb/xOi7QoBwCffljNmCgWiDEtrmYfvyt7wjFy  
8R0An0//JC5C3lH/JqJwX13PAQwTS07l  
=mI8+  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![atma](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/858c86/32.png) [@atma](https://www.ruby-forum.com/u/atma)\
**Post date:** [December 5, 2009, 10:56am UTC](https://www.ruby-forum.com/t/class-arguments-newbe-question/179852/2 "2009-12-05T10:56:33Z")

</div>

On Sat, Dec 5, 2009 at 10:17 AM, Panagiotis A.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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:

class ReadIPs  
def self.ip(filename)  
…  
end  
end

and call it like

ReadIPs.ip(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)

Another possibility is to maintain the calculated array of matched IPs  
in an instance, so what I would do in that case is:

class ReadIPs  
attr\_reader :ips

def initialize file\_name  
@ips = perform the algorithm to match the ips.  
end  
end

and then you can do:

a = ReadIPs.new(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)

which will calculate the ips and store them in the instance variable.  
Then you can call:

a.ips

which will return the stored array.

Hope this helps,

Jesus.

---

<div class="post-metadata">

**Author:** ![atma](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/858c86/32.png) [@atma](https://www.ruby-forum.com/u/atma)\
**Post date:** [December 5, 2009, 11:18am UTC](https://www.ruby-forum.com/t/class-arguments-newbe-question/179852/3 "2009-12-05T11:18:48Z")

</div>

On 05 Î”ÎµÎº 2009, at 11:55 Ï€.Î¼., JesÃºs Gabriel y GalÃ¡n wrote:

> > class ReadIPs  
> > ips = []
> > 
> > puts a.ip(“/Users/atma/Projects/ZoneReport/log/fail2ban.log”)  
> > end
> 
> Then you can call:
> 
> a.ips
> 
> which will return the stored array.
> 
> Hope this helps,

It helped a lot! Thank you for the prompt & detailed answer

Panagiotis (atmosx) Atmatzidis

email: removed\_email\_address@domain.invalid  
URL: [http://www.convalesco.org](http://www.convalesco.org)  
GnuPG ID: 0xFC4E8BB4  
gpg --keyserver x-hkp://pgp.mit.edu --recv-keys 0xFC4E8BB4
