#!/usr/bin/ruby do { class ArgParse () { class Option (long, bar=99) < ArgParse { method foo { self.bar } } has bar = 42 method option(name) { Option(name) } } var opt = ArgParse().option(:f) assert_eq(opt.foo, 99) assert_eq(opt.bar, 99) } do { class ArgParse () { class Option (long) < ArgParse { method foo { self.bar } } has bar = 42 method option(name) { Option(name) } } var opt = ArgParse().option(:f) assert_eq(opt.foo, 42) assert_eq(opt.bar, 42) } do { class ArgParse () { class Option (long) { method foo { self.bar } } has bar = 42 method option(name) { Option(name) } } var opt = ArgParse().option(:f) var error = 0 try { opt.foo # must fail } catch { ++error } assert_eq(error, 1) } say "** Test passed!"