lib/hx/path.rb in hx-0.14.0 vs lib/hx/path.rb in hx-0.15.0

- old
+ new

@@ -36,12 +36,20 @@ def &(other) Conjunction.build(self, other) end def ~() - Negation.new(self) + Negation.build(self) end + + def assume_circumfix(prefix, suffix) + AssumeCircumfix.build(self, prefix, suffix) + end + + def elide_circumfix(prefix, suffix) + ElideCircumfix.build(self, prefix, suffix) + end end class All include Selector def accept_path?(path) ; true ; end @@ -122,15 +130,63 @@ end class Negation include Selector + def self.build(selector) + new(selector) + end + def initialize(selector) @selector = selector end def accept_path?(path) not @selector.accept_path?(path) + end +end + +class AssumeCircumfix + include Selector + + def self.build(selector, prefix, suffix) + case selector + when All; ALL + else; new(selector, prefix, suffix) + end + end + + def initialize(selector, prefix, suffix) + @selector = selector + @prefix = prefix + @suffix = suffix + end + + def accept_path?(path) + @selector.accept_path?("#{@prefix}#{path}#{@suffix}") + end +end + +def self.make_circumfix_re(prefix, suffix) + quoted_prefix = Regexp.quote(prefix.to_s) + quoted_suffix = Regexp.quote(suffix.to_s) + @circumfix_re = /^#{quoted_prefix}(.*)#{quoted_suffix}$/ +end + +class ElideCircumfix + include Selector + + def self.build(selector, prefix, suffix) + new(selector, prefix, suffix) + end + + def initialize(selector, prefix, suffix) + @selector = selector + @circumfix_re = Path.make_circumfix_re(prefix, suffix) + end + + def accept_path?(path) + !!(path =~ @circumfix_re and @selector.accept_path?($1)) end end end end