pax_global_header00006660000000000000000000000064151625670460014526gustar00rootroot0000000000000052 comment=01bd69837c3182d6d15a06db2a8b70054a314bcc rubyworks-brass-01bd698/000077500000000000000000000000001516256704600152445ustar00rootroot00000000000000rubyworks-brass-01bd698/.github/000077500000000000000000000000001516256704600166045ustar00rootroot00000000000000rubyworks-brass-01bd698/.github/workflows/000077500000000000000000000000001516256704600206415ustar00rootroot00000000000000rubyworks-brass-01bd698/.github/workflows/test.yml000066400000000000000000000006171516256704600223470ustar00rootroot00000000000000name: Test on: push: branches: [master] pull_request: branches: [master] jobs: test: runs-on: ubuntu-latest strategy: matrix: ruby: ['3.1', '3.2', '3.3', '3.4'] steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - run: bundle exec rake test rubyworks-brass-01bd698/.gitignore000066400000000000000000000000451516256704600172330ustar00rootroot00000000000000.yardoc doc log pkg tmp Gemfile.lock rubyworks-brass-01bd698/.yardopts000066400000000000000000000001101516256704600171020ustar00rootroot00000000000000--title "BRASS" --readme README.md --protected --private lib - [A-Z]*.* rubyworks-brass-01bd698/Gemfile000066400000000000000000000000471516256704600165400ustar00rootroot00000000000000source "https://rubygems.org" gemspec rubyworks-brass-01bd698/LICENSE.txt000066400000000000000000000023361516256704600170730ustar00rootroot00000000000000(BSD-2-Clause License) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. rubyworks-brass-01bd698/README.md000066400000000000000000000072261516256704600165320ustar00rootroot00000000000000# BRASS [Website](https://rubyworks.github.io/brass) | [Report Issue](https://github.com/rubyworks/brass/issues) | [Development](https://github.com/rubyworks/brass) BRASS is a standard assertions framework, framework's framework, or even a framework's framework's framework, depending on where you are staking out your assertions keister. In other words, BRASS provides a foundational assertions framework which all other assertion and test frameworks can use, or at least comply with, and then everyone gets on swimmingly. ## Status [![Gem Version](https://img.shields.io/gem/v/brass.svg?style=flat)](https://rubygems.org/gems/brass) [![Build Status](https://github.com/rubyworks/brass/actions/workflows/test.yml/badge.svg)](https://github.com/rubyworks/brass/actions/workflows/test.yml) [![Report Issue](https://img.shields.io/github/issues/rubyworks/brass.svg?style=flat)](https://github.com/rubyworks/brass/issues) ## Overview BRASS is a very basic assertions framework. It is designed to provide only the barest essentials for making assertions such that other assertion and test frameworks can use it, or at least comply with it, making all said frameworks interoperable. Now, you may be thinking, "No thanks, I do it my way." But when you see how stupid simple BRASS is, you'll realize that, "Yea, that actually make sense." And then maybe feel a bit stupid yourself for doing exactly what this paragraph just said you would do. Yea, well, we've all been there. But enough with the fluff. BRASS defines two Kernel methods: `assert` and `refute`: assert(truthiness, *fail_arguments) refute(truthiness, *fail_arguments) Where `truthiness` is any object evaluated for it's truth value (`false` and `nil` are `false`, everything else is `true`), and `fail_arguments` are exactly the same as those we would pass to the `fail` or `raise` methods. The `assert` (and likewise `refute`) method does three things. First it tests the `truthiness`, then it ticks up the appropriate counts in the global assertions counter, and lastly, if truthiness came up short, it raises an error. This error is either `RuntimeError` or the one specified by the `fail_arguments`. The global assertions counter is `$ASSERTION_COUNTS`. It is simply a Hash formally defined as: $ASSERTION_COUNTS = Hash.new{|h,k| h[k] = 0} And though it is open to any key, the keys should be symbols. Three keys in particular and standard: `:pass`, `:fail` and `:total`. Whenever an assertion passes, the `:pass` and `:total` counts are incremented, and whenever an assertion fails the `:fail` and `:total` counts are incremented. You might wonder why there is a total entry when the sum of the other two would do just as well. Well, other frameworks might want to add other counts, such as `:skip`. So to ensure we still get the proper total despite this, we keep a separate tally. Moving on.... Okay, last thing. When `assert` or `refute` raises an error, it marks the error as an assertion via the `#set_assertion` method. This is a method extension to the Exception class along with the `#assertion?` method which any test framework can use to distinguish an assertion error from an ordinarily error. And that's all there is to it. If you *capisce* then consider yourself top brass. Love, Peace and Brass Knuckles ## Contributing This project is so basic it is unlikely anything will even change. But you never can tell! so if your have a brilliant idea, jump right in. Source code management is handled by ye ol'Github at https://github.com/rubyworks/brass. ## Copyrights Copyright (c) 2010 Rubyworks. All rights reserved. Distribute in accordance with the **BSD-2-Clause** license. See LICENSE.txt file for details. rubyworks-brass-01bd698/Rakefile000066400000000000000000000003771516256704600167200ustar00rootroot00000000000000require 'rubygems/package_task' gemspec = Gem::Specification.load('brass.gemspec') Gem::PackageTask.new(gemspec) do |pkg| pkg.need_zip = false pkg.need_tar = false end desc "Run tests" task :test do ruby 'test/run.rb' end task :default => :test rubyworks-brass-01bd698/VERSIONS.md000066400000000000000000000025051516256704600170400ustar00rootroot00000000000000# HISTORY ## 1.3.0 | 2026-03-30 Maintenance release. Modernized project tooling and cleaned up documentation. Changes: * Replace custom Indexer system with standard gemspec. * Replace Travis CI with GitHub Actions. * Replace Assembly/detroit with Rakefile. * Fix typos in README and source code. * Update URLs to HTTPS. * Remove obsolete files (etc/, work/, MANIFEST). * Clean up .gitignore. ## 1.2.1 | 2012-02-09 This release adds framework adapters for MiniTest and TestUnit, which allows those frameworks to recognize BRASS assertions as "failures" rather than as "errors". Changes: * Add framework adapters for MiniTest and TestUnit. ## 1.2.0 | 2012-01-26 The default error is `RuntimeError` rather than `StandardError` to match Ruby's default exception when no arguments are passed to `raise`. Changes: * Change default error to RuntimeError. ## 1.1.0 | 2012-01-25 Quick fix for issue with parsing arguments of #assert and #refute methods. Also added #fail! method to dry-up code. Changes: * Fix arguments parsing for assert/refute. * Add #fail! method to dry-up code. ## 1.0.0 | 2012-01-24 This is the initial release of BRASS. It is given a 1.0.0 version despite being such a new project because it is very simple and the code is derived from other system that have used it for some time. Changes: * Happy Birthday! rubyworks-brass-01bd698/brass.gemspec000066400000000000000000000015641516256704600177310ustar00rootroot00000000000000Gem::Specification.new do |s| s.name = 'brass' s.version = '1.3.0' s.summary = 'Bare-metal Ruby Assertion System Standard' s.description = 'BRASS stands for Bare-Metal Ruby Assertion System Standard. It is a very ' \ 'basic foundational assertions framework for other assertion and test frameworks ' \ 'to make use so they can all work together harmoniously.' s.authors = ['Thomas Sawyer'] s.email = ['transfire@gmail.com'] s.homepage = 'https://github.com/rubyworks/brass' s.license = 'BSD-2-Clause' s.required_ruby_version = '>= 3.1' s.files = Dir['lib/**/*', 'LICENSE.txt', 'README.md', 'VERSIONS.md'] s.require_paths = ['lib'] s.add_development_dependency 'rake', '>= 13' s.add_development_dependency 'lemon', '>= 0.9' s.add_development_dependency 'rubytest', '>= 0.8' end rubyworks-brass-01bd698/docs/000077500000000000000000000000001516256704600161745ustar00rootroot00000000000000rubyworks-brass-01bd698/docs/assets/000077500000000000000000000000001516256704600174765ustar00rootroot00000000000000rubyworks-brass-01bd698/docs/assets/badass.jpg000066400000000000000000000516371516256704600214510ustar00rootroot00000000000000JFIFHHC      C ) J !1AQ"aq2#BR$br34CSc5Ust7!1AQa"2q#BR$3br ?Qpge@AB00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APՆvz3b3;xF6y!eT аBX!qn*"7oʣMؚ9Yiۚal^QBƬ$dF̭e-jɎXkQj4 wact̐gvF,;+tR@@@@@AP(PQ[eIXfܐC:YZJkI]Y1D#h^#k3SC6RXZ~&/0wSOj2V"Kс4X%ZaLռ+l*0pal6S , *; {Jj$)ŽV Jh򣴮ҚUɬ& /5]|^1oYȌ^cխkq龼Wnu v:0٩IQuȂ/].7%3B޻*a)"TQH1궢ɈjyUݘ >/2䱺H,nߑS79]X]rG"-<,Y+fB2"}N5!Mom>K,LK-wI=Iovǫ>Mx(ڴVXE0&- Ϡ!K˳lyN"fdV&R{b@r,P #3փJʦh>i;52?w۳Ǹs9p31pR5rx+^lYVpw8~>#[J+1׼v^k=eSzFQZr[2jGb6vTŷ~(ޯ MKԋ]%vfq`25C 08 ^l˖Y_W%ʿhq28 6 ;y_Ç7!d+uk1ܭK4PM=C.abSRRaEh]d!E.+y-~vYndB8D&q)~NW~h/CkD.6 *iۤ |v? iW9N*iy푿 S׬Kp<՟ -F]SptAI̓:fh>(f"cn!LSz߽v<&Y4oW9O44:X|e7d+C5mo$Ze)6F7T\+ t5{s{ftٽ_e O @0*4v=ʢT`?kjDz"diAlzw GJ4(2LhϟrGuZe*>6*M+ q*6w6%"vֽZLm‚yv[(a W,ZkkPD@l,>n>g%EO=5/i Wl; Co ,w-F (/FoYgK;&h(+$i#PLnpn>NuYZ(Iڽ:#,ͧ>Oeu-Y{ÄѿMudjd?h* Ew3rg^녲ԭC.V,u 8(糜U,1붢0,JnFtuHL1AMP;x"V4ZjMl;D5:W8p JT-jzYrnnrs*56,x1EiGzKUoَpJO4qSʹZFY_-_WtAm֖ xY&>k-8QΧ2[Nﭐ0p6gќHFb&{urZ{uLƦ#d%<}Vf:ǃ_櫚OcWa? P::ojZS]]q61h'V6*FJKbp#dׯh߭e:e!alps]O$ϔZ+Bf;}ƴn-$#.-==x>kJt-`. +C䌻K;wmZͧh.k۽CYN^f{ry?2Xu0O[/) % vq.?R洺LQ_5B;FQyRD)>iBđ&V\VQ0 O ޲[dde\rR{~-;/<|]5&ϹULzz~y{'jZknNiך2QQCC |nan8dc (9y&CHm]pH1i{=?SKst䂬95.`ÇinFA /%\+𱠗I`t `aW˛vփZ;V|#in¤l{OݣϿ>~K4|oQ­h+Wfs^Ȍ-N+dJ@@@@@@@@@@@@@@@@@@@@@@@AQeSe5^J+/lAw_Ngt01'GaO3qbTLk^Tv?z?r6 ,Uч9_Q ixlvVTd\I v9o+d[)` aDІT YMDpl<⠿ҵfݒ?Vu]\xC[3e?nAzfMm.qPl9jidj'q yUseM?5&nM䨫.xkmONXE$)弭Z8e *;! SQ/G(|(,P èڢgQhJv}̖zC#HphG m9~>9!ʺNߩZC(TYjˡ͞=7ro%Uj[ySÓS rղ P<,y!`@@@@@@@@@@@@@@@@@@AQ! Vz>EeMݪ tvVǨo { M=L)Qz>\冪Z^Xj.Bf-b9qfXZ[VKŪFۥd44qhpު:ScV]4*\"wL#%m 1u =JhiC,REGK;v2UmO] = 6ڒrJuiyYͩG7惪IlLe?KvOy>T3gᐤhOOͤt:{8m&MߘY 7׼0k$#>@x/8}@X"fQſelL-f#MHYaQpoebpbSRl(%m<#qg>_ }7WzY(EֹdN2KVyúm?'Wvê&`oPjR_Fƶ xq' .{GoVR[46idcEm%Cv-ǚ els|Wg.!?UJsFZ,,Z{Gál8>'؃sz{x^iCRxRVT3cAS`SĹ(,Jx["ZBֲgmUpZ8 xYC{֚F4Uj4a1;h{χ0FYz}r+f[m4؈s໖~GTweO/K*y#\pGࠝ}̭LvKi q ]ab S%Œ7KjZk;mZsj%< p[a=UQ[$#[¥w+dS/%wVXb^JW`@@@@@@@@@@@@AP- *$(+hi_A2ߗsi}I*<0 zu%VPɼNx|o^A}lKQj+Tճ2FH oaj^jYM{>&$,H.h ny'izwj6nK\H#68AQetY[4uYza˜]Qެj}Az?}Ziay;cژǔ1߰@SˤuۅNȫovt+)f]x'hN:I-;%L;U1yk2縒ϺzIuwk]Tt\Ȧ.y$4cJ{'IE6Ma7IKщ9~"gѻq韲7op e K+3 Oxr;NvAq^kl(5OQ|g Vli_+y4UJ޲ pT.fJ&fhcϒ0ADh\,e>: ;J*uln*[Oqe I+GFђO`̒NjSڵ=]Gt}3аj2s{}#L92x έVuwJ6frPDa3-%@7]`tMxLt Ȩ[`.I& lTwa7u9~h!zi}]JiSu+BOĞ'\Znj`lN[:(l'NPQ1iy2Y'8A-VzJQR6 Y@>0 ;m_={:Iѭ&av҉:'q(>Vt[*mUK]J 7h`L9 p$`6L` Ѫk֩hk%mp԰X5ѻK ^qy7 K?[ύc<).NZ!a*h>a=uir(@%%a#Kp[T?# ÏNOgnKa=;JRm+5M翄yK龔ӝ<^1Z};qp$#;5kXW.[dź}A,i%T`4cgng9' 4M5>;91RXtqhp@ ޘEjN,H귂#ow4oqL}vxzO5ԉO;wf<9tW:7ћ|_@,c3{O&!}7ާ=u^jӱ(Sq}NO{FFrG ]%UXuEc`/u[_ɎO=q9>EE4}T[M$T3R펛r2$a8Zڻlf][-sW)xxǂTzlM9?Ο?r\@kShG8ii "Lp8܆tpmC)@d~vdrPb:jNylSJ-(-FtӭUGMei-:wTss^Z>AtޭԺfՖ6a~ّ,{~N|u;.궐\-T=L}m1J+$klN57$eMD1ɡ{{O ~s-u `ALϛ' T4,H`X.Lh{Nni79 s |P[f̮eo5P,SC eo Xr0 FWX9 ڬv%k&YEgC 'cW\),:sY|EIyww5<߅1O}F0ӧ[,vj_mU0Lli-"gp;{UӼ.+,({YCw?]-j2گNz?_->KSE^֎2Y'  3[ eFR\5MIÐZ 4grFI(9F ~ 5!?<ύ8=o^ĚuԚ#|sI1n/1zq Ad\ZKsM_E+fkr?DVjK$G}$oq汌ZOS韲SGSzz˸T*dor"G?ꃹkNh MKdO_ޢixyygvvm1;NO[WUx7 )_MY~M6syM!B2ao vc9n^]%%YKIYƑusi F瓆4'N0?ZrJu]I`YA^Lnddٓ߸h97w殮Z~}01SGM̤Ybcvq<9sz`Қ^lyI@+mu8Vǵ5O(wC'zn;fv$~(>ugShS:GyPR;i>YwvuTZ눡l#sGw EM:{[L)<](-ߺzkzR7]n6٥;S?5;9v2G~yAFIӭ o+ ΥƢ$pƴ4z;{j骵æоJ?U/Z~{cP|{ +晼Pk+cKʩk>>Ұ\'$DM%rGhӔOc<|QZ/:N:sm[,U4C x]3AǺtTtWM[=u,B5E0t`s 5H\f lN`` I<Yr ~46_Em&3 y.%psI0}Tb{MdLFK\K"09A池 )x43N#gc6A%ƽ&-ab9wp/њbsܓAu5u(5zNee4ΖQ#dł~p! Mu~i}uΠYm& dh y .GtQxkA =;pu1R< w1옫`SC f|ScAղgD>o)w;,Sr4؆$(_;0&9[­^Ұ9y(D=6dDKYHSM;%*{ 'hA<9c*+Ni{jX;&Dd*H+]Mrem-%T (.1ZxLRba-l͂kI]-IYGjbʜsPڮ,̪= 1Vd4shKkwHz+xrsGWZZE|a{vAwmܢJ/Ԓ4;,gcQt,Os%Ueӎt=,cypѯh]Mچ[\Ý[|$?~%?# ~=MkKWfY'%! ?DADO#EY; -k{rTE]oL*:ʓʞ!ˑ=FT Ir^l\e# @@@@@@@@@@@@A\r6\k1e+ +vu=F<֓ 8%TV,*G*UÙk|K.o+x.7"°(kR5.^ls' y> LYɎV~r!1ꎚ;D*#3SGp>{Ft I\l-knҊTniɞNN6/IX=\Ulmo.9iXM"l4C^[Klw,6_LB|y&-IW5*3S:I#sZ]RtC[T‡>Q?'x=ݼJ/%vávW/I\Gl3&)X0zw8+.^LZ,*gT sNRÆD~p3Bo_UO&{yIIRwJo%u8䷿EC[%v|%Sɜ!NaH{եie,7d&00gAP@X4y櫘򤡯#&te9ơ}C#PXgC<wNF'P-ȑf*3דVU{GTUgI*6iBÕ,w9xF MvӺF |׊6&iڕDvO ljF]7# y-+ⳛj1`y$bS1!9}ÑꤋZty}<ґtWF( |vTSxo~;#k8wZKqq[௬t{ۛ̏@jym̸GLdMp2TsN۬Wm/=v߬fzdgoܳO⨖}m>nx ف[~+j楻J՝5`I0[2k]U,e^miXI^qXo)⨞iq1=ݘ\OӴo3(tnn({xpܑϪ٩WS d1ݯܙUAY%%SvÀ9>M]7Vx;MmCY ƒ| ֢zc2:p<υ wR8k,G⏩zM@ї8xI麦N9Ixn)YmcsϾoٯNWt&l0ҐC}p]E&vKjqojmV:J}lc<(Hk[g 93Vhn]LL:G}.ܴa|N! CyZQKv wNH18w`Nl6-#*DǍ}= ̱E4/VoVIGy,G,73؜͹ޅAXٴ]pScҬZ/Ofi@I 1jat|'|TwTݫHu =fKwvoxs|W6U0uD|(W3!I^Q.w'.J?6[&gf&̻%{UҞ Cۚv#9d]U匕5v=- <7C4L;v-we͆i}:;F:eFQzhW5k]$66\vRbC# sm ŕgGW.Q<23ᕥFK^;M5 k-Db}|:otaǃ< ׉{gsto=W|F\(n)Gۀ3(/)E㒕eϬ $ťFi/˖۬o5VX(j%Ǚ)\.1]07 941}{$Ks\jv)i|ݛH9>HZye4sSLaycrӎǕԉ>Y%kqYi*'J1ҹc\.,W;V77tex"v9ÀH,#6GY{gzg uIh}XZ7+faF߄Cz̼٫Igx+.9Cqt~K d# `{:"o=ggJTji!3Jaoޑ DzW~.ZkNfYڷI])vFg+׎[V"?Ös˓%FEym3ss5{ɻfCU"Cb|yˀcG n Ԉ"w[#zvP:&]"#+0I,v~g>cD~.;u+桫fv׎A"WRF:Òio%B ].~OF[z}tGx~Vw}*ꭺ+7 lT7 sϗ%Į5#]=2L[t٥SA$Aߕc~8 )I#ߛUu m@"g i?s'>[ŭ35a^%TpkTא`f0|tBS1['~]U-]dRĝe'm>_$i3AN uF$-g|O eGW_O'7ac1ť@Kq=6o_îð[#-+vɪ0D_K#n\G*ޒLI⭢&yg`xem]4|ڲpo$v|iiPjgjK&ںἻA0,Uتc#~sm[MQf\h}CCĐU99` rp^+VtY{mswWAz@ ~a'xd*Zߖxm{yt'929"sq4W?i{^;LL#w3ݬ6ib?is3t4w0鶵rGIs]yET ZRf1b75n'lQ1G06Ϻ{=w F-&hY: H  rV~Ufi=WZWZAnv>$ЖWt[o/+DO%<- *QI{":v54#{v3j">5͓citrs+sCC݇hڸݡ_>/Xi5ޜ[qkPF>|COi{w4_w>Z!ڈ*:{&uv9B\Zl 8 Mm3t zfu%xgÑUrujwqpobB>Xeuܣw> C1&nIn5ZJe嘉+_I[=+/ŤKN<5wrwYF ߺKllM l@ ?'U=]ޛٝ7>Kd%9Q>]1rx.8͡I~8s"trWe6ӫURTMQ4,&{=o*',twx2m3h_9S[)dS0Ld=Ğ}r{x=.*LLDo Ū5G ]$d14g$[*֒~7Jyqt DAEJ+|WO!AWw3̙b\u}?խx*1p[֗U{GN:E wnn9'o]mǴysOoCNh쵰r)#hCǗn3憜ŹqdmTi%lZ3.|ԔjR9Wyu~\\ƱƆR}c ctǫqNm6N{IL{57mt Z.v8+LzYϒ1NieյXEA7C'̒.o)m WUB9IsvI&O[9MbLŬiY~F_|F$c^%`\2AQ;oX;GcXF>r}HAnokY [͍óp%ut&W6FjGᨃzW [7l$8U-l|0^y:iAsA CΓnυѓÿM3 |z]Ftߏ 1oZ2Os5vyC{9k{[QӣtU^FZwU*dm8߰k+ZH{I~]>vo ݴRZȖfOns$I,8v 4cpm^=v'h9gZ7K O cyٖ>: LR"v";.R4HۭяdqWtQ^Wڛm39Cݕ1;xWG?G٩>V>w?Uć7DjjT٣k#ZӐ~jbwYp$r".--TIS 1 7wgutWwƞ{LOu3޺GMu3g{IU5ڰc3?__ՒJ-jp],2s1uy^,&_wDKnqgYWTcٜ3Xd: K W$t~cݑOÞ?ZuZf.8-g1Rf~YlQ(`5ﻷZEb+"?'?Yk7} /#1Zdo=rqt DK}εԏc%m#7ܹ«>Ao9my':wY7G qC+J r\/1|=vLxťUD@[mI#\`zwi 'Fc~]ŵ$HÏ+epý_k+h$}Q^5;{p|qf~.Ϧ29qƱZck3]n$~6fݾ}5LڽE u :.an_黅voyO>Y/Al2TV;dk+m==J珚Zfr7\M_/~m=XK]1;Gޞ{_1OEcn<ta;],O3tmj;Az<bVH\WSK^gU1=#֨=!42N`nˁ|۫9z~VMA$y-u\yX]G h%j͢+E3S,ZӼǒdPC5.q kysp0<=!+W=C#%caA8q%uԚ7|5ZG U$ yvd`D&Hn_S)^3nA`LVb(bn^I$V3Jm1X";2$.%b!;ͦgTƕSD&HȎ~-a|Xlyjޏrm[bx_$rm1! s\kcMqM6Ӽql϶ݣF#`6AOXyK[oO-cy:罯Dej;[D7[X =+N|X7_mmo䟑]Xi+YiGm$#52o L(OCmBXjc!{r 5gOm;C1c{s^#gwu|DVx7`판糜B_m>\Ν=7]zjeH(Xsw.dV֞^1aY#ԚOT{jLLt70=99%I8/ x[hhߴ%0ڈNysIϨf;ãrYi-ЗIYt>i]Z04:liJaon|ώtAaؼI"cei˷#O~GxII)mwXVdȍ +o}-UGW 580N{rvc&?L덪t-Fbx$nwZOyY|RTfMd:Nڳ:;[хzo4~{g1c=k܎|y-^յZvI'~i=B ))^-ԑKQqaM%f{3W״ogz9!de\ZO a-rDڪrd29$`ޤ G%cO}ZKJ 煓\!ow͠Vy-9zM"ow饖:b s]yN1Z{GwɭI&;PS,~6?1~$xVh']%k|g2}MTy^"6-Zmie@@@@@@@@APH삥rPS'䂻4{ɤss٘… Noy((=8;DgvK.w4527,y%{iVk*H5>b;Vb6i%2VZ2))yჱŹXޟ,o.q.qrJIv8'F$29{I!cho[zD"t1 [rxMmߢ5A8Ksޥ Ar)Vs\I=w`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Arubyworks-brass-01bd698/docs/assets/etana-nu.jpg000066400000000000000000000015101516256704600217050ustar00rootroot00000000000000JFIFHHCreated with GIMPC  !"$"$CU"*!"Q1#ABq"!1AQa ?9u;PM)R""8f ڧbn9#dP}MRnW=udrXtC14 JZI*I ժW͖*Hds3P4]i-%֪[E߳dQ"S1 |(Y<ѓU npϹjTiblב2A`x#x6KL.:֥:ռ^ze9`y$"VixfVnygDmQR^JeҨ*E~ 瞸slCܑhQѰ+PF?qJF{ży}B}Be؟M=fZHGUU!K_g`3lz,'] {R8i]eulG;[bzWhRݪ'$P" /qgy8~?1#VFGVGRC)~0LEF]?@c"S1211`rubyworks-brass-01bd698/docs/assets/icon.png000066400000000000000000000130371516256704600211400ustar00rootroot00000000000000PNG  IHDR00WIDATx^w]}?ھ ` @@IIEUHv3q(-O"lŌ$;4rlP,rİ+H`H.`z9ydFdw{+_sukл:;^۩4BK!q"j m!^X}~5? l?+)؝+ֽ !z;dK$)P('F/̪/^]gQWӝ&BD.j;,@H -FCBNjwx6{DAk[g~ ;Ah2ERp |GZ,I %rH4*_Ʃ\u U3ά_~+޸9 KdX*tUE-m#WVQVS,fi@!0rp!C̿JlHޮJݘ{~R?AU귇EXM8s0#Wl)곋Wa UC Kd2VTRtгy/|WX|b{)%I DJy\7_*(ȃueqg:³?cBƀ$v) I4BcGJH^ePǫ>Yi)4miȹn6rK%qɧ~xEba1#EW%Բ:B$DCi1<%H;7ϮGVKѠ$B26|ⷹo!s}|/r٧Y 4A$UBPd΁X8t 52ߘ9>@@O^u]~* n_sMHXD/OOOgնO+Ϫq("BLe8mLD8|#&5EXQLKJQQ\_Agz`,(HR:¿s7>ٓgi+;55\ݽVv]F&(!"[ C}0i[esZ46 AϨNkyeU;R;Zto| Atr}3_8X! x[\i`bn@}f]&v}\ٳ()P)g286Jqb074v~8 DF&RʂvH%ȞN(BMH!vKkou&;gTRG9<- S͹).5`R+\1DcmPP{ā\S _%mynk&%F=i<35^sjlaZkNm9w+R x ;9X_?&O=u7.aug;[&&Xĝg/cnvLpCc ~SX⎯O?RA%*u<:y+ S'9)) s*%"JTa:Y=;kG(]|?[x`8ǙhsCWp7f P3)gPZK3gA5D_$b*^~כ|s_{^QPF7mf:J72ls=u*I]FŴmʲ_8#_jpdԚMl;v8K$Ul%D%,Q*ha3Nlʌ%3/bʕ *+qL{0v+f7VWkDgNԹ8RLkx%6h-Q` +{rPKT6i{Ɖ.\b-)EX 3}mirtB1s6/B/КZaK\\o:̝ . %6<~Bc݃4fWJC,!΁pWRiptŎGKS/GˋHz= B0 jF6Fܢ#MRH,˩pdzEf뗸w)8+gyT'Fx{9?=ϤZ7(SEOV*To-O]ŷljC8p"1 ѻusg;DOT\" U;:vly1lbdh`ω%h4,Vў`# LM]`j}MhMB峚wsx*nK* ^QDe] s=v^v>rۇ/R˚p] t_ 3X_\A]~=HmxZ(Y'&ma^`AOOgWH#v'9s\7iז*"d \fO?'ÏcGCjeN/O1i&@IՁIiFX#kH S*`S p1MG/l,Hp .J*-AFku?7_t3o{빥U Y 27扇1V 2iB0fгo 8<D-DY @6۴f8nkF_=dcYM`b]W3>ՋGlTϯJysgMA,w?v?T c%p[(㚭{93wBZ/쥤#^FG2'$< @kȵM/Vj̳ o9| pbrVZ< R"8!ᄇ^MRZX]|w^˭z@&k`w!dbYXkIYV0㵗UlNO?~s]!ԼК桩'J)֤.mK~ Ah k5ba`sd3J5zǔ{TLJ6XMeIҎĤdk.7-9uE~.K YOSϰ C|? 06yؑüdUHEJ=Y%$:]<ű}^. gO7&6ž)K}<璩SuEleӈaқxv++;`B9VBIgvݕwhV1DbY]ÞG8 2xgNr`8V!Y\`˚wcAW^C=7a,/S! aYh]hcEƇ|kV f㞥')J:PtR!`~vwR!CDP f7W8{u+]5oƜ=32-4,'i-FK}y"%1 (4Onu 5Jk8c)xPg.K bP8,i2!@"ɤ飜Iش4F~dBya%\;-2hl#ͻjl.ek3s~0(4 e<# #= J j/e۲lIF]HYw1.YţiS6lΒe) AQD~Hl)iG`Z*zDY l ʦLBO-^P"t崩+DňBHxy/ x^߻h^OZ%~7CX@|Ù,me@e%A9 8ߚ%v)FQ6!MTdL <ϠC!,}/D&ȹ{O&r$'KUk_J)Ԥ e5D 5p8Ϭfк*i9ɭZ "^ l/W \10yH)yc\X|5eϓWz6W #Pw Ҥ! )"MB"}CJCO)i(Z<oDAH~r:Bqh#_ϒE IO~r@H -R6\d鎺)v# H]4Y`DM+Bf F\iERX@ipH &̽`˽`FS#zT|/W&:ssOf}uV>pCu@'H@"К +2/>NIˀ<rJ&Z=042P<_ԉ*s,xP4~{+U_xR-H%dh#"vI:KE}PHFa image/jpeg Adobe Photoshop CS3 Windows 2008-03-18T15:00:42+01:00 2008-03-18T15:00:42+01:00 2008-03-18T15:00:42+01:00 uuid:42EE8EADF3F4DC119AAFEB1806D7B794 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;FBF50919A8B064F02C2262FB1090EEE1 1024 768 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;45FED0AF54E1433340F00752D6A3D635 3 sRGB IEC61966-2.1 XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC  !"$"$CW !1AQaq"2BR#$%STbrs3456Ct&UVcDdu: !1AQa"23RqB#$4rb% ? ( (@0P Z@ D @ $@ L0} X @ @v`Q`/Hw @L @?` @0 @ 0`@@@@i-@@ H @P R@(H@$@ P]` !Y@0 ,_xVV.OP&"Ph&@Qy^ @=  P@`@ RZ @ )@ ) % @ 0`y  X`( 5Z/$%iHw/ M0W`[4@g I0 j X p`  0 `@ 0^   @@00R@(`Rp($ ;P(Xv@.H J`0b@?0 ( .IX ;|z$$iQj@Q :$W:4 @@ G@ @` @ @ (  @P ; `  $(xhch p$ @$)@@Qh4`I\b Yy5l (};[4`P 0z h @@@P @jWp @ P1 -P ]` $ $%`(`=@J tJj`tH-5Q [x5{yEk0-E@e@4@`@ @ @(@@` @ P@ij ( p%@+Kf{h J/M/ `(UDhP׳ (Wpp& QF \ @Z8j]R  > 0X @`@ &^@(hP@( Hh@TP @).P +upJ0fԀ( PI%>]@{@(Pj8l0%{BL:P --@njQZ4@@ 5` @ @4P @( @@($`V6H ;@`&aB F -8$: lt% QZD- #=zŀkx(@ w jvx6ہx5w5pyF 46` D04 0X, $Z@P @` (+-P5@1@pvHi %K@(ـtbo I`&6$rm`(N `-oup(J &B $  @Q  րM@yjPPe9` 5` L0 ,  P @0@@P H P  .ih@RiIŮV@QoO@@K K`$` %`[0'`7jZ]Ep-<Ep%g`QIF 7} /S:8/@@/ @6op =;9p~ `<6` 0&, P H -@@(P J=T@a@+`ā 4 -nZX }T ^ `_pJ'WhG YiE Z=lځv5>@OmkO` GW P@Mx -pV` [` 06`L X, $PZ4 $@)5 P @0v]~+[ ) n]<|T :  K@$'hZh Ny m {09`P%  t,.ں0r{=nշ,`m`/ h נ@w d` ` X`e=@ ( 4H@@P @(  @`@@PQ -^KMW@j /+ o*@TJ$ @ ^#`$^F^ /Qn[ V `  Mm0^,Wz; "@Z`N} ` 4X`e00,-@@@ i6@@@R@( H p4W`@RH-` xF>h:@ +nR~(@b.ՠ %͸p +u^#@((&PdDm -;h]DM._ҕ:im@p([]: -`oH@Q >J6@lr "l֠ \#`@j` ` 02 02 4@( @h n PSi@i-ixlv @$fhPCрh>_u J {M:bd)V+j^0(;F<iZM"#p V_ ; [Fwzh,  1P`a02 Hj@l $ZQ 0(K[@ CJK ZMR@mKI' [$nQ{2m^׀_]U78V@17VN>N@ z{7hj!c pFvh۠ j/lx2- k@0 p`` `eP@i@nP@( $ +P_0J@P `0BP]@Yi^^c)_`pZLb5}"g-t~ KK-bjBlH^]VgV N|?|^ Pk`Qp '}&M^ln.z[`[j ];5:hp XI_@f.@=`e0 02, 4H 6@@@P  ^@0 Wk+ v]@; y@7JuQ7@+xI=;( cfJRrnh \`]@ƀ YEj[݁_V(wM&wN@N~@@˺i[?~f6^@MnxP2Y|@ -;Hת#}}kf;=;=$z@` x0,0X`aXH@tH  ( i >0H \ /0P|R@+IŴ_p [@ S|P RwJ< $`)i@RWup% R]@P꓄ -`%vRDQ{]@PP :;$p@ V`=PRZl x @5@ J@6m@uywP2z`d90, H @ (@@@ZW@04Z]wH#{lR 9QMv |*[_yRL +^nL]vb`J.;wg NѠ)9%~ SװV8%F > PhU-.h /=;w>4`NV"T#hH~'#j`}>g 7,0f0 $@i@ mPHH 4ipzI4-`VF;GRLio Kuz)݀gb4CR$apZHVVS -;=,,ʰ7*SB@MO (.zXij@@kVh@4w@ lxE*]/0k ` \ 4@ZP ` 0@s T`H 4h  @>@ (.iXj@j#@-PPKW~@kD{n$KvV_ JoVJ5-nZ+7w ;)-eR9_ -Z@ tWX Q[$%tjՀ%)=pZO Ɛ&%v/> MBWj,c]U:^"4{3wEPmz@h z=`0 &@@s`b1P`H 4t@(4P @+ V^ kL t Kp`ijS tK m@\`iOex@k % )w^`)OIF˨_&iK ZRֻ+<7Z_I*Tx !) Q- m-#@ kv =;(]o5m@5`J (wV+MZ٠& uT\tvn"#P.` 3f-@0k}`]`g` 01Pl 0@iWth|P@(ji +h i ( yW`Mvi+h@*b>:yI˜kנ ij`i+x֒[oP$`+OPզV yeQ4~-YE5pa{݀"|uwrWwiij`OZJH;, IO`_`W߰Nr  T@@7v,|w{a]e qm`@Z ftz5p28@,`\ X`f9: m@ mh @(@|@@> ( Q @*kyJ\$jm> Si4$ 'xZ  (L- ͫ==6[9Jۦi]P([n@N9tZaD0 E =;˲jTLL _rɀĨJӰV&vv jh  =4+W@ Dw=^k׵ hT>Rկ=VwV5og]@ЀMhv׈sp&]>`u: .\`P3 5Π1P`a 4h 7H(@ R@0%~ ;o R 5hհRZϘZRzvI R ]\rf WL]iSnPI`M^uR.վ)%P*Rp._]@jk$@@/t9@2ہ;Yu$/S}@+ˏs ' t`U.|;t`gDmWH $,]은̀ΖiD=n_d5?zk`   ZΠ0@ih @( jW Hj H .)nSHK`p _`+OV#PT>. 3? 5k ^:Niu'JIkP$@a+84 77&v=ҳZm, f'P-[TntS`2ް-/ {J=wvz{@M~o+B5FNN-^,sC v:Vv6@29Ί k@n@2~ ` @b9`H 6 n6 VH WH Z:k}b.wvH 7]R@47xL ZZ@i 8p ihV{ kJ,ڏRIU6IN\6Z>;Op;(V_0(q@JIEި 5z]b<@_.WP*-3]@@Z.mH1&[bDj"| k`3 @$W.;8=@e>v/P {@2:^5 ,jZΠ0@ih :-PL P @jVijDR@(ՀU+Kk5J_ %-V+R5/ $KWtI%=WVKY%= "uF` wNѸ~-^ MJֽp` (M.=:/[5gx> 5xQ.*t[BqJe)`0ʐ%?&KMNOH2 #{F\)D Pƌ ERw eqCe5X g@vF w`}>`03m@z`e02uj: @mҐ6@ i@@P@+P4 @iL@ Vk S Հ4|W~2to$d|m@ DZKK 5Mi Veioo j@XI%ͺ+&eYkIԁ-cU jvMźP%w6mx[M6-UW5CK@"fLme@CK(iL0 (; . 6LJv`T&}!kQ@ KpeWZсG])Nm_ 2u` (zw-u`hx`gLiƀ&e`'{@<W2}`f9T*  :RDP^)uHv`i `zK _ -  S@%`4@57 :'mOP Iwj3WP`;QPVJ@5׀_Gg +;t w ӝ@g%㥀`JnOh/%u^z_+-\v P ̜.%e( M?Mu(]!JPၙz 2jXP ī`V[{,``( P3UPP2z0p2zVsl 0$@n:- tZ  5( )^ 4Qp i m$W]XP@+4[:tJb;G@+[ J4o6`‡do@4$٥ZBv^ӋHVr I<Ng@]K R<) $֠PN@iKv|n'S JR` wQvڀ0Rف ^@MZ> eψ^i@B@yj@ t.%/ jt``  1P@s`a 6 m@H@ ( .(Ҹ խ -.vJ)ZhNikFu .TNbXM6Ґ;O t\Ӭ Z|-+MP/}>10,N:zFWnbT{H0jpW䩗:^ɀ% l>)Wߥr Qh O0+7-_+>n iٮK ^$ &iN͠ {y?p])T@ĀBzFV _pR`e/^M@_ z @2 03p f9V:@mJ@ t 4 H -RKH ( mjo m{$Q @j% pO j҇I %3 )JI^ ]՟ ՀƜ"-@1 K.:e nI@*nRq%Mdy5IS )_@&mß V %_yV~D &=9D/K6-hf\hwr Zj:Ζ_6BMNP2ֺ N:i0 mˎ4`@Î%˞{>2-7 \`e @`3wkP2@2ʠ9*@m@H@P@+`RRZ4:VxKTJ@|7J{\-Jo i: D*$ uJR}!p* *Ѹo`)`7ihZ&ګn$\)7V4J=(zL/ 'JPR\R!װ̹-94P&'9*{ـ9ޞ@7wpvMޑJ:OVvi̯xUo3 Kp' 0Vn`}`״WM5~7}sV y׸]p3,U``2~^ 02UΠ1P@m@ ti`4@P@)4WP5y@iKHiYRe Ij,C*<i %{0$٨Y05ː(J#H{pIaӨ Vk O5$z`5^}`-DJ]Rr@K[Z>j^m? 4 -i*Z}#@ p.j&Tˤ4M5@ p-* 62O) N%&@>}d Y{ywUIi? wz9pW@;u\t}4`}@! =}S`2vww`e> `eX`enː*@suΠ$@H@i4P  P5H wHR_4v 뷿`4Ǹ@u45mu@)сvvIi N9|@ڋ:Xqj&l t_WHxBN:с%?*]{NUDl vJe߼}X/υeZKD'v)S? Yip Z@W 'KDJ0:Em(eKjzj2mvr8x6v=ZQ twqw`[@ n  0} uΠ9T*@H 7H@ h@ @(+p E }4@*5>`3XKwVO}V6KTX(J#_x {fK͓?Mh҉`)h0iT7[F.gR\eo t]l .hN|g_ =@^C{TP%4nk|ZE#P'X:WyZe+Bk Ii-bZOϪ` t":jjbN9oe{` wV Ni:h^@eTjl p{ -@s ;h8mk`3@vz02`b9T:P@m@ th 4P6J+ +%nNk50 k~+eW?åWB&b#2N'j]tSٿaE bYŦ.GX*?B~IT~ bza~Cuz> fԾ jzY>!|Tw^,?TwZ\Cu~:uZؼo"ë1tFZ]ONl'Ws^wKTlVikI@ -@>Jqu66%88OWLͮeWÛu1Wz' Z} n'1u^⾃7|⾃7| | :ׂz_2sZ:]6sZ:Y6s~V_?W:߁ռWGU:߂z\'e_$u1?:_v~:xW?Hx7 eUzE> kZe8ijq7;Fw1)t7O]]×P? uz4` ?hh 2@e`bP@s tҐ:RE@(h -n`4 hŀ:S kMb {k .@zNXުۿcKQVjn8/r03$ IH"#))`2i"R i>OX4F%js*EcdizA>LD_':zU3L9"&*e&i4P -Ov;=61p0&U+T&SLfbRI$-o7@` ) (" )@)ħJHL~~]Wm1>-T,;S{㯣jDZSm5zY02k:?{˽^e;nz02`eUΠ9*@m@ t.h 4m@:Y@.ixo - ({m??4/ݵCԌ, ) H $@`I@Y|W;R2C9ܷvcdWNc|џKi`)}>Z[ rsE j~K AKzϩQ,!8 )KIID) 0pu2՘u/]g,sH#1F}/S+.ަ;3ۧz k2kul "x8ꌝ0=XkاO7J#)( i A%"!-$FB3UZ#/[u9m1|$__xo掆SG]ʗӷQZ.~GnUnd4+9k~җ=I^߭7-"2R!-#) i aIH I>'XT7_DVehH$D>WY{99ziw7l<@˼>@Vzu,`e2` 02d V:P 6 n:RJ@謐H  iH @ij'`P@kV^j&l|V:tƩхUoS+MMW!ᙺrE*]MUU#Ynjat;¿0lK-R0!%! D' $@` $`"UuSE.IjN=1_-6Z.L"Z D%1FƓRéR\>!OV> N>zb抧 (+311UtkKܢ7#4a]Q81.Էb4 V4WXxI[ߡQK-k<|z9:jâ^"Kۗ[=V2нiO6ri"P@ (k܄HBL BZ!.yj00wu"g |L|Zu2FH $@<}UI*nr75E]S -e3TLvKNqv/'`T^f8oc͝~`"[L-IvV.f` W:lӝYenf;oև҃@) @f|_X:e$c8DWNqder4J+eæ^(B&bq2k8Q hmSzV) R!8|^#}k|ACy*@70=n ]v- 3`d e02`ruΠ9t@H) h / ]` 4@* l 4W@5^`^ iY@<'՜V8 굩55:ѧkO8') j K}f*U?WC4b>L=\76pJz=lMعN"m՘|fi-[=ffH IaIH2 x4sb8_2&pC3UjWÊERRNH+1F}'S^s ^_+NbJMCh꩷VNg.kLf1Ƹwëp:1pUV}T{ITWLR44xyfmJ*Q:֊su94uiTV7FU4:p6:e2fˇ8}{N7V<-SjiޞFzkG?/XUz*+J:Ys=gax<*)LHůUSu72u☈9sT6~J__S߳46"ޥb}aM8f]ԥJ̖ʱ \.cb{t^Zts+2#>S]\TSLn"::I㍉^6#/h̷"0ERDe-$AkKįRniχWQ-|fsYlZ%V6Zm^\һEu >K%ps'Lj_Է]5wU.k:w{bb,ZgҜ'T(QWWb][3L1-^xs,Y_3RWs2)ÖyrxSgڈ*]D>ՌTlQɽi6H+BqZQ9PoζmΛy.$ § j 7f!fmUN[MYlᤈHFSK?k|koe@ ' -E=42݁ gDX`g 0`su@n7H) tZZP [ŀP`4:@* -lY6w}zGDj1X{4-KV->uub)W/F S.zzcxELpM~濙,iO{/?7Zv=H{BZHBptQO5u*i[DL10s*7'o4zD|1U~L{.15S1Mzv#ޟ]ףaNGk+Yb h?_Ahi,㟟r |g znR2]Dت=zf>_OiZѧ(Q18ӉH$FS"2!8x="%|ѳ԰jY?s8_]]V!Fkg XԫwOu48\xN6[3J_/UuU=k2sM'1>yɤBZHFF!// L=].e&-W" 5ٞ֎Si +7oj&qiyZt>Jy2OǪSi~R'jaORm-9Ac/qʸALc/.9p)NV֢gTKr^3`p=cnGTNɘt-$jR 5d)>O7tͩ>O誓 S#;6Q\r=%}~7FkaqZW juFUuj lt0*UKIQ \U{59~'_3RWH4 jF%ׇU}ZODNaK3=ǫ )t>ӯSnbk9WV( ?,j1Y|bbKLlMvdIo2BQ755DNWVLK{\6_ujtkJ|;~ zqK  +RiITUڦjtDe%! [Ҭ?Sru>o{ߑewr\x5=@6Iwl ƏP7`e02 n@`e01^rUΠ1PH 7H) tZv )vIUWJ@ַ]7Z]@a*XВ LC{CNj} yb :{[׸8#O^^xjyҗLb8dLˉ5ei·}_ |Nsl{IiXp$af)*Uu*iZ"&gLFe#gүJ)o5jZO/՞֚G_?k˫|!h\7JBs% Y{14ȩX>*k*wê>O3g{O|l}Nr3KLc\wfok[L<"رqb?rI}=uYt{8e3\Zꭿo#k{Ӈ^$+s)k|L?՘/nk?&ab3ĎM$BZHUW-TҩqM vz=%^{p6oƭWuQf{ѷkE]\kGwk?rWewsnnߵoՇMyxzMAG^RsUUZ/ro<ۿj}>zas ׅ^cF,m0u*qɫѥ&3=fj_ 0\*饨snT=M1Tv𩮗MtviLŽ19M%x<315\?p>}vCoڷ_<+6|hg×ӓWq*ٜ)t̵εEO=s/Xþ9|.I$IIH8TjwK<ښio_/GǥՃ|RpX骟Z0jSP?i:05rkWFmD(c 6#]~{6bO_In%ѹr{aŽaiQ(jegkׇHei"`3%jN*ײ[j7N>UrqDgCѼ^~זk ~?_'Bކ_>oF (TJ}ULeF!ҚJL2ޗaK1sn0jU{U5{:w|SE5gе͊oNkzEŮSpvK\Ǧ>U䶣]ߦ1g:}YÚ餤y<ÿe*S޳Z3pӽ\=\C>| -6a'ʿmjx[U?OwOƾ1﷋L4r{ڂ De/ſڬ;[7OHyys^P2.P {p2@ 0Xʠ9T:P H  u@ iX /5\ i~i>)9t>碕檕Tx7ݣee}nT?4+E3[GT\1BV=JnUG%M\\J믂(s[:~fZb"3bXfmU3n͛zi-[Ԍ FXj&fqq"3/^F^sYN>i^_[V[5SJ3G=Wg>e*`S|1pKy;d}vUaKåFM>-nW6oѾ8\N[ 9-s&ۓoh]~oǭ*ס]oF.>&W3Vg &Zѧ{54tNiR񊦚UgE3FΏ5> Fx6G,L 4ՉNafԙοƦʣ1L?zLf?'d<.L?W}վ]]sT[Sy%KO=xqM>5G?W 7ʤzDӦ튢u41)b?&.Ipz4? y5Ro*^>^iPsLQsj<;ҼJq._^%5/KfւS=ߖb11?t"*ESr']Oᮯ[]6߯j([s?[F[Q4N.=Kƭ{Uv#WzxZƚQÌ]+ŚT6b:V}nC$Q.5q*WE㾏p7`?fje7MX/,*0xף|3ٌuՁ*+UM涣CkQU5\OM)(HЙn:SII4Z!VRM5 5N3H,<9K-;>=~jE'e^~WUNp|~ol53]3L\j0Ey~pIW~m=O~5NJ<%|5^=bS|&QWAkZxGG9jzk?QF+JiUsTg-hcS}WTSߗ2[3aƺxuR..6.*}騚,LD)|/a~VssS?WO^'$8t]MSEzz$`<3LaG򹌎WEYEԩ )8lޝ}X|&-F\jUcծ-^4&n0oYf9+D:SIY4Z!ҚJ̭M=LEOb)t+ah+2C4LCzWˬ\NOc5gJ{A-X?1cQNcQ}G:,l:tbխ-W몆zY"i򗞌bcITp,W/oK4pY/ <ßN&~mf-c-1ħ sUUNG.jˣUTLT;!27Oc.~ZJS]\Plݧ~4k۝js^7z&c\l|Jk(^Gً~޹UsSӇSg%*Ohڙ+ނESDdQV5K1W5;^=Wy93r8:ExS}*sٕTM}g~o.'Ѭs.]{mSWF4zcahyjtw7ʬ?[]NXtSnw)D_(gj-rs?m(!/[I^\ջok^N=iݥx}lJ5K˻b3]s~)#U*=f>#ZWݽSvr=zZgw 8yæXMUx#wKk9G᧩3_#pp¡E4R$n6]m.Zˠ,6ަ^g{'7_yK^=O}.n-K%zڿ1v`j=igizZ*TU*iPp^'Q O;J?k߳A5,FOG3~._M9Os<kr?SC}|<޵ ~ @pT[>'2X/M@e|@;` b@P@b J@H@i@ HS@(@4 @~]|5 Vy aXڟ?#LIoWAd^o'V];UQh3]p%F%x^>TeܦDǏoKuSp7i齜?YgXվ-O}4=ouG,oOMW?qf]l:SIYM%fVt+aҚJ̭M&Vt+aҚJ̦!i+2C4_ IY:SIZ!I\!?TP!S`ҩR+ jiGwc=ZWWKswzLpsOHZ/oK5?EK58>o)©b`Dra=9Sz38CKjۮǣY\7 +5}b,8JZ5zϡfg #ӻVq#Ajhx~|T\'>|@u/]?ڤ=߇>O/X^!X殗M.*ɟ{SE1]3|9x Ȫ.<;;x|?S_f11qϚE)Biڹ63TZDݹ<{3ןQTp0fV=H;?CNq/)U<"95 0׆[Ż~s҄~sgS%iV.g1˸ǫWW8U4S5?MUSB,O +]_VO5zWk/Aj6)U4fYb)W+aҚJ̭M%&Vå4Z!ҚJ̭餬Ve1Rel7M%fVt&V^UK-CMjF8v'o%>3^F.Q}?o봚f.O'??^[Sצg~cqܚ_=SC}|<ާѝ&1nr{/@@wL2]d`b8:P֐7Ni @iu]Sq`4]WP4O`( + 4 %ZF-&N@k/Vc*cEb.j<^Vj_Z9jβئ^_'q, G*0)b6%~TgU_ !Sn815e.iTRw~-4Ξ=j=yސﱺ44LuJ 3거%f~6"c<rpXܼ}3N>cڙ{fڹƞ Zp/.fN>Z5׵N'2~V24ܚ k"N1}?:)Xu #ٜs˷nyS4reވnJ̭Ji+2C4[Vel:SII:SAYMfVt+ai+2%&SM%fVtDVel>w"38S̓_bSz_{jK~1Qf}5k5kϵ5U5R>)oE"y ݛur?'\lQ;s[ũy$ŚOQݮcǏ1~f!ɊtiJHӻnCzo\˦R3׳p IJ?3OW_[>%RM/~u[SK؊l~3>ε~N4˭M%fVt+D:SII)t+D:SAYM&Vå4Z!i+ҚJ̭4Z!RVeh%fS>!&. ٬F +TWt:[+U"*j?>S&iOOJ5暲ҟg}fDjb{hMȘ{/_ 2@-@˟0&f@p2w`e0r` V*@s Tt@H)VH`4WPSK@TBKg ߨ ]\ pgL&*+`PhUU:*}wf-ob?/ImD=?O52VehJi)2C4Z!ҚJLJi+2)%fVt+aҚJ̦!i)2$L餬ͪJ1 Jl?2>z^SC~Hoo\zQ}c-[~'li!S3 ˠ wRMEj {b~Ok}!f?eSp*3(5Sҟ?3m[O?6m;\|詤̺8t+D:SIYM%&Vå4LC4Z!ҚJLM%fSJi+2C4Z!i+24LCtVef%r#+a'_4f1kiTEOcotXӗ1'AgLG)~oumy2WmwiLBwJ'kנ>5Ztҷr4JbS*r7-æ+7szzUl݋Qj4w=k̳:SII)Vel:SIY)Veht+D:SIYM%rCtVe-IY%fS%fVmRVe8,ɮBҢ5(҇] ʚY׺}%7{j?>gt:w}.^Qg^X^$  Xk``|P` `quΠ1PH  tHi6 ^`+5.440{0Lz '*ZLjf?/FlJuƯy?*QɫYTOf#=N饜iV!ҚJ̭Ji+2C4Z!֚{[Veh5xy%))ҕY\Fg`jih߹8T~8gyj?]bR;VbgXIk{DxCp3;c`nkfyVۻj-h0Tԙl6+2Ji+2TpڤڤS  URU?YJ7;+vv.Fߢ*\ fG͞Nl:#>|epM%&Vt+D:SIYM=LM=̭4Z!L? y^p9|&ŮæJ|/yZ~/OdߋźiMqfsxW*TS<>Mw1O9_*]?ƦR~?VYt]b|ڢV&3m̽4[ Q\ HmRW)J&Vn3NV3+n\~arF^˪ʺIT{ (}zz) 5c%O\//KчL3,t+D:SIY:SIIM%fVtZ!ҚJ̭JiܬVel7M%&Vt)j2CjNTTNʿѯ=^?/#Եn^(;=,-dg)>h鬁ǀ/i[GR[zX/}M%fVt+aҚJLM%fVå4Z!ËՋye*ÏT4MWL~_SO`t0Ӿ0)VT ߍ?pO]qM&)HJi+2C4[VehJi+2C4[DRef餬Vef餉6YTaIL4KG잌AEyվMl{βxۀ=a~%Ɨ0/kY/GGьnc~ͽSo=M'&_At+aҚJLM%fVt+D:SII2W+a_V{GV.#u}a5棾ٿtqFo?dr<S-0hXxt-)(H۵\ks2nGLS,J̭De-$W)"ef+3RiiMt~5?j^Tܧm=[̇Өp@ ek  ]˰ =@zX   T:P 6tҐ:RJt]V(V ) ҰLK` n`4[0u X*뢥 ֛\G8-8,GVZMS3]e< ]uuq7z(8P̽L:SIIiVel:SIIi+2:SIY) IY+I[ J1 *J̧ H[ $FG×yn#ǧ1W.Unr~(]F=ov궧=.04ҨKP{Njtjie*T[ )}_P4с!՞&BEo<X9,|JpZWUSne׿F|lצB{qj-E>r49b!ҚJ̬M%fVt+C4[Ve1 IYM%fVnJLEILCjYi+6#+aI0100kģ ꮺJRնDMUSLfd&fq࿄H03+G~qbؕktҗ{Q7i櫱Jm߫OeYoFWz+ipp՜۠/<.g'F>Uֱ0_.{b&iz_8Ol[RLջu]>{M%s4h7m;Z"&qWly?WM'eՈt+C4Z+D:II+D:SIY4Z!ҚJ-Jh$L I\ҤI\7Ѽy+iM8*k})WkݳN|{#-=^OzX?|G%9n&_ B^IkmZٺ4:jlS{Y~vwCOo4 fOtZ@&.]@3hjOP2^ ,02`d@suΠ$@n: :Sk@6P @h5 w4@S]@ҙL (04 p5ځUU4L s4%L|GMtPջ7faQjuC-6.UʙozUXY^'ư0QRKV*T3&z3TG]SMe76gG%W|=5dnlrFϛK'ӍzG?ly'h}g̬(U3?N6㾐__^ed;qHrI^_Y+%=xGG}?ly&ϙY/O?I?rF~__>ed>__>_Y?=3zAx:=Qc>_Y?=5YWt{/ܣǒwW|លA-e~:M3x>b(o/~}9ZzCz:=Qc=&NIzGG}?ly&Ϛ[b#>gwod{~:M.~]_o>sIsxRWbfsj)|"#z}ɪcf^W%M9<jMMN5\f˟U5S80bʤVoMRn:q: GHJ"|[`|~%øfo0 7S<ȉ)b9S S8?⯸֬k[E}í׽/ĽnǽU$h~%{u[F(_p=OU$W^%c߃d Ѹ%}îXꗽ_mĿ,{uK胏^%c߃^e'~ݑHWE}î:vG!E}î:vKCl]ݐ״R-/Vp$_o1+N⧂UE5355_g,5QU* Y2ꇮ`g ́;?  03;w,P@` V*P@H 7HҐ6w@iZ׎+HS>uI@kD I{l[Npig-{ux- (GnU_GoҌ7SjjW'Cø^_)Ric^ cU]ֳrI59i20# I# m2& $%xыT3IΞ&eE?g\kqf[ZƟN̎ڟgWFNbfm&q ZK6f|_YTXm婂02U[NJ`c3`WħjEULfU4FS/keUNCz4Q3O?'XVKIc}~]}@Ԩmjy4[ξ sb, \)Ҳx׉\Uq""U7om^al259*Tr420k# J7Ԍ''2Ҩ'%UR#JL'+N_`cxuѧw6=.n6յ.Gࢺq0%+wV;9'SQj]zxin^a>oZ7o鶅<'4om^%.'poWÊ_ŦUO<{KjN*Rk96Z1 1fc `3^P2,, ר@b9t@ th`H(h4P IT]_V߂f9EV@ܩ]~ ['`fETj\ࢼ~υ]TZw3Vib$'-*rr0wa9iVF܌''V`rUda9\ Xa9*0_r0ds,f(ՃBëZYj*(kڸg: Noدgj]{.nGq8Q<9Kb8ǣJ3EkЮTsO^E-4߸ s`a02@sUPh RJ@ t@ZR@+P4"&b&y;, t=\r0΢?2'ڌ:kO} =f.ʅz5֚e1L^,OΈjOE M4opV\1ss?(Vj8tQB增U&fy}GUUjj]5|7i9],6Ҩ'-܌'-*AȘ2ګČ'%TF # TЌ'-*rڪڑT"0McZU0i]u)ZS"TDf_?1[/Kǫ>4uO׫WLz_/5fcbj~n[EV8k]~~ojre8ؖQ(ٷDzuOO7yo| iة)ֽs~wx6,ѹFa_5/% 0f~ت9KxyYV0cW2k U.7k(qW iOxÏ2tiƪm&P vN53:jR#[U!i1͒c`X+:U k}Y{8a.ښi}gQ=9,e8xַknybR諍n܍}2V#[_r*u;WFw#tJ7SV'r7S}a>ny,NnAsTZ6ꊩV3&,UVNs1ʨrcyrIMYz[_fQTp v"xUXu*q䫾tMQUO2{AuC f`25`e8`+@s T:@j:R)Ӹ)~@i4 [l|_bnޅ*)4M\,1*ͦUڧhLszi¢F hGy(ML2&;Z]UraRdE9Ěx,5jk\;Sekv+84Fj`r ȵuE5QV즋N1<+j5(4-f8+oQEsUl]VۑS#u9c1G>6%4S֦M6qL+Ui̾foV:yS_k_%vn}xQ|ԯUnV%_ZٵَƷnLFfwMC*Y|&C3-w苔;ST۞R4׍*hWMKQ4W.܊UZqim7)63 Et)rĜW™[w_qxV}1;URXt-*}L۝0_qO7Tpՠ깣vr5*j\]01W41Fdp(kJ\5͑D*iU-֣ vbѽ5~Vh2E`Ul\ MaM-Ds\UpMثٴSre^Н٦DН]5o+o88yJ=f=Ntdfµݦ`\5^3<xES Tԡ[|2uP&TS_5y=\Jl\*}Weg+2f^.=0HTv/{.KcSF%qnj켋]cR(s.άp"J sES9&Dap#x4/_Or19cs WrԷ5P]^^:^%^0F{eYGd93aa_qxS*Nq7^bSTG(Rn<jZ"&YNL21q)u>%jB*)YjM+#YkeUySJ箤݈gTGs20ڪ^"(ڤñ5}NYJZ%4TV{QWl̵OEN#%YON5)*pmsG|U8kO#NJsT\Ս>eGcs.Xظ+SC_͛VQxZP% Dl04~|s Z|ɺjZ4bI]6 ؞RoLso.G\W{9weXvf wb! i`3 }YC ɝo IpectxTUnM9{W,(V5fY(ҽq1*6gUJJԽ+/t4jɛ9aÍX5)g'GMZjWN' j2)v2d0e-^a9M3x~c^LCCU]=-c }|\zhi:k4ɥ[s\C_H\~Æǜ;pY| UtݪWފ#zs(Zr9+߫&T2(5pT*IzH­Jӳ)U5c 0*F;0)ہM`͚櫞wFJ* c񇑭T|Ubx&4֘.;TzLC.[ އld5&O'+_ >ı3TU=ЪMSuZO LrfO7JKTы fF$`ȑH1h\JUHfi䉈ˉGOMo{5ZMõKff `@ ``g02@súh )h y@(uӖՇmQJTc~ XظRpLSω5L)9i0dAF0ď1 )܌ ͵ i00d)3#O182aKPDF1a.YGE* $Y{J`IPd`) $a[܌ '0dWR]IrLhuT]# s9w:vZPml׸RvS+ޛNTj)<׆wԌ{>05 xq͵`S,`Mi|n ʖޝ pLH`ȔG\|A.vRsM2`ʞ U9RUkp ˆ$S̬2J̫UU b4@S7`*Rj}XJ:SSif2`0 &# ʙ2̌S;g*A ߐF 2W!0p NT`ay0el0eʺ)̘a.5M.*^fH1Jn:P`a 4H : 6@i:S`UZUJ`]F zz'u2:`UJO=# \˩FJ`Ufa9<2yծ0dFaZqNJ&,0U{'%WG[<ękbLYN2&*&յeɊQ4-],z FI> D+[_+4Z6KbN;GmP-@#M(% Sem6;="@ϸ R㤁f@Su`36vn FfTF 62 ZfS@3`6[l`e 0*Π0@iZ@K@@P@+@+P K@PPO( -oMET)r`+H vĀ@ G`u4MP Km-$NK}\NMN7l 7:n[M@$3 z )'}[=,Iވuy1k=Κ^@z5{=@vzK}η`^`eWNր2~@zk.e|}@jݠ`2݀@ ^;~e0XΠ1P`a 4h 7H@(ZwH@uK[Ҹ @5Z@V :ҵi;)Z,N i7xn@S+~ 6 zO@4Z'.&)6p)Zp-!͝m ]6S7)2x9VjaƀS.f3eM5Yy6SIp.'X|\~P''F͵z¸۰g > 1xr+ p` @M@ @e> 02-΀ Z` 02@s T`H 5H@m@P  @( LP  `;P u@+.V `ii^?~]tq`^;Sk1kKo۰}_p$m\/ K&xNߪoON+$)iݭ' ? in| 2k耛I '_*@^ Ơ {*? 6P+:x;8 v` L@un[p Uw]m8`2nuzu-lfo(p] ,6L Tj  k@ H|@SZ5 Z (P hj6I۰ kkS}vӰ }zZ4 }, M Q=@+ir4}+I0 bͤ[BNZMw=2kڵ@k` W0@l}-D'{;W8J@@,n;Hޠ ŀ{9P > 0202g`` 02` @@aX@iZg }d@h 0ԭU@2SN3`J )@0:g>2 < H5MSUCwU.J RN耥Unnl̀*' mS-߰2\N>=UK:3NtnS\7oY@\=d wuMqPkm@ al[N6nwog7 2p2 f\OkH}Pv3 6e66=%H`@s`aX@iNn@@@@T@Vk`Ni0$eNj@SN6N)O@f3`}@q>j@@dV7@I~<; @28z*°Z@5 wp$g7P.eyW կ - \N`\+st ;Mq0@J?P3@)MzZ\H2Un .e޻ksC\^ SLnۀL7m@$`&M`Sсp$n܀6 &X`  -`e  L;`2P$ ) `) ͵V@2 }@S=0sl{>SkOp5635{ƪ@SR.nUEPjK@.nZI$]U[2e7潼Rsm `MsLsX wճ@Msw @Mj&*ŀV2 @`'p`gsmwߐ6d_`&H3 Rd l 6/P0`e-@P4I` (  `2 wS26 `); r {0~)4ЮI R܀G02OS}}SI o.\݀u@)I\ կh@N`Np)s4} 5yl MH~ R@N@'@J l H l@$@ *P2, j@h`; 7M 0d` 6;=S{ l *7}d vU>3 ]M̀0)U{`swO \@ V NPe݀7Rgp.k7p$@60O` S @@@$ @`@ f@@ H@$p $ @` 02Z4@R @ ; I& &6Ln 24  3mo R0 s0);H *7p \ npizHk@$ Ysjߐ4ssw`Shx5_) RZL7? o aH`SH&'oH6$p `R` @ ^e0% @(  )L@@@L @d0d@0)@ ~@RuH0U.mMOp.h.`.o~\M \R \MH @'K62 N  @H6 @f@) l@@ )`@  @(0d @d $d@0) @d@ vOMd6 H H .m @3`).nSh$`\ R, @ vvl @` @$ @l n:HH`Sn H    H`R 6  ,2@@i @2 2 2 R H}d@@$eK̀ @d T* @Sm̰)= R )Op$v) R R  R MLHH`6l cp HH6  R S@ @) @@@ (@d @g 2 2 R 2 2 2 IH`R R SR R S`) R= @ @ HH0H Op)) l HM@HHH6HOp `@@@  @@@P H H H H H H`2 H HH 7w) HHHH HHHH) )))l )l@ @$ @@@ @$ @$ @@@@ @$ @$ @$  )   ))))))))HH HHH H HHHHHHHHHHHH`R R R  R R R R @R R  R  @@d@ @ @@ @d @@ @@ @d @@ @@ @ @d @ @ @ @dn   R R  R R R R R  R  R  R R  R R  L@@ @ @$HH HHH HH HHHH HHHH HHHHHHHHHHHHHHHHHHHHHHH@R HHHH HHH HH HHHHHsH00H sHH0HsssssssssHHssH HHHHHHHHHHHHHHHHHHH0  R R R R R R 2 R R R R R R R R R R R R R R R R R R R R R R R R 2 R R R R  R R  R R R R  @@@@@@@@@@@@@@@@@@@2 R R @@@@@@@@@@@R R 2 R R R R @R R R R R R R R R R R R R R R R R R R R R R  R R R R R  R R R R R R R R R R R R @@@@@@@@@@@@@@@@@@@@@@@@@@R R R R @R R R R R R R R R @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R R R R R R R R R R R R 2 2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@rubyworks-brass-01bd698/docs/index.html000066400000000000000000000061241516256704600201740ustar00rootroot00000000000000 BRASS
rubyworks-brass-01bd698/lib/000077500000000000000000000000001516256704600160125ustar00rootroot00000000000000rubyworks-brass-01bd698/lib/brass.rb000066400000000000000000000060721516256704600174560ustar00rootroot00000000000000class Exception # Is the exception an assertion? def assertion? @assertion end # Set the the exception's assertion flag. def set_assertion(boolean) @assertion = boolean # ? true : false end # Set message. # (not strictly needed here, but can be useful anyway). # # @todo Does the message have to be a string? def set_message(msg) @mesg = msg.to_str end # Set priority level. # # @param [Integer] level # The priority level of the exception. # def set_priority(level) @priority = level.to_i end # Exceptions can have priority levels. # # Zero is a nominal error, the higher the priority the more severe the # error is considered. Errors with priorities less than zero are taken # be warnings, the lower the number the more trivial. # def priority @priority ||= 0 end # TODO: Consider assertion parameters for future version. If message # does not have to be string, it might serve this purpose instead. ## #def parameters # @parameters #end # ## Set exception parameters. These are used to store specific information ## relevant to a particular exception or assertion. Unlike the message, ## which is a String, this is a Hash. #def set_parameters(parameters) # @parameters = parameters.to_hash #end end module Kernel # Track assertions counts. $ASSERTION_COUNTS ||= Hash.new{ |h,k| h[k] = 0 } # # Universal assertion method. # def assert(truth, *raise_arguments) $ASSERTION_COUNTS[:total] += 1 if truth $ASSERTION_COUNTS[:pass] += 1 else $ASSERTION_COUNTS[:fail] += 1 # if fail set assertion=true then just, # fail *raise_arguments # but alas ... fail! *raise_arguments end end module_function :assert # # Universal refutation method (opposite of `#assert`). # def refute(truth, *raise_arguments) $ASSERTION_COUNTS[:total] += 1 if truth $ASSERTION_COUNTS[:fail] += 1 # if fail set assertion=true then just, # fail *raise_arguments # but alas ... fail! *raise_arguments else $ASSERTION_COUNTS[:pass] += 1 end end module_function :refute # # Alternate for #fail that also sets assertion flag to +true+. # def fail!(*raise_arguments) backtrace = case raise_arguments.last when Array raise_arguments.pop else nil end exception = case raise_arguments.first when Exception raise_arguments.shift when Class raise ArgumentError unless Exception > raise_arguments.first error_class = raise_arguments.shift error_class.new(*raise_arguments) else error_class = $! || RuntimeError error_class.new(*raise_arguments) end exception.set_backtrace(backtrace) if backtrace exception.set_assertion(true) fail exception end module_function :fail! private :assert private :refute private :fail! end rubyworks-brass-01bd698/lib/brass/000077500000000000000000000000001516256704600171245ustar00rootroot00000000000000rubyworks-brass-01bd698/lib/brass/adapters/000077500000000000000000000000001516256704600207275ustar00rootroot00000000000000rubyworks-brass-01bd698/lib/brass/adapters/minitest.rb000066400000000000000000000012421516256704600231070ustar00rootroot00000000000000module Minitest #:nodoc: class Test #:nodoc: # Override capture_exceptions to recognize BRASS assertion errors # as test failures rather than errors. alias_method :capture_exceptions_without_brass, :capture_exceptions def capture_exceptions yield rescue *PASSTHROUGH_EXCEPTIONS raise rescue Assertion => e self.failures << e rescue Exception => e if e.respond_to?(:assertion?) && e.assertion? failure = Assertion.new(e.message) failure.set_backtrace(e.backtrace) self.failures << failure else self.failures << UnexpectedError.new(sanitize_exception(e)) end end end end rubyworks-brass-01bd698/lib/brass/adapters/testunit.rb000066400000000000000000000021711516256704600231340ustar00rootroot00000000000000module Test #:nodoc: module Unit #:nodoc: module BrassAssertionHandler class << self def included(base) base.exception_handler(:handle_brass_assertion_failed_error) end end private def handle_brass_assertion_failed_error(exception) return false unless exception.assertion? problem_occurred #parameters = exception.parameters # TODO: assertion parameters add_brass_failure exception.message, exception.backtrace, #:expected => exception.expected, #:actual => exception.actual, #:inspected_expected => exception.inspected_expected, #:inspected_actual => exception.inspected_actual, :user_message => exception.message #exception.user_message true end def add_brass_failure(message, backtrace, options={}) failure = Failure.new(name, filter_backtrace(backtrace), message, options) current_result.add_failure(failure) end end class TestCase #:nodoc: include BrassAssertionHandler end end end rubyworks-brass-01bd698/lib/brass/expect.rb000066400000000000000000000011671516256704600207460ustar00rootroot00000000000000module Kernel # TODO: Should `#expect` method be part of standard? # Executate a block asserting that a type of error will be raised. # # Presently this is not part of brass by default, as whether it should # be is under debate. So this file must be required separately: # # require 'brass/expect' # def expect(error_class) #:yield: begin yield assert(false, error_class, "#{error_class} expected but none thrown") rescue error_class assert(true) rescue Exception => err assert(false, error_class, "#{error_class} expected but #{err.class} was thrown") end end end rubyworks-brass-01bd698/test/000077500000000000000000000000001516256704600162235ustar00rootroot00000000000000rubyworks-brass-01bd698/test/case_brass.rb000066400000000000000000000002621516256704600206550ustar00rootroot00000000000000covers 'brass' testcase Kernel do method :assert do test do assert(true) end end method :refute do test do refute(false) end end end rubyworks-brass-01bd698/test/run.rb000066400000000000000000000004721516256704600173570ustar00rootroot00000000000000require 'rubytest' require 'lemon' require 'rubytest/autorun' Test.run do |run| run.loadpath 'lib' run.files << 'test/case_*.rb' end Test.run(:cov) do |run| run.loadpath 'lib' run.files << 'test/case_*.rb' require 'simplecov' SimpleCov.start do |cov| cov.coverage_dir = 'log/coverage' end end