# Argv defines

**URL:** <https://www.ruby-forum.com/t/argv-defines/120428>\
**Category:** Ruby\
**Created:** [November 16, 2007, 9:31pm UTC](https://www.ruby-forum.com/t/argv-defines/120428 "2007-11-16T21:31:12Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dreamwave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/7feea3/32.png) [@dreamwave](https://www.ruby-forum.com/u/dreamwave)\
**Post date:** [November 16, 2007, 9:31pm UTC](https://www.ruby-forum.com/t/argv-defines/120428/1 "2007-11-16T21:31:12Z")

</div>

if i wanted to ARGV this, how would i do it?  
IE from the command line i would want to do as such —  
./script.rb User.join\_group(“Group\_1”)

Any ideas?

class User  
class \<\< self

def join\_group(newgroup)  
@@base = PGconn.connect(“localhost”,5432,"","",“base”,“god”,“letmein”)  
if newgroup == “Group\_1”  
@@base.exec(“insert into GROUP\_1(members) values (’#{@@client}’)”)  
elsif newgroup == “Group\_2”  
@@base.exec(“insert into GROUP\_2(members) values (’#{@@client}’)”)  
elsif newgroup == “Group\_3”  
@@base.exec(“insert into GROUP\_3(members) values (’#{@@client}’)”)  
else  
puts “Error: Non-Existance Group. Check Spelling.”  
end  
end  
end

Thanks,

- Mac

---

<div class="post-metadata">

**Author:** ![dreamwave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/7feea3/32.png) [@dreamwave](https://www.ruby-forum.com/u/dreamwave)\
**Post date:** [November 16, 2007, 11:54pm UTC](https://www.ruby-forum.com/t/argv-defines/120428/2 "2007-11-16T23:54:41Z")

</div>

On Nov 16, 2007 9:31 PM, Michael L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> if i wanted to ARGV this, how would i do it?  
> IE from the command line i would want to do as such —  
> ./script.rb User.join\_group(“Group\_1”)
> 
> Any ideas?

One way is to use eval. Other way is to define special commands  
(–join\_group=Group\_1).  
On windows I had to enclose the argument in single quotes to preserve  
the double ones.

# dummy implementation

class PGconn  
def self.connect(\*args); return new end  
def exec(\*args) ; p args ; end  
end

class User  
@@client = ‘client’ # dummy

GROUPS = %w{ Group\_1 Group\_2 Group\_3 }

class \<\< self  
def join\_group(newgroup)  
# 1. ||= → connect only once  
# if you need @@base only in singleton (class) methods, just use  
@base - singleton instance variable  
# this will not be inherited to derived classes though.  
@base ||=  
PGconn.connect(“localhost”,5432,“”,“”,“base”,“god”,“letmein”)  
case newgroup  
when \*GROUPS # this is equivalent to: when “Group\_1”, “Group\_2”,  
“Group\_3”  
@base.exec(“insert into #{newgroup.upcase}(members) values  
(‘#{@@client}’)”)  
else  
puts “Error: Non-Existant Group. Check Spelling.”  
end  
end  
end  
end

# ./script.rb ‘User.join\_group(“Group\_1”)’

eval(ARGV[0])

---

<div class="post-metadata">

**Author:** ![dreamwave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/7feea3/32.png) [@dreamwave](https://www.ruby-forum.com/u/dreamwave)\
**Post date:** [November 17, 2007, 5:30pm UTC](https://www.ruby-forum.com/t/argv-defines/120428/3 "2007-11-17T17:30:40Z")

</div>

2007/11/16, Jano S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> On Nov 16, 2007 9:31 PM, Michael L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > if i wanted to ARGV this, how would i do it?  
> > IE from the command line i would want to do as such —  
> > ./script.rb User.join\_group(“Group\_1”)
> > 
> > Any ideas?
> 
> One way is to use eval. Other way is to define special commands  
> (–join\_group=Group\_1).

Yet another solution is to do it directly on the command line:

ruby -r script -e ‘User.join\_group(“Group\_1”)’

Kind regards

robert
