dory 0.3.11 → 0.4.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: 2fe229155242d96775501058747764d20efd538e
4
- data.tar.gz: f5a532c02a8967343d446f3aa017b1f3f0ece493
3
+ metadata.gz: 065982a17c11138746bc3cf24270e3d047b0c16a
4
+ data.tar.gz: 7985ebfd3972c8661ca99385ef47eebc2b6d0885
5
5
  SHA512:
6
- metadata.gz: 615eafda6a4d6be301db192656072cf7dfd34071f540dbf7bbd006d16251f85e63d4cc3763905efe77f2628440d7aef15676d9eced89e4a345397701a04e0c73
7
- data.tar.gz: 09eed7aea3d2e71c812d4736b8e476595cc3e45e358dbde27ead70dcaf97387b984c6455ac0781bacf5bcb9c38893492f66ac3e70e60f9057d0d82f8d519d881
6
+ metadata.gz: b08b713daa9363fbb32ff43efbbfecfc786cc26adc57a0bdd442a4117735cc67c6fafab4d1be41257e4b9594b74e784fe816d42a9b2131de2f9519cfa8573050
7
+ data.tar.gz: 9f0aff75f6c853d976632bd0c25baf0513739e0443d7279d57b0c7e0f8a06d54d35f9f68b9990b2d29500a776dc53bcdcb7870d58204d182f48c10f240ed1501
@@ -0,0 +1,29 @@
1
+ require 'colorize'
2
+
3
+ module Dory
4
+ module Dinghy
5
+ class DinghyError < RuntimeError
6
+ end
7
+
8
+ def self.installed?
9
+ Bash.run_command("which dinghy >/dev/null 2>&1").success?
10
+ end
11
+
12
+ def self.ip
13
+ res = Bash.run_command("dinghy ip").stdout.chomp
14
+ unless res =~ /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/
15
+ raise DinghyError.new(<<-ERROR)
16
+ Dinghy responded with: '#{res}', but we expected an IP address.
17
+ Please make sure the dinghy vm is running, and that running
18
+ `dinghy ip` gives you an IP address
19
+ ERROR
20
+ end
21
+ res
22
+ end
23
+
24
+ def self.match?(str)
25
+ # be lenient cause I typo this all the time
26
+ str =~ /^:?din.?.?y:?/
27
+ end
28
+ end
29
+ end
@@ -30,8 +30,10 @@ module Dory
30
30
  def self.handle_error(command_output)
31
31
  puts "[DEBUG] handling dnsmasq start error" if Dory::Config.debug?
32
32
  # If we've already tried to handle failure, prevent infinite recursion
33
- if @@first_attempt_failed
34
- puts "[DEBUG] Attempt to kill conflicting service failed" if Dory::Config.debug?
33
+ if @@first_attempt_failed || !Dory::Dinghy.installed?
34
+ if Dory::Config.debug?
35
+ puts "[DEBUG] Attempt to kill conflicting service failed" if Dory
36
+ end
35
37
  return false
36
38
  else
37
39
  puts "[DEBUG] First attempt to start dnsmasq failed. There is probably a conflicting service present" if Dory::Config.debug?
@@ -40,6 +42,11 @@ module Dory
40
42
  end
41
43
  end
42
44
 
45
+ def self.ip_from_dinghy?
46
+ Dory::Dinghy.match?(self.address(self.old_address)) ||
47
+ self.domains.any?{ |domain| Dory::Dinghy.match?(self.address(domain[:address])) }
48
+ end
49
+
43
50
  def self.port
44
51
  return 53 unless Os.macos?
45
52
  p = Dory::Config.settings[:dory][:dnsmasq][:port]
@@ -66,12 +73,16 @@ module Dory
66
73
  Dory::Config.settings[:dory][:dnsmasq][:address]
67
74
  end
68
75
 
76
+ def self.address(addr)
77
+ Dory::Dinghy.match?(addr) ? Dory::Dinghy.ip : addr
78
+ end
79
+
69
80
  def self.domain_addr_arg_string
70
81
  if self.old_domain
71
- "#{Shellwords.escape(self.old_domain)} #{Shellwords.escape(self.old_address)}"
82
+ "#{Shellwords.escape(self.old_domain)} #{Shellwords.escape(self.address(self.old_address))}"
72
83
  else
73
84
  self.domains.map do |domain|
