rutty 2.3.1 → 2.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/rutty +0 -7
- data/lib/rutty/nodes.rb +3 -3
- data/lib/rutty/version.rb +1 -1
- data/rutty.gemspec +1 -1
- data/test/helper.rb +9 -0
- data/test/test_nodes.rb +34 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.2
|
data/bin/rutty
CHANGED
@@ -69,13 +69,6 @@ command :list_nodes do |c|
|
|
69
69
|
# TODO: Make tag searching AND or OR, not just OR
|
70
70
|
c.syntax = "rutty list_nodes [options]"
|
71
71
|
c.summary = "List nodes according to [options]."
|
72
|
-
c.description = "#{c.summary} Options are the same as add_node"
|
73
|
-
|
74
|
-
c.example "List all nodes", "rutty list_nodes"
|
75
|
-
c.example "List all nodes that are tagged with 'web' OR 'db'", "rutty list_nodes --tags web,db"
|
76
|
-
c.example "List all nodes configued to SSH into port 2222", "rutty list_nodes --port 2222"
|
77
|
-
|
78
|
-
add_filter_options.call(c)
|
79
72
|
|
80
73
|
c.when_called do |args, options|
|
81
74
|
$r.list_nodes args, options
|
data/lib/rutty/nodes.rb
CHANGED
@@ -94,10 +94,10 @@ module Rutty
|
|
94
94
|
|
95
95
|
filter = nil
|
96
96
|
|
97
|
-
if query_str =~
|
97
|
+
if query_str =~ /^[A-Za-z_-]+$/
|
98
98
|
# Single tag query, no need to fire up the parser
|
99
|
-
filter = Procs::SingleTagQuery.new { |n| n.has_tag?
|
100
|
-
elsif query_str =~ /^(
|
99
|
+
filter = Procs::SingleTagQuery.new { |n| !n.has_tag? query_str }
|
100
|
+
elsif query_str =~ /^(?:[A-Za-z_-]+,?)+$/
|
101
101
|
# Old-style comma-separated tag query. Still no
|
102
102
|
# need to fire up the parser, just additively compare.
|
103
103
|
tags = query_str.split(',')
|
data/lib/rutty/version.rb
CHANGED
data/rutty.gemspec
CHANGED
data/test/helper.rb
CHANGED
@@ -44,3 +44,12 @@ class Test::Unit::TestCase
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
class Class
|
49
|
+
def publicize_methods
|
50
|
+
saved_private_instance_methods = self.private_instance_methods
|
51
|
+
self.class_eval { public *saved_private_instance_methods }
|
52
|
+
yield
|
53
|
+
self.class_eval { private *saved_private_instance_methods }
|
54
|
+
end
|
55
|
+
end
|
data/test/test_nodes.rb
CHANGED
@@ -45,6 +45,7 @@ class TestNodes < Test::Unit::TestCase
|
|
45
45
|
:user => 'example',
|
46
46
|
:keypath => '/home/example/.ssh/id_rsa.pem',
|
47
47
|
:tags => %w(broken test example)
|
48
|
+
|
48
49
|
@nodes = Rutty::Nodes.new [@node1, @node2, @node3]
|
49
50
|
end
|
50
51
|
|
@@ -54,6 +55,35 @@ class TestNodes < Test::Unit::TestCase
|
|
54
55
|
assert_contains @nodes, @node1, @node2
|
55
56
|
end
|
56
57
|
|
58
|
+
should "return the correct Proc type for each query string type" do
|
59
|
+
Rutty::Nodes.publicize_methods do
|
60
|
+
assert_instance_of Rutty::Procs::SingleTagQuery, @nodes.get_tag_query_filter('foo')
|
61
|
+
assert_instance_of Rutty::Procs::MultipleTagQuery, @nodes.get_tag_query_filter('foo,bar')
|
62
|
+
assert_instance_of Rutty::Procs::SqlLikeTagQuery, @nodes.get_tag_query_filter("'foo' AND 'bar' OR 'baz'")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
should "generate the correct Proc string to eval" do
|
67
|
+
Rutty::Nodes.publicize_methods do
|
68
|
+
# New sql-like tag query. Need the parser for this.
|
69
|
+
require 'treetop'
|
70
|
+
require 'rutty/treetop/syntax_nodes'
|
71
|
+
require 'rutty/treetop/tag_query'
|
72
|
+
|
73
|
+
parser = TagQueryGrammarParser.new
|
74
|
+
|
75
|
+
proc_str = @nodes.recursive_build_query_proc_string parser.parse("'foo' AND 'bar' OR 'baz'").elements
|
76
|
+
proc_str = proc_str.rstrip << ') }'
|
77
|
+
|
78
|
+
assert_equal "Procs::SqlLikeTagQuery.new { |n| !(n.has_tag?('foo') && n.has_tag?('bar') || n.has_tag?('baz')) }", proc_str
|
79
|
+
|
80
|
+
proc_str = @nodes.recursive_build_query_proc_string parser.parse("'test' OR ('example' AND 'foo')").elements
|
81
|
+
proc_str = proc_str.rstrip << ') }'
|
82
|
+
|
83
|
+
assert_equal "Procs::SqlLikeTagQuery.new { |n| !(n.has_tag?('test') || (n.has_tag?('example') && n.has_tag?('foo'))) }", proc_str
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
57
87
|
should "filter out nodes matching provided criteria" do
|
58
88
|
assert_equal [@node1, @node2], @nodes.filter(OpenStruct.new :port => 22)
|
59
89
|
assert_equal [@node2], @nodes.filter(OpenStruct.new :user => 'google')
|
@@ -68,6 +98,10 @@ class TestNodes < Test::Unit::TestCase
|
|
68
98
|
filtered = @nodes.filter(OpenStruct.new :tags => 'fake')
|
69
99
|
assert_equal 2, filtered.length
|
70
100
|
assert_equal [@node1, @node2], filtered
|
101
|
+
|
102
|
+
filtered = @nodes.filter(OpenStruct.new :tags => 'google')
|
103
|
+
assert_equal 1, filtered.length
|
104
|
+
assert_equal [@node2], filtered
|
71
105
|
end
|
72
106
|
|
73
107
|
should "correctly filter on a comma-separated list of tags and return the correct node(s)" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rutty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 2.3.
|
9
|
+
- 2
|
10
|
+
version: 2.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Josh Lindsey
|