I’m trying to create different scenarios so I thought to do something
like:
file:scenarios.rb
module Scenarios
module Default
$bab=“defaultmodulevalue”
end
module DefaultHidden
$bab=“hiddenmodulevalue”
end
module DefaultSecond
$bab=“secondmodulevalue”
end
end
file:mytest.rb
require ‘scenarios.rb’
include Scenarios::Default
…
puts $bab
but it doesn’t matter which module I include I always have the same
respond:
“secondmodulevalue”
Any ideas for resolving this?
Thanks.
On Mar 12, 2008, at 11:49 AM, Mario R. wrote:
$bab=“hiddenmodulevalue”
…
Thanks.
Uh, stop using global variables?
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
On Mar 12, 2008, at 12:17 PM, Mario R. wrote:
-Rob
Do you really?
Perhaps you can describe your “need” and get a better answer, but why
not something like:
==> scenarios.rb <==
module Scenarios
module Default
def bab; “defaultmodulevalue”; end
end
module DefaultHidden
def bab; “hiddenmodulevalue”; end
end
module DefaultSecond
def bab; “secondmodulevalue”; end
end
end
END
==> these.rb <==
require ‘scenarios’
class ThisOne
include Scenarios::Default
end
class ThatOne
include Scenarios::DefaultSecond
end
puts “ThisOne has #{ThisOne.new.bab}”
puts “ThatOne has #{ThatOne.new.bab}”
END
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
so it’s impossible to do it whithout declaring a method…
On Mar 12, 2008, at 1:17 PM, Mario R. wrote:
so it’s impossible to do it whithout declaring a method…
You still haven’t defined what “it” really is. Perhaps with a better
description of what you’re hoping to accomplish you could get a better
answer or hint.
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
On Wed, Mar 12, 2008 at 10:17 AM, Mario R. [email protected] wrote:
so it’s impossible to do it whithout declaring a method…
That depends what you want, which isn’t clear. If you don’t need to
change the
values (and even if you do, since the constant-ness of Ruby constants
isn’t
enforced, though using them when you don’t want something constant is
usually bad design), you can do without methods:
file:scenarios.rb
module Scenarios
module Default
BAB =“defaultmodulevalue”
end
module DefaultHidden
BAB =“hiddenmodulevalue”
end
module DefaultSecond
BAB =“secondmodulevalue”
end
end
file:mytest.rb
require ‘scenarios.rb’
include Scenarios::Default
…
puts BAB
Actually what I want is to include an scenario with all my global
variables and if I want another scenario I can include it and all the
global variables will change.
module Scenarios
module MyFirstSc
$web=“http://www.elmundo.es”
$sqlSearch=“select video from datab”
$user=“Pep”
$password=“xxx”
end
module MySecondSc
$web=“http://www.elmundo.es”
$sqlSearch=“select audiodefault from datab”
$user=“Bee”
$password=“2x8”
end
end
In my test cases I’ll have in the first line for example:
include Scenarios::MySecondSc
and if I want to change the scenario I only have to change this line:
include Scenarios::MyFirstSc
How can I do it without including an extraline with a method?
I know I could do something like:
module Scenarios
module MyFirstSc
def getValues
$web=“http://www.elmundo.es”
$sqlSearch=“select video from datab”
$user=“Pep”
$password=“xxx”
end
end
…
end
and in the first line we’ll write:
include Scenarios::MyFirstSc
Scenarios::MyFirstSc.getValues()
But I don’t like this way I would like to do it in only one line… is
it possible???
Thanks for your time.
Hi –
On Thu, 13 Mar 2008, Mario R. wrote:
module MySecondSc
include Scenarios::MyFirstSc
end
it possible???
See Chris’s answer: use constants, and include the module you want.
I’ve been programming in Ruby for 7.5 years and I have no clear memory
of ever having created a global variable. I imagine I have once or
twice, but it’s very, very unlikely that you need to do it or that
it’s the best way to do it in this case.
David
Thanks Morel I think this one could be the solution.
But I have a question for you…
Why do you need super(mod)??
Thanks
Mario R. [email protected] wrote:
n my test cases I’ll have in the first line for example:
include Scenarios::MySecondSc
and if I want to change the scenario I only have to change this line:
include Scenarios::MyFirstSc
I think this code will do what you require
module Scenarios
module Default
def self.included(mod)
super(mod)
$bab=“defaultmodulevalue”
end
end
module DefaultHidden
def self.included(mod)
super(mod)
$bab=“hiddenmodulevalue”
end
end
module DefaultSecond
def self.included(mod)
super(mod)
$bab=“secondmodulevalue”
end
end
end
Module#included gets sent automatically by Ruby when you include a
module, so you do not need to invoke it explicitly.
Splenetico [email protected] wrote:
get done.
OOps, wrong nick 
Thanks everybody for your time and suggestions.
Mario R. [email protected] wrote:
Thanks Morel I think this one could be the solution.
But I have a question for you…
Why do you need super(mod)??
Because we are replacing (overriding) a previous version of
Module#included.
super(mod) ensures that whatever the previous version did continues to
get done.