74
- "#{Shellwords.escape(domain[:domain])} #{Shellwords.escape(domain[:address])}"
85
+ "#{Shellwords.escape(domain[:domain])} #{Shellwords.escape(self.address(domain[:address]))}"
75
86
  end.join(" ")
76
87
  end
77
88
  end
@@ -1,4 +1,5 @@
1
1
  require 'shellwords'
2
+ require 'ostruct'
2
3
 
3
4
  module Dory
4
5
  module DockerService
@@ -28,16 +29,20 @@ module Dory
28
29
  puts "[DEBUG] Container '#{self.container_name}' exists. Deleting" if Dory::Config.debug?
29
30
  self.delete
30
31
  end
31
- if Dory::Config.debug?
32
- puts "[DEBUG] '#{self.container_name}' does not exist. Creating/starting " \
33
- "'#{self.container_name}' with '#{self.run_command}'"
34
- end
35
- status = Sh.run_command(self.run_command)
36
- unless status.success?
37
- if !handle_error || !self.handle_error(status)
38
- puts "Failed to start docker container '#{self.container_name}' " \
39
- ". Command '#{self.run_command}' failed".red
32
+ begin
33
+ if Dory::Config.debug?
34
+ puts "[DEBUG] '#{self.container_name}' does not exist. Creating/starting " \
35
+ "'#{self.container_name}' with '#{self.run_command}'"
36
+ end
37
+ status = Sh.run_command(self.run_command)
38
+ unless status.success?
39
+ if !handle_error || !self.handle_error(status)
40
+ puts "Failed to start docker container '#{self.container_name}' " \
41
+ ". Command '#{self.run_command}' failed".red
42
+ end
40
43
  end
44
+ rescue DinghyError => e
45
+ puts e.message.red
41
46
  end
42
47
  else
43
48
  err_msg = "Docker does not appear to be installed /o\\\n" \
@@ -30,8 +30,13 @@ module Dory
30
30
  self.resolv_file_names.map{ |f| "#{self.resolv_dir}/#{f}" }
31
31
  end
32
32
 
33
+ def self.configured_to_use_dinghy
34
+ Dory::Dinghy.match?(Dory::Config.settings[:dory][:resolv][:nameserver])
35
+ end
36
+
33
37
  def self.nameserver
34
- Dory::Config.settings[:dory][:resolv][:nameserver]
38
+ ns = Dory::Config.settings[:dory][:resolv][:nameserver]
39
+ Dory::Dinghy.match?(ns) ? Dory::Dinghy.ip : ns
35
40
  end
36
41
 
37
42
  def self.file_nameserver_line
@@ -60,6 +65,9 @@ module Dory
60
65
  puts "Requesting sudo to write to #{filename}".green
61
66
  Bash.run_command("echo -e '#{self.resolv_contents}' | sudo tee #{Shellwords.escape(filename)} >/dev/null")
62
67
  end
68
+ rescue DinghyError => e
69
+ puts e.message.red
70
+ false
63
71
  end
64
72
 
65
73
  def self.clean
@@ -88,7 +96,14 @@ module Dory
88
96
  end
89
97
 
90
98
  def self.contents_has_our_nameserver?(contents)
91
- !!((contents =~ /#{self.file_comment}/) && (contents =~ /#{self.file_nameserver_line}/) && (contents =~ /port.#{self.port}/))
99
+ comment_match = contents =~ /#{self.file_comment}/
100
+ port_match = contents =~ /port.#{self.port}/
101
+ if configured_to_use_dinghy
102
+ !!(comment_match && port_match)
103
+ else
104
+ nameserver_match = contents =~ /#{self.file_nameserver_line}/
105
+ !!(comment_match && port_match && nameserver_match)
106
+ end
92
107
  end
93
108
  end
94
109
  end
@@ -1,4 +1,4 @@
1
1
  module Dory
2
- VERSION = '0.3.11'
3
- DATE = '2016-12-07'
2
+ VERSION = '0.4.0'
3
+ DATE = '2016-12-14'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.11
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Porter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-07 00:00:00.000000000 Z
11
+ date: 2016-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -136,6 +136,7 @@ files:
136
136
  - bin/dory
137
137
  - lib/dory.rb
138
138
  - lib/dory/config.rb
139
+ - lib/dory/dinghy.rb
139
140
  - lib/dory/dnsmasq.rb
140
141
  - lib/dory/docker_service.rb
141
142
  - lib/dory/os.rb