From 5388442ea07310b966985e348a9bd76e421a7d9b Mon Sep 17 00:00:00 2001 From: Chad Shaffer Date: Thu, 4 Feb 2016 20:59:01 -0800 Subject: [PATCH] Fix host filter regression --- lib/capistrano/configuration/host_filter.rb | 18 ++++++++++++++---- lib/capistrano/configuration/regex_filter.rb | 17 ----------------- lib/capistrano/configuration/role_filter.rb | 18 ++++++++++++++---- .../configuration/host_filter_spec.rb | 5 +++++ 4 files changed, 33 insertions(+), 25 deletions(-) delete mode 100644 lib/capistrano/configuration/regex_filter.rb diff --git a/lib/capistrano/configuration/host_filter.rb b/lib/capistrano/configuration/host_filter.rb index 43f12f6b6..30bb25487 100644 --- a/lib/capistrano/configuration/host_filter.rb +++ b/lib/capistrano/configuration/host_filter.rb @@ -1,10 +1,6 @@ -require 'capistrano/configuration/regex_filter' - module Capistrano class Configuration class HostFilter - include RegexFilter - def initialize values av = Array(values).dup av.map! { |v| (v.is_a?(String) && v =~ /^(?[-A-Za-z0-9.]+)(,\g)*$/) ? v.split(',') : v } @@ -15,6 +11,20 @@ def initialize values def filter servers Array(servers).select { |s| @rex.match s.to_s } end + + private + + def regex_matcher(values) + values.map! do |v| + case v + when Regexp then v + else + vs = v.to_s + vs =~ /^[-A-Za-z0-9.]+$/ ? vs : Regexp.new(vs) + end + end + Regexp.union values + end end end end diff --git a/lib/capistrano/configuration/regex_filter.rb b/lib/capistrano/configuration/regex_filter.rb deleted file mode 100644 index 452646b69..000000000 --- a/lib/capistrano/configuration/regex_filter.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Capistrano - class Configuration - module RegexFilter - def regex_matcher values - av = values.map do |v| - case v - when Regexp then v - else - vs = v.to_s - vs =~ %r{^/(.+)/$} ? Regexp.new($1) : %r{^#{vs}$} - end - end - Regexp.union av - end - end - end -end diff --git a/lib/capistrano/configuration/role_filter.rb b/lib/capistrano/configuration/role_filter.rb index b1db17085..9d20fa6b9 100644 --- a/lib/capistrano/configuration/role_filter.rb +++ b/lib/capistrano/configuration/role_filter.rb @@ -1,10 +1,6 @@ -require 'capistrano/configuration/regex_filter' - module Capistrano class Configuration class RoleFilter - include RegexFilter - def initialize values av = Array(values).dup av.map! { |v| v.is_a?(String) ? v.split(',') : v } @@ -15,6 +11,20 @@ def initialize values def filter servers Array(servers).select { |s| s.is_a?(String) ? false : s.roles.any? { |r| @rex.match r } } end + + private + + def regex_matcher(values) + values.map! do |v| + case v + when Regexp then v + else + vs = v.to_s + vs =~ %r{^/(.+)/$} ? Regexp.new($1) : %r{^#{vs}$} + end + end + Regexp.union values + end end end end diff --git a/spec/lib/capistrano/configuration/host_filter_spec.rb b/spec/lib/capistrano/configuration/host_filter_spec.rb index 4ceb1741a..0ef0efd03 100644 --- a/spec/lib/capistrano/configuration/host_filter_spec.rb +++ b/spec/lib/capistrano/configuration/host_filter_spec.rb @@ -44,6 +44,11 @@ class Configuration it_behaves_like 'it filters hosts correctly', %w{server1 server3} end + context 'with a regexp with line boundaries' do + let(:values) { '^server' } + it_behaves_like 'it filters hosts correctly', %w{server1 server2 server3 server4 server5} + end + context 'with a regexp with a comma' do let(:values) { 'server\d{1,3}$' } it_behaves_like 'it filters hosts correctly', %w{server1 server2 server3 server4 server5}