hotdog 0.7.1 → 0.8.0

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 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