Skip to content

Commit 2571ae0

Browse files
committed
Added support for name-filtering. This implementation is a bit dirty,
but it works and can be improved in the future.
1 parent 9dc32ae commit 2571ae0

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed

bin/rob

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#!/usr/bin/env ruby19
22

3+
require 'pathname'
4+
$: << Pathname.new(__FILE__).realpath.dirname.join("..", "lib").to_s
5+
36
module Robert
47
def self.describe(*args)
58
end

lib/robert/cli.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ def self.args_to_rules(parsed_args, conf)
101101
conf.var[:cmdline,:args,*v[0]] = v[1]
102102
# v[1] == true means argument without the right assignment part, i.e.: project1,project2
103103
if i == 0 && v[1]
104-
conf.var(:cmdline,:names) { v[0] == :all ? conf.confs_names.to_a : [v[0]].flatten }
104+
names = [v[0]].flatten
105+
conf.var[:cmdline,:unfiltered,:names] = names
105106
end
106107
end
107108
end

lib/robert/conf.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ def with_options(options)
4949
!send(k, *v)
5050
end
5151
end
52+
53+
def self.all_selectors
54+
instance_methods(false).select { |m| m.to_s =~ /^with_.+/ }
55+
end
5256
end
5357

5458
class ConfigurationDescriptor
@@ -180,7 +184,7 @@ def confs(*names, &block)
180184
end
181185

182186
def select(&block)
183-
result = confs_names.map { |conf_name| cclone(conf_name) }.select { |conf| ConfigurationSelector.new(conf).instance_eval(&block) }
187+
result = confs_names.map { |conf_name| cclone(conf_name) }.select { |conf| ConfigurationSelector.new(conf).instance_exec(conf, &block) }
184188
def result.names
185189
map { |conf| conf.conf_name }
186190
end

lib/robert/core/999_cli.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,27 @@
1+
var[:cmdline,:filtered,:names] = var[:cmdline, :names] = ->{ $top.cclone(:cli).filter_names(var[:cmdline,:unfiltered,:names]) }
2+
3+
defn cli.all_keyword_to_names do
4+
body { |names|
5+
all_names = (names == [:all] ? $top.confs_names : names)
6+
has_next? ? call_next(all_names) : all_names
7+
}
8+
end
9+
10+
11+
defn cli.filter_names_with_selector do
12+
body { |names|
13+
sel_opts = ConfigurationSelector.all_selectors.inject({}) do |memo, sel|
14+
if var?[:cmdline,:args,sel.to_sym]
15+
memo[sel] = var[:cmdline,:args,sel.to_sym]
16+
end
17+
memo
18+
end
19+
20+
filtered_names = (sel_opts != {} ? $top.select { |conf| names.include?(conf.conf_name) && with_options(sel_opts) }.names : names)
21+
has_next? ? call_next(filtered_names) : filtered_names
22+
}
23+
end
24+
125
defn cli.process_cmd do
226
body {
327
cmd = var[:cmdline,:cmd]
@@ -42,6 +66,7 @@
4266
end
4367

4468
conf :cli do
69+
act[:filter_names] = memo(cli.all_keyword_to_names(cli.filter_names_with_selector(act[:filter_with_user_specified_filters])))
4570
act[:process_cmd] = cli.process_cmd(cli.pass_cmd_to_confs)
4671
act[:eval] = cli.eval_rule
4772
end

0 commit comments

Comments
 (0)