H
hmmm
------=_Part_6722_2615668.1136920311217
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
I am confused about modules and scope.
Here is a module:
module Crumbs
MAX_CRUMBS =3D 10
def self.included(mod)
def cookies
return @cookies =3D=3D nil ? Hash.new : @cookies
end
end
def crumb_new( controller, action, params )
cstr =3D controller + "^" + action
if params !=3D nil && params.keys !=3D nil
params.keys.each {|p|
if params[p] !=3D nil
cstr << "^" << p << "^" << params[p]
end
}
end
return cstr
end
def crumb_add( bite )
cbs =3D @cookies
puts cbs.class
cbs =3D cbs[:rdf_crumbs]
if cbs =3D=3D nil
puts "crumb_add::cbs is nil!"
cbs =3D[bite]
else
puts "crumb_add::cbs is OK!"
cbs =3D cbs.split("|")
#don't add a redundant
if cbs.last =3D=3D bite
return
end
# add to
cbs << bite
# cap the cookie queue at 5 using fifo
if cbs.length > @@MAX_CRUMBS
cbs.delete_at(0)
end
end
crumbs_set( cbs )
end
def crumbs_set( mouthful )
cr =3D ""
mouthful.each { |m|
if cr =3D=3D ""
cr =3D m
else
cr << "|" << m
end
}
puts cookies.class
cookies[:rdf_crumbs] =3D cr
end
def get_crumbs()
crs =3D @cookies["rdf_crumbs"]
if crs =3D=3D nil
return []
else
return crs.split("|")
end
end
end
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D
Here is a unit test:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D
class Bread
include Crumbs
def initialize
@cookies =3D Hash.new
end
end
class CrumbTest < Test::Unit::TestCase
attr :bread
def setup
@bread =3D Bread.new
end
def test_crumbs_simple
@params =3D Hash.new
bite =3Dbread.crumb_new( "test1", "test_action", @params )
bread.crumb_add(bite)
puts bite
bite =3Dbread.crumb_new( "test2", "test_action_2", @params )
bread.crumb_add(bite)
puts bite
bite =3Dbread.crumb_new( "test3", "test_action_3", @params )
bread.crumb_add(bite)
puts bite
assert bite =3D=3D "test3^test_action_3"
bites =3Dbread.get_crumbs()
puts bites.class
assert_equal bites.length, 3
end
end
Here is the output:
------------------------------------------
test cookies! on Bread
Hash
crumb_add::cbs is nil!
sets Hash with test1^test_action
has 1
test1^test_action
Hash
crumb_add::cbs is nil!
sets Hash with test2^test_action_2
has 1
test2^test_action_2
Hash
crumb_add::cbs is nil!
sets Hash with test3^test_action_3
has 1
test3^test_action_3
------------------------------------------
And:
------------------------------------------
Test::Unit::AssertionFailedError: <1> expected but was <3>.
test/unit/crumbs_test.rb:62:in `test_crumbs_simple'
------------------------------------------
I have tried different ways, but can't get the Correct Way to have a module
insert a variable into the Class that includes it. In this case it should
inject a @cookies hash, but in tests @cookies always gets reset to
Hash.new...
Excuse the inconsistencies in the code (towards @cookies) b/c I can't seem
to figure out the proper way.
So how do you add instance vars to a class from a module and how to
reference that attribute? Or is this not the Right Ruby Way?
I have a lot of confusion about modules... suppose its my java funk :/
Please point me to any more docs on modules besides the ruby-lang snippet.
-netcam
------=_Part_6722_2615668.1136920311217--
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
I am confused about modules and scope.
Here is a module:
module Crumbs
MAX_CRUMBS =3D 10
def self.included(mod)
def cookies
return @cookies =3D=3D nil ? Hash.new : @cookies
end
end
def crumb_new( controller, action, params )
cstr =3D controller + "^" + action
if params !=3D nil && params.keys !=3D nil
params.keys.each {|p|
if params[p] !=3D nil
cstr << "^" << p << "^" << params[p]
end
}
end
return cstr
end
def crumb_add( bite )
cbs =3D @cookies
puts cbs.class
cbs =3D cbs[:rdf_crumbs]
if cbs =3D=3D nil
puts "crumb_add::cbs is nil!"
cbs =3D[bite]
else
puts "crumb_add::cbs is OK!"
cbs =3D cbs.split("|")
#don't add a redundant
if cbs.last =3D=3D bite
return
end
# add to
cbs << bite
# cap the cookie queue at 5 using fifo
if cbs.length > @@MAX_CRUMBS
cbs.delete_at(0)
end
end
crumbs_set( cbs )
end
def crumbs_set( mouthful )
cr =3D ""
mouthful.each { |m|
if cr =3D=3D ""
cr =3D m
else
cr << "|" << m
end
}
puts cookies.class
cookies[:rdf_crumbs] =3D cr
end
def get_crumbs()
crs =3D @cookies["rdf_crumbs"]
if crs =3D=3D nil
return []
else
return crs.split("|")
end
end
end
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D
Here is a unit test:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D
class Bread
include Crumbs
def initialize
@cookies =3D Hash.new
end
end
class CrumbTest < Test::Unit::TestCase
attr :bread
def setup
@bread =3D Bread.new
end
def test_crumbs_simple
@params =3D Hash.new
bite =3Dbread.crumb_new( "test1", "test_action", @params )
bread.crumb_add(bite)
puts bite
bite =3Dbread.crumb_new( "test2", "test_action_2", @params )
bread.crumb_add(bite)
puts bite
bite =3Dbread.crumb_new( "test3", "test_action_3", @params )
bread.crumb_add(bite)
puts bite
assert bite =3D=3D "test3^test_action_3"
bites =3Dbread.get_crumbs()
puts bites.class
assert_equal bites.length, 3
end
end
Here is the output:
------------------------------------------
test cookies! on Bread
Hash
crumb_add::cbs is nil!
sets Hash with test1^test_action
has 1
test1^test_action
Hash
crumb_add::cbs is nil!
sets Hash with test2^test_action_2
has 1
test2^test_action_2
Hash
crumb_add::cbs is nil!
sets Hash with test3^test_action_3
has 1
test3^test_action_3
------------------------------------------
And:
------------------------------------------
Test::Unit::AssertionFailedError: <1> expected but was <3>.
test/unit/crumbs_test.rb:62:in `test_crumbs_simple'
------------------------------------------
I have tried different ways, but can't get the Correct Way to have a module
insert a variable into the Class that includes it. In this case it should
inject a @cookies hash, but in tests @cookies always gets reset to
Hash.new...
Excuse the inconsistencies in the code (towards @cookies) b/c I can't seem
to figure out the proper way.
So how do you add instance vars to a class from a module and how to
reference that attribute? Or is this not the Right Ruby Way?
I have a lot of confusion about modules... suppose its my java funk :/
Please point me to any more docs on modules besides the ruby-lang snippet.
-netcam
------=_Part_6722_2615668.1136920311217--