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 +4 -4
 - data/lib/hotdog/commands/down.rb +3 -3
 - data/lib/hotdog/commands/pssh.rb +1 -1
 - data/lib/hotdog/commands/search.rb +23 -1
 - data/lib/hotdog/commands/ssh.rb +7 -8
 - data/lib/hotdog/commands/up.rb +1 -1
 - data/lib/hotdog/commands.rb +10 -2
 - data/lib/hotdog/version.rb +1 -1
 - data/spec/core/commands_spec.rb +2 -2
 - data/spec/parser/parser_spec.rb +36 -0
 - 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: 9389d9529203f20a278c0446d57c1ae72e57cb99
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 807eab226a18b286a38a7968bfb98ed27525b657
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ef097ee620a3e70d38195b5f4f6ea32f4d7f439962f68495e7d6997e2e667f963d3ef6bff1395ab524cf5ac0f3a60b812a783a542f5bd74082e207971b96a821
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: e97de69542e3559ea62b19d1a35fb3d3c2ec30102719596050e15b66ab6e7cff06f05a202670a3a9ce054eac576938f8ebbc698fde046009c4d4036327e652d0
         
     | 
    
        data/lib/hotdog/commands/down.rb
    CHANGED
    
    | 
         @@ -6,9 +6,9 @@ module Hotdog 
     | 
|
| 
       6 
6 
     | 
    
         
             
              module Commands
         
     | 
| 
       7 
7 
     | 
    
         
             
                class Down < BaseCommand
         
     | 
| 
       8 
8 
     | 
    
         
             
                  def define_options(optparse, options={})
         
     | 
| 
       9 
     | 
    
         
            -
                    options 
     | 
| 
       10 
     | 
    
         
            -
                    options 
     | 
| 
       11 
     | 
    
         
            -
                    options 
     | 
| 
      
 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
         
     | 
    
        data/lib/hotdog/commands/pssh.rb
    CHANGED
    
    | 
         @@ -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 
     | 
| 
      
 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) {
         
     | 
    
        data/lib/hotdog/commands/ssh.rb
    CHANGED
    
    | 
         @@ -9,14 +9,13 @@ module Hotdog 
     | 
|
| 
       9 
9 
     | 
    
         
             
              module Commands
         
     | 
| 
       10 
10 
     | 
    
         
             
                class SshAlike < Search
         
     | 
| 
       11 
11 
     | 
    
         
             
                  def define_options(optparse, options={})
         
     | 
| 
       12 
     | 
    
         
            -
                    options 
     | 
| 
       13 
     | 
    
         
            -
                    options 
     | 
| 
       14 
     | 
    
         
            -
                    options 
     | 
| 
       15 
     | 
    
         
            -
                    options 
     | 
| 
       16 
     | 
    
         
            -
                    options 
     | 
| 
       17 
     | 
    
         
            -
                    options 
     | 
| 
       18 
     | 
    
         
            -
                    options 
     | 
| 
       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
         
     | 
    
        data/lib/hotdog/commands/up.rb
    CHANGED
    
    
    
        data/lib/hotdog/commands.rb
    CHANGED
    
    | 
         @@ -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
         
     | 
    
        data/lib/hotdog/version.rb
    CHANGED
    
    
    
        data/spec/core/commands_spec.rb
    CHANGED
    
    | 
         @@ -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;",
         
     | 
    
        data/spec/parser/parser_spec.rb
    CHANGED
    
    | 
         @@ -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. 
     | 
| 
      
 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- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-04-15 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |