From: hmmm Date: 2006-01-11T06:46:04+09:00 Subject: Re: included module and scope confusion ------=_Part_7686_11943162.1136929547534 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Ok here is the final version... 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 class Bread include Crumbs def cookies @cookies ||=3D Hash.new end def initialize @cookies =3D Hash.new end end class CrumbTest < Test::Unit::TestCase attr :bread def setup @bread =3D Bread.new end # Simple add/delete/clear tests def test_crumbs_simples @params =3D Hash.new bite =3Dbread.crumb_new( "test1", "test_action", @params ) bread.crumb_add(bite) bite =3Dbread.crumb_new( "test2", "test_action_2", @params ) bread.crumb_add(bite) bite =3Dbread.crumb_new( "test3", "test_action_3", @params ) bread.crumb_add(bite) assert bite =3D=3D "test3^test_action_3" bites =3Dbread.get_crumbs() assert_equal bites.length, 3 bread.crumbs_clear() bites =3Dbread.get_crumbs() assert_equal bites.length, 0 bite =3Dbread.crumb_new( "test1", "test_action", @params ) bread.crumb_add(bite) bread.crumb_del(bite) bites =3Dbread.get_crumbs() assert_equal bites.length, 0 end def test_crumbs_params bite =3Dbread.crumb_new( "test1", "test_action", {"filter"=3D>"s`divx:divx"}) bread.crumb_add(bite) bites =3Dbread.get_crumbs() assert_equal bites[0], bite end end And the crumbs module: =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 module Crumbs #---------------------------------------- #--------------begin/ cookie crumbs mixin #---------------------------------------- MAX_CRUMBS =3D 10 public def crumbs_clear if cookies !=3D nil and cookies[:rdf_crumbs] !=3D nil cookies.delete :rdf_crumbs 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[:rdf_crumbs] if (cbs =3D=3D nil or cbs =3D=3D "") or (cbs.instance_of? Array and cbs= .length=3D=3D0) cbs =3D[bite] else 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 } cookies[:rdf_crumbs]=3Dcr end def crumb_del( bite ) crs =3D cookies[:rdf_crumbs] if crs !=3D nil crs =3D crs.split("|") c2 =3D"" crs.each { |c| if c !=3D bite if c2 =3D=3D "" c2 =3D c else c2 << "|" << c end end } cookies[:rdf_crumbs] =3Dc2 end end def get_crumbs() crs =3D cookies[:rdf_crumbs] if crs =3D=3D nil return [] else return crs.split("|") end end #---------------------------------------- #--------------end/ cookie crumbs mixin #---------------------------------------- end ------=_Part_7686_11943162.1136929547534--