hotdog 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a33c6f318f239ae040083b0b5fa2c2650dba0ea
4
- data.tar.gz: a8812e2ddd826bbb5e40b980e5c3a38620b95402
3
+ metadata.gz: 9389d9529203f20a278c0446d57c1ae72e57cb99
4
+ data.tar.gz: 807eab226a18b286a38a7968bfb98ed27525b657
5
5
  SHA512:
6
- metadata.gz: bd017bf022fe2b3f8e6d6a129e361f02aa33c1cfaf3ff20a9fb2c0b322ccd3230f5834142b530eff6f6b7c9637e63165e13959a1e7c5365eb26152ace6e7944d
7
- data.tar.gz: af6f72f01971977d1c727e741ce5bb67926e1732029bea3193976831014e8cddbce4db829568a44d419dc63a58221e9a2e7e4e6e609453a1df515e932ea96fe6
6
+ metadata.gz: ef097ee620a3e70d38195b5f4f6ea32f4d7f439962f68495e7d6997e2e667f963d3ef6bff1395ab524cf5ac0f3a60b812a783a542f5bd74082e207971b96a821
7
+ data.tar.gz: e97de69542e3559ea62b19d1a35fb3d3c2ec30102719596050e15b66ab6e7cff06f05a202670a3a9ce054eac576938f8ebbc698fde046009c4d4036327e652d0
@@ -6,9 +6,9 @@ module Hotdog
6
6
  module Commands
7
7
  class Down < BaseCommand
8
8
  def define_options(optparse, options={})
9
- options[:downtime] = 86400
10
- options[:start] = Time.new
11
- options[:retry] = 5
9
+ default_option(options, :downtime, 86400)
10
+ default_option(options, :start, Time.new)
11
+ default_option(options, :retry, 5)
12
12
  optparse.on("--downtime DURATION") do |v|
13
13
  options[:downtime] = v.to_i
14
14
  end
@@ -10,8 +10,8 @@ module Hotdog
10
10
  module Commands
11
11
  class Pssh < SshAlike
12
12
  def define_options(optparse, options={})
13
+ default_option(options, :show_identifier, true)
13
14
  super
14
- options[:show_identifier] = true
15
15
  optparse.on("--[no-]identifier", "Each output line will be prepended with identifier.") do |identifier|
16
16
  options[:show_identifier] = identifier
17
17
  end
@@ -3,6 +3,19 @@
3
3
  require "json"
4
4
  require "parslet"
5
5
 
6
+ # Monkey patch to prevent `NoMethodError` after some parse error in parselet
7
+ module Parslet
8
+ class Cause
9
+ def cause
10
+ self
11
+ end
12
+
13
+ def backtrace
14
+ []
15
+ end
16
+ end
17
+ end
18
+
6
19
  module Hotdog
7
20
  module Commands
8
21
  class Search < BaseCommand
@@ -114,7 +127,8 @@ module Hotdog
114
127
  )
115
128
  }
116
129
  rule(:expression1) {
117
- ( unary_op.as(:unary_op) >> spacing.maybe >> expression.as(:expression) \
130
+ ( unary_op.as(:unary_op) >> spacing >> expression.as(:expression) \
131
+ | unary_op.as(:unary_op) >> spacing.maybe >> str('(') >> spacing.maybe >> expression.as(:expression) >> spacing.maybe >> str(')') \
118
132
  | expression2 \
119
133
  )
120
134
  }
@@ -182,10 +196,14 @@ module Hotdog
182
196
  }
183
197
  rule(:identifier_glob) {
184
198
  ( binary_op.absent? >> unary_op.absent? >> identifier.repeat(0) >> (glob >> identifier.maybe).repeat(1) \
199
+ | binary_op >> identifier.repeat(1) >> (glob >> identifier.maybe).repeat(1) \
200
+ | unary_op >> identifier.repeat(1) >> (glob >> identifier.maybe).repeat(1) \
185
201
  )
186
202
  }
187
203
  rule(:identifier) {
188
204
  ( binary_op.absent? >> unary_op.absent? >> match('[A-Za-z]') >> match('[-./0-9A-Z_a-z]').repeat(0) \
205
+ | binary_op >> match('[-./0-9A-Z_a-z]').repeat(1) \
206
+ | unary_op >> match('[-./0-9A-Z_a-z]').repeat(1) \
189
207
  )
190
208
  }
191
209
  rule(:separator) {
@@ -199,10 +217,14 @@ module Hotdog
199
217
  }
200
218
  rule(:attribute_glob) {
201
219
  ( binary_op.absent? >> unary_op.absent? >> attribute.repeat(0) >> (glob >> attribute.maybe).repeat(1) \
220
+ | binary_op >> attribute.repeat(1) >> (glob >> attribute.maybe).repeat(1) \
221
+ | unary_op >> attribute.repeat(1) >> (glob >> attribute.maybe).repeat(1) \
202
222
  )
203
223
  }
204
224
  rule(:attribute) {
205
225
  ( binary_op.absent? >> unary_op.absent? >> match('[-./0-9:A-Z_a-z]').repeat(1) \
226
+ | binary_op >> match('[-./0-9:A-Z_a-z]').repeat(1) \
227
+ | unary_op >> match('[-./0-9:A-Z_a-z]').repeat(1) \
206
228
  )
207
229
  }
