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