hotdog 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/hotdog/commands/hosts.rb +25 -14
- data/lib/hotdog/commands/search.rb +5 -2
- data/lib/hotdog/commands/tags.rb +32 -38
- data/lib/hotdog/commands.rb +8 -0
- data/lib/hotdog/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4a7e366b9cd85e46e711e2ca82472a2d278db17a
|
|
4
|
+
data.tar.gz: 502752fef200c4abf66772c31dc0b8f6e19a3538
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 28f25b9273cf877a5c7ee381733f5645eec06e8c40ddb743c6e07becca306bcf270fc4f85a1bc4eba691316cc7d11aac67a77dbab8ed421c11137042f3f03bfa
|
|
7
|
+
data.tar.gz: 587039692f3cc6cb5f7c7436487e8d1300dc54457468e6d19f2075bd9f1b0b6a3af21774ef6be44bf3bcb528749756531b5a490c17cb52f521b449a62fcb0373
|
|
@@ -7,24 +7,35 @@ module Hotdog
|
|
|
7
7
|
args = optparse.parse(args)
|
|
8
8
|
if args.empty?
|
|
9
9
|
result = execute("SELECT id FROM hosts").to_a.reduce(:+)
|
|
10
|
+
show_hosts(result)
|
|
10
11
|
else
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
execute("SELECT id FROM hosts WHERE name GLOB
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
if args.any? { |host_name| glob?(host_name) }
|
|
13
|
+
result = args.flat_map { |host_name|
|
|
14
|
+
execute("SELECT id FROM hosts WHERE name GLOB ?;", [host_name]).to_a.reduce(:+) || []
|
|
15
|
+
}
|
|
16
|
+
else
|
|
17
|
+
result = args.each_slice(SQLITE_LIMIT_COMPOUND_SELECT).flat_map { |args|
|
|
18
|
+
execute("SELECT id FROM hosts WHERE name IN (%s);" % args.map { "?" }.join(", "), args).to_a.reduce(:+) || []
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
if result.empty?
|
|
22
|
+
STDERR.puts("no match found: #{args.join(" ")}")
|
|
23
|
+
exit(1)
|
|
24
|
+
else
|
|
25
|
+
show_hosts(result)
|
|
26
|
+
logger.info("found %d host(s)." % result.length)
|
|
27
|
+
if result.length < args.length
|
|
28
|
+
STDERR.puts("insufficient result: #{args.join(" ")}")
|
|
29
|
+
exit(1)
|
|
16
30
|
end
|
|
17
|
-
|
|
18
|
-
end
|
|
19
|
-
if result && (0 < result.length)
|
|
20
|
-
result, fields = get_hosts(result)
|
|
21
|
-
STDOUT.print(format(result, fields: fields))
|
|
22
|
-
logger.info("found %d host(s)." % result.length)
|
|
23
|
-
else
|
|
24
|
-
STDERR.puts("no match found: #{args.join(" ")}")
|
|
25
|
-
exit(1)
|
|
31
|
+
end
|
|
26
32
|
end
|
|
27
33
|
end
|
|
34
|
+
|
|
35
|
+
def show_hosts(hosts)
|
|
36
|
+
result, fields = get_hosts(hosts || [])
|
|
37
|
+
STDOUT.print(format(result, fields: fields))
|
|
38
|
+
end
|
|
28
39
|
end
|
|
29
40
|
end
|
|
30
41
|
end
|
|
@@ -114,12 +114,15 @@ module Hotdog
|
|
|
114
114
|
)
|
|
115
115
|
}
|
|
116
116
|
rule(:binary_op) {
|
|
117
|
-
( str('
|
|
117
|
+
( str('AND') \
|
|
118
|
+
| str('OR') \
|
|
119
|
+
| str('and') \
|
|
118
120
|
| str('or') \
|
|
119
121
|
)
|
|
120
122
|
}
|
|
121
123
|
rule(:unary_op) {
|
|
122
|
-
( str('
|
|
124
|
+
( str('NOT') \
|
|
125
|
+
| str('not') \
|
|
123
126
|
)
|
|
124
127
|
}
|
|
125
128
|
rule(:atom) {
|
data/lib/hotdog/commands/tags.rb
CHANGED
|
@@ -5,47 +5,41 @@ module Hotdog
|
|
|
5
5
|
class Tags < BaseCommand
|
|
6
6
|
def run(args=[])
|
|
7
7
|
args = optparse.parse(args)
|
|
8
|
-
if
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
tag_name
|
|
12
|
-
}
|
|
13
|
-
result1 = args.map { |tag|
|
|
14
|
-
tag_name, tag_value = split_tag(tag)
|
|
15
|
-
if glob?(tag_name)
|
|
16
|
-
if tag_value.empty?
|
|
17
|
-
execute("SELECT DISTINCT value FROM tags WHERE name GLOB ?", [tag_name]).map { |row| row.join(",") }
|
|
18
|
-
else
|
|
19
|
-
if glob?(tag_value)
|
|
20
|
-
execute("SELECT DISTINCT value FROM tags WHERE name GLOB ? AND value GLOB ?", [tag_name, tag_value]).map { |row| row.join(",") }
|
|
21
|
-
else
|
|
22
|
-
execute("SELECT DISTINCT value FROM tags WHERE name GLOB ? AND value = ?", [tag_name, tag_value]).map { |row| row.join(",") }
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
else
|
|
26
|
-
if tag_value.empty?
|
|
27
|
-
execute("SELECT DISTINCT value FROM tags WHERE name = ?", [tag_name]).map { |row| row.join(",") }
|
|
28
|
-
else
|
|
29
|
-
if glob?(tag_value)
|
|
30
|
-
execute("SELECT DISTINCT value FROM tags WHERE name = ? AND value GLOB ?", [tag_name, tag_value]).map { |row| row.join(",") }
|
|
31
|
-
else
|
|
32
|
-
execute("SELECT DISTINCT value FROM tags WHERE name = ? AND value = ?", [tag_name, tag_value]).map { |row| row.join(",") }
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
}
|
|
37
|
-
result = (0...result1.reduce(0) { |max, values| [max, values.length].max }).map { |field_index|
|
|
38
|
-
result1.map { |values| values[field_index] }
|
|
39
|
-
}
|
|
8
|
+
if args.empty?
|
|
9
|
+
result = execute("SELECT name, value FROM tags").map { |name, value| [join_tag(name, value)] }
|
|
10
|
+
show_tags(result)
|
|
40
11
|
else
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
12
|
+
tags = args.map { |tag| split_tag(tag) }
|
|
13
|
+
if tags.all? { |tag_name, tag_value| tag_value.empty? }
|
|
14
|
+
result = tags.each_slice(SQLITE_LIMIT_COMPOUND_SELECT).flat_map { |tags|
|
|
15
|
+
q = "SELECT value FROM tags " \
|
|
16
|
+
"WHERE %s;" % tags.map { |tag_name, tag_value| glob?(tag_name) ? "name GLOB ?" : "name = ?" }.join(" OR ")
|
|
17
|
+
execute(q, tags.map { |tag_name, tag_value| tag_name }).map { |value| [value] }
|
|
18
|
+
}
|
|
19
|
+
else
|
|
20
|
+
result = tags.each_slice(SQLITE_LIMIT_COMPOUND_SELECT / 2).flat_map { |tags|
|
|
21
|
+
q = "SELECT value FROM tags " \
|
|
22
|
+
"WHERE %s;" % tags.map { |tag_name, tag_value| (glob?(tag_name) or glob?(tag_value)) ? "( name GLOB ? AND value GLOB ? )" : "( name = ? AND value = ? )" }.join(" OR ")
|
|
23
|
+
execute(q, tags).map { |value| [value] }
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
if result.empty?
|
|
27
|
+
STDERR.puts("no match found: #{args.join(" ")}")
|
|
28
|
+
exit(1)
|
|
29
|
+
else
|
|
30
|
+
show_tags(result)
|
|
31
|
+
logger.info("found %d tag(s)." % result.length)
|
|
32
|
+
if result.length < args.length
|
|
33
|
+
STDERR.puts("insufficient result: #{args.join(" ")}")
|
|
34
|
+
exit(1)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
47
37
|
end
|
|
48
38
|
end
|
|
39
|
+
|
|
40
|
+
def show_tags(tags)
|
|
41
|
+
STDOUT.print(format(tags, fields: ["tag"]))
|
|
42
|
+
end
|
|
49
43
|
end
|
|
50
44
|
end
|
|
51
45
|
end
|
data/lib/hotdog/commands.rb
CHANGED
|
@@ -252,6 +252,14 @@ module Hotdog
|
|
|
252
252
|
[tag_name, tag_value || ""]
|
|
253
253
|
end
|
|
254
254
|
|
|
255
|
+
def join_tag(tag_name, tag_value)
|
|
256
|
+
if tag_value.to_s.empty?
|
|
257
|
+
tag_name
|
|
258
|
+
else
|
|
259
|
+
"#{tag_name}:#{tag_value}"
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
255
263
|
def copy_db(src, dst)
|
|
256
264
|
# create index later for better insert performance
|
|
257
265
|
dst.transaction do
|
data/lib/hotdog/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hotdog
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yamashita Yuu
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-09-
|
|
11
|
+
date: 2015-09-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|