208
230
  rule(:glob) {
@@ -9,14 +9,13 @@ module Hotdog
9
9
  module Commands
10
10
  class SshAlike < Search
11
11
  def define_options(optparse, options={})
12
- options[:options] = []
13
- options[:user] = nil
14
- options[:port] = nil
15
- options[:identity_file] = nil
16
- options[:forward_agent] = false
17
- options[:color] = :auto
18
- options[:max_parallelism] = nil
19
-
12
+ default_option(options, :options, [])
13
+ default_option(options, :user, nil)
14
+ default_option(options, :port, nil)
15
+ default_option(options, :identity_file, nil)
16
+ default_option(options, :forward_agent, false)
17
+ default_option(options, :color, :auto)
18
+ default_option(options, :max_parallelism, Parallel.processor_count)
20
19
  optparse.on("-o SSH_OPTION", "Passes this string to ssh command through shell. This option may be given multiple times") do |option|
21
20
  options[:options] += [option]
22
21
  end
@@ -6,7 +6,7 @@ module Hotdog
6
6
  module Commands
7
7
  class Up < BaseCommand
8
8
  def define_options(optparse, options={})
9
- options[:retry] = 5
9
+ default_option(options, :retry, 5)
10
10
  optparse.on("--retry NUM") do |v|
11
11
  options[:retry] = v.to_i
12
12
  end
@@ -59,6 +59,14 @@ module Hotdog
59
59
  end
60
60
 
61
61
  private
62
+ def default_option(options, key, default_value)
63
+ if options.key?(key)
64
+ options[key]
65
+ else
66
+ options[key] = default_value
67
+ end
68
+ end
69
+
62
70
  def prepare(db, query)
63
71
  k = (db.hash & MASK_DATABASE) | (query.hash & MASK_QUERY)
64
72
  @prepared_statements[k] ||= db.prepare(query)
@@ -132,7 +140,7 @@ module Hotdog
132
140
  }
133
141
  ]
134
142
  end
135
- q1 = "SELECT tags.name, GROUP_CONCAT(tags.value, ',') FROM hosts_tags " \
143
+ q1 = "SELECT LOWER(tags.name), GROUP_CONCAT(tags.value, ',') FROM hosts_tags " \
136
144
  "INNER JOIN tags ON hosts_tags.tag_id = tags.id " \
137
145
  "WHERE hosts_tags.host_id = ? AND tags.name IN (%s) " \
138
146
  "GROUP BY tags.name;"
@@ -146,7 +154,7 @@ module Hotdog
146
154
  if tag_name == "host"
147
155
  host_names.fetch(host_id, nil)
148
156
  else
149
- tag_value = tag_values.fetch(tag_name, nil)
157
+ tag_value = tag_values.fetch(tag_name.downcase, nil)
150
158
  if tag_value
151
159
  if tag_value.empty?
152
160
  tag_name # use `tag_name` as `tag_value` for the tags without any values
@@ -1,3 +1,3 @@
1
1
  module Hotdog
2
- VERSION = "0.7.1"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -81,7 +81,7 @@ describe "commands" do
81
81
 
82
82
  it "get host fields without host" do
83
83
  q1 = [
84
- "SELECT tags.name, GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
84
+ "SELECT LOWER(tags.name), GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
85
85
  "INNER JOIN tags ON hosts_tags.tag_id = tags.id",
86
86
  "WHERE hosts_tags.host_id = ? AND tags.name IN (?, ?, ?)",
87
87
  "GROUP BY tags.name;",
@@ -103,7 +103,7 @@ describe "commands" do
103
103
  [[1, "host1"], [2, "host2"], [3, "host3"]]
104
104
  }
105
105
  q1 = [
106
- "SELECT tags.name, GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
106
+ "SELECT LOWER(tags.name), GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
107
107
  "INNER JOIN tags ON hosts_tags.tag_id = tags.id",
108
108
  "WHERE hosts_tags.host_id = ? AND tags.name IN (?, ?)",
109
109
  "GROUP BY tags.name;",
@@ -94,6 +94,42 @@ describe "parser" do
94
94
  expect(cmd.parse("( ( foo ) )")).to eq({identifier: "foo"})
95
95
  end
96
96
 
97
+ it "parses 'identifier with prefix and'" do
98
+ expect(cmd.parse("android")).to eq({identifier: "android"})
99
+ end
100
+
101
+ it "parses 'identifier with infix and'" do
102
+ expect(cmd.parse("islander")).to eq({identifier: "islander"})
103
+ end
104
+
105
+ it "parses 'identifier with suffix and'" do
106
+ expect(cmd.parse("mainland")).to eq({identifier: "mainland"})
107
+ end
108
+
109
+ it "parses 'identifier with prefix or'" do
110
+ expect(cmd.parse("oreo")).to eq({identifier: "oreo"})
111
+ end
112
+
113
+ it "parses 'identifier with infix or'" do
114
+ expect(cmd.parse("category")).to eq({identifier: "category"})
115
+ end
116
+
117
+ it "parses 'identifier with suffix or'" do
118
+ expect(cmd.parse("imperator")).to eq({identifier: "imperator"})
119
+ end
120
+
121
+ it "parses 'identifier with prefix not'" do
122
+ expect(cmd.parse("nothing")).to eq({identifier: "nothing"})
123
+ end
124
+
125
+ it "parses 'identifier with infix not'" do
126
+ expect(cmd.parse("annotation")).to eq({identifier: "annotation"})
127
+ end
128
+
129
+ it "parses 'identifier with suffix not'" do
130
+ expect(cmd.parse("forgetmenot")).to eq({identifier: "forgetmenot"})
131
+ end
132
+
97
133
  it "parses 'foo bar'" do
98
134
  expect(cmd.parse("foo bar")).to eq({left: {identifier: "foo"}, binary_op: nil, right: {identifier: "bar"}})
99
135
  end
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.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yamashita Yuu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-02 00:00:00.000000000 Z
11
+ date: 2016-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler