stubby 0.0.10 → 0.0.11
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.
- data/README.md +48 -10
- data/lib/stubby.rb +2 -0
- data/lib/stubby/cli/application.rb +36 -1
- data/lib/stubby/extensions/default.rb +66 -60
- data/lib/stubby/extensions/dns.rb +106 -101
- data/lib/stubby/extensions/dns/osx.rb +61 -41
- data/lib/stubby/extensions/http.rb +186 -181
- data/lib/stubby/extensions/reload.rb +38 -32
- data/lib/stubby/extensions/smtp.rb +47 -41
- data/lib/stubby/master.rb +34 -14
- data/lib/stubby/registry.rb +0 -1
- metadata +54 -16
- checksums.yaml +0 -7
@@ -1,43 +1,49 @@
|
|
1
1
|
require 'listen'
|
2
2
|
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
module Stubby
|
4
|
+
module Extensions
|
5
|
+
class Reload
|
6
|
+
def run!(session, options)
|
7
|
+
@options = options
|
8
|
+
@session = session
|
9
|
+
return if @options[:reload] == false
|
10
|
+
|
11
|
+
listener.start
|
12
|
+
sleep 1 while @listener
|
13
|
+
puts 'run! done'
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
def stop!
|
17
|
+
return if @options[:reload] == false
|
18
|
+
@listener.stop and @listener = nil if @listener
|
19
|
+
puts 'stop! done'
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
def root_path
|
23
|
-
@session.system.root_path
|
24
|
-
end
|
22
|
+
def restore!
|
25
23
|
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def root_path
|
28
|
+
@session.system.root_path
|
29
|
+
end
|
30
|
+
|
31
|
+
def session_config_path
|
32
|
+
@session.system.session_config_path
|
33
|
+
end
|
29
34
|
|
30
|
-
|
31
|
-
|
35
|
+
def listener
|
36
|
+
return @listener if @listener
|
32
37
|
|
33
|
-
|
38
|
+
puts "NEW LISTENER"
|
34
39
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
@listener ||= Listen.to(root_path, debug: true) do |modified, added, removed|
|
41
|
+
(modified + added).each do |mpath|
|
42
|
+
puts "[INFO] Detected change, test identical #{mpath}"
|
43
|
+
if File.identical?(session_config_path, mpath)
|
44
|
+
puts "[INFO] Detected config change, reloading #{mpath}..."
|
45
|
+
@session.system.reload
|
46
|
+
end
|
41
47
|
end
|
42
48
|
end
|
43
49
|
end
|
@@ -1,46 +1,52 @@
|
|
1
1
|
require 'mail_catcher'
|
2
2
|
|
3
|
-
module
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
3
|
+
module Stubby
|
4
|
+
module Extensions
|
5
|
+
module SMTP
|
6
|
+
class Server
|
7
|
+
def run!(session, options)
|
8
|
+
@process = Process.fork {
|
9
|
+
$0 = "stubby: [extension worker sub] Stubby::Extensions::SMTP::Server"
|
10
|
+
|
11
|
+
sleep 2
|
12
|
+
|
13
|
+
HTTPI.post("http://#{STUBBY_MASTER}:9000/stubs/transient/activate.json",
|
14
|
+
options: MultiJson.dump(smtp_stub), key: "_smtp")
|
15
|
+
|
16
|
+
MailCatcher.run! smtp_ip: STUBBY_MASTER,
|
17
|
+
smtp_port: 25,
|
18
|
+
http_ip: STUBBY_MASTER,
|
19
|
+
http_port: 9001,
|
20
|
+
daemon: false
|
21
|
+
}
|
22
|
+
|
23
|
+
trap("INT", important: true){
|
24
|
+
stop!
|
25
|
+
}
|
26
|
+
|
27
|
+
sleep
|
28
|
+
end
|
29
|
+
|
30
|
+
def smtp_stub
|
31
|
+
{
|
32
|
+
"dns://outbox.stubby.dev/a" => "dns-a://#{STUBBY_MASTER}",
|
33
|
+
"http://outbox.stubby.dev" => "http://#{STUBBY_MASTER}:9001"
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def expand_rule(trigger, instruction)
|
38
|
+
{
|
39
|
+
"#{trigger.gsub("smtp://", "dns://")}/mx" => "dns-mx://#{STUBBY_MASTER}/?priority=10"
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def stop!
|
44
|
+
Process.shutdown(@process)
|
45
|
+
end
|
46
|
+
|
47
|
+
def restore!
|
48
|
+
# nil
|
49
|
+
end
|
44
50
|
end
|
45
51
|
end
|
46
52
|
end
|
data/lib/stubby/master.rb
CHANGED
@@ -128,6 +128,15 @@ module Stubby
|
|
128
128
|
stub.search(params[:trigger])
|
129
129
|
}.compact.first
|
130
130
|
end
|
131
|
+
|
132
|
+
post "/stop.json" do
|
133
|
+
Thread.new do
|
134
|
+
sleep 1
|
135
|
+
Process.kill("INT", Process.pid)
|
136
|
+
end
|
137
|
+
|
138
|
+
json status: "ok"
|
139
|
+
end
|
131
140
|
end
|
132
141
|
|
133
142
|
class Master
|
@@ -135,11 +144,11 @@ module Stubby
|
|
135
144
|
|
136
145
|
def initialize(environments)
|
137
146
|
@extensions = {
|
138
|
-
default: Extensions::Default.new,
|
139
|
-
dns: Extensions::DNS::Server.new,
|
140
|
-
http: Extensions::HTTP::Server.new,
|
141
|
-
https: Extensions::HTTP::SSLServer.new,
|
142
|
-
smtp: Extensions::SMTP::Server.new
|
147
|
+
default: Stubby::Extensions::Default.new,
|
148
|
+
dns: Stubby::Extensions::DNS::Server.new,
|
149
|
+
http: Stubby::Extensions::HTTP::Server.new,
|
150
|
+
https: Stubby::Extensions::HTTP::SSLServer.new,
|
151
|
+
smtp: Stubby::Extensions::SMTP::Server.new
|
143
152
|
}
|
144
153
|
|
145
154
|
@config = Api
|
@@ -171,6 +180,23 @@ module Stubby
|
|
171
180
|
end
|
172
181
|
end
|
173
182
|
|
183
|
+
def restore!
|
184
|
+
restore_extensions
|
185
|
+
end
|
186
|
+
|
187
|
+
def stop!
|
188
|
+
puts "Shutting down..."
|
189
|
+
|
190
|
+
Api.stop!
|
191
|
+
|
192
|
+
running.each do |process|
|
193
|
+
Process.shutdown(process)
|
194
|
+
end
|
195
|
+
|
196
|
+
puts "Bye."
|
197
|
+
end
|
198
|
+
|
199
|
+
|
174
200
|
private
|
175
201
|
def read_key
|
176
202
|
File.read(keyfile)
|
@@ -209,16 +235,10 @@ module Stubby
|
|
209
235
|
end
|
210
236
|
end
|
211
237
|
|
212
|
-
def
|
213
|
-
|
214
|
-
|
215
|
-
Api.stop!
|
216
|
-
|
217
|
-
running.each do |process|
|
218
|
-
Process.shutdown(process)
|
238
|
+
def restore_extensions
|
239
|
+
@extensions.each do |name, plugin|
|
240
|
+
plugin.restore!
|
219
241
|
end
|
220
|
-
|
221
|
-
puts "Bye."
|
222
242
|
end
|
223
243
|
|
224
244
|
def running
|
data/lib/stubby/registry.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stubby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- James Kassemi
|
@@ -9,25 +10,28 @@ authors:
|
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
13
|
+
date: 2014-03-05 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: bundler
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
17
19
|
requirements:
|
18
|
-
- - '>='
|
20
|
+
- - ! '>='
|
19
21
|
- !ruby/object:Gem::Version
|
20
22
|
version: '0'
|
21
23
|
type: :runtime
|
22
24
|
prerelease: false
|
23
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
24
27
|
requirements:
|
25
|
-
- - '>='
|
28
|
+
- - ! '>='
|
26
29
|
- !ruby/object:Gem::Version
|
27
30
|
version: '0'
|
28
31
|
- !ruby/object:Gem::Dependency
|
29
32
|
name: rubydns
|
30
33
|
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
31
35
|
requirements:
|
32
36
|
- - '='
|
33
37
|
- !ruby/object:Gem::Version
|
@@ -35,6 +39,7 @@ dependencies:
|
|
35
39
|
type: :runtime
|
36
40
|
prerelease: false
|
37
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
38
43
|
requirements:
|
39
44
|
- - '='
|
40
45
|
- !ruby/object:Gem::Version
|
@@ -42,6 +47,7 @@ dependencies:
|
|
42
47
|
- !ruby/object:Gem::Dependency
|
43
48
|
name: liquid
|
44
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
45
51
|
requirements:
|
46
52
|
- - '='
|
47
53
|
- !ruby/object:Gem::Version
|
@@ -49,6 +55,7 @@ dependencies:
|
|
49
55
|
type: :runtime
|
50
56
|
prerelease: false
|
51
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
52
59
|
requirements:
|
53
60
|
- - '='
|
54
61
|
- !ruby/object:Gem::Version
|
@@ -56,6 +63,7 @@ dependencies:
|
|
56
63
|
- !ruby/object:Gem::Dependency
|
57
64
|
name: multi_json
|
58
65
|
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
59
67
|
requirements:
|
60
68
|
- - '='
|
61
69
|
- !ruby/object:Gem::Version
|
@@ -63,6 +71,7 @@ dependencies:
|
|
63
71
|
type: :runtime
|
64
72
|
prerelease: false
|
65
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
66
75
|
requirements:
|
67
76
|
- - '='
|
68
77
|
- !ruby/object:Gem::Version
|
@@ -70,6 +79,7 @@ dependencies:
|
|
70
79
|
- !ruby/object:Gem::Dependency
|
71
80
|
name: sinatra
|
72
81
|
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
73
83
|
requirements:
|
74
84
|
- - '='
|
75
85
|
- !ruby/object:Gem::Version
|
@@ -77,6 +87,7 @@ dependencies:
|
|
77
87
|
type: :runtime
|
78
88
|
prerelease: false
|
79
89
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
80
91
|
requirements:
|
81
92
|
- - '='
|
82
93
|
- !ruby/object:Gem::Version
|
@@ -84,6 +95,7 @@ dependencies:
|
|
84
95
|
- !ruby/object:Gem::Dependency
|
85
96
|
name: sinatra-contrib
|
86
97
|
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
87
99
|
requirements:
|
88
100
|
- - '='
|
89
101
|
- !ruby/object:Gem::Version
|
@@ -91,6 +103,7 @@ dependencies:
|
|
91
103
|
type: :runtime
|
92
104
|
prerelease: false
|
93
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
94
107
|
requirements:
|
95
108
|
- - '='
|
96
109
|
- !ruby/object:Gem::Version
|
@@ -98,6 +111,7 @@ dependencies:
|
|
98
111
|
- !ruby/object:Gem::Dependency
|
99
112
|
name: rack-ssl
|
100
113
|
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
101
115
|
requirements:
|
102
116
|
- - '='
|
103
117
|
- !ruby/object:Gem::Version
|
@@ -105,6 +119,7 @@ dependencies:
|
|
105
119
|
type: :runtime
|
106
120
|
prerelease: false
|
107
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
108
123
|
requirements:
|
109
124
|
- - '='
|
110
125
|
- !ruby/object:Gem::Version
|
@@ -112,6 +127,7 @@ dependencies:
|
|
112
127
|
- !ruby/object:Gem::Dependency
|
113
128
|
name: dns-zonefile
|
114
129
|
requirement: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
115
131
|
requirements:
|
116
132
|
- - '='
|
117
133
|
- !ruby/object:Gem::Version
|
@@ -119,6 +135,7 @@ dependencies:
|
|
119
135
|
type: :runtime
|
120
136
|
prerelease: false
|
121
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
122
139
|
requirements:
|
123
140
|
- - '='
|
124
141
|
- !ruby/object:Gem::Version
|
@@ -126,6 +143,7 @@ dependencies:
|
|
126
143
|
- !ruby/object:Gem::Dependency
|
127
144
|
name: ipaddress
|
128
145
|
requirement: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
129
147
|
requirements:
|
130
148
|
- - '='
|
131
149
|
- !ruby/object:Gem::Version
|
@@ -133,6 +151,7 @@ dependencies:
|
|
133
151
|
type: :runtime
|
134
152
|
prerelease: false
|
135
153
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
136
155
|
requirements:
|
137
156
|
- - '='
|
138
157
|
- !ruby/object:Gem::Version
|
@@ -140,6 +159,7 @@ dependencies:
|
|
140
159
|
- !ruby/object:Gem::Dependency
|
141
160
|
name: httpi
|
142
161
|
requirement: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
143
163
|
requirements:
|
144
164
|
- - '='
|
145
165
|
- !ruby/object:Gem::Version
|
@@ -147,6 +167,7 @@ dependencies:
|
|
147
167
|
type: :runtime
|
148
168
|
prerelease: false
|
149
169
|
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
150
171
|
requirements:
|
151
172
|
- - '='
|
152
173
|
- !ruby/object:Gem::Version
|
@@ -154,6 +175,7 @@ dependencies:
|
|
154
175
|
- !ruby/object:Gem::Dependency
|
155
176
|
name: thor
|
156
177
|
requirement: !ruby/object:Gem::Requirement
|
178
|
+
none: false
|
157
179
|
requirements:
|
158
180
|
- - '='
|
159
181
|
- !ruby/object:Gem::Version
|
@@ -161,6 +183,7 @@ dependencies:
|
|
161
183
|
type: :runtime
|
162
184
|
prerelease: false
|
163
185
|
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
none: false
|
164
187
|
requirements:
|
165
188
|
- - '='
|
166
189
|
- !ruby/object:Gem::Version
|
@@ -168,6 +191,7 @@ dependencies:
|
|
168
191
|
- !ruby/object:Gem::Dependency
|
169
192
|
name: listen
|
170
193
|
requirement: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
171
195
|
requirements:
|
172
196
|
- - '='
|
173
197
|
- !ruby/object:Gem::Version
|
@@ -175,6 +199,7 @@ dependencies:
|
|
175
199
|
type: :runtime
|
176
200
|
prerelease: false
|
177
201
|
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
178
203
|
requirements:
|
179
204
|
- - '='
|
180
205
|
- !ruby/object:Gem::Version
|
@@ -182,6 +207,7 @@ dependencies:
|
|
182
207
|
- !ruby/object:Gem::Dependency
|
183
208
|
name: oj
|
184
209
|
requirement: !ruby/object:Gem::Requirement
|
210
|
+
none: false
|
185
211
|
requirements:
|
186
212
|
- - '='
|
187
213
|
- !ruby/object:Gem::Version
|
@@ -189,6 +215,7 @@ dependencies:
|
|
189
215
|
type: :runtime
|
190
216
|
prerelease: false
|
191
217
|
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
192
219
|
requirements:
|
193
220
|
- - '='
|
194
221
|
- !ruby/object:Gem::Version
|
@@ -196,6 +223,7 @@ dependencies:
|
|
196
223
|
- !ruby/object:Gem::Dependency
|
197
224
|
name: thin
|
198
225
|
requirement: !ruby/object:Gem::Requirement
|
226
|
+
none: false
|
199
227
|
requirements:
|
200
228
|
- - '='
|
201
229
|
- !ruby/object:Gem::Version
|
@@ -203,6 +231,7 @@ dependencies:
|
|
203
231
|
type: :runtime
|
204
232
|
prerelease: false
|
205
233
|
version_requirements: !ruby/object:Gem::Requirement
|
234
|
+
none: false
|
206
235
|
requirements:
|
207
236
|
- - '='
|
208
237
|
- !ruby/object:Gem::Version
|
@@ -210,6 +239,7 @@ dependencies:
|
|
210
239
|
- !ruby/object:Gem::Dependency
|
211
240
|
name: mailcatcher
|
212
241
|
requirement: !ruby/object:Gem::Requirement
|
242
|
+
none: false
|
213
243
|
requirements:
|
214
244
|
- - '='
|
215
245
|
- !ruby/object:Gem::Version
|
@@ -217,50 +247,57 @@ dependencies:
|
|
217
247
|
type: :runtime
|
218
248
|
prerelease: false
|
219
249
|
version_requirements: !ruby/object:Gem::Requirement
|
250
|
+
none: false
|
220
251
|
requirements:
|
221
252
|
- - '='
|
222
253
|
- !ruby/object:Gem::Version
|
223
254
|
version: 0.5.12
|
224
255
|
- !ruby/object:Gem::Dependency
|
225
|
-
name:
|
256
|
+
name: httpclient
|
226
257
|
requirement: !ruby/object:Gem::Requirement
|
258
|
+
none: false
|
227
259
|
requirements:
|
228
|
-
- - '>='
|
260
|
+
- - ! '>='
|
229
261
|
- !ruby/object:Gem::Version
|
230
262
|
version: '0'
|
231
263
|
type: :runtime
|
232
264
|
prerelease: false
|
233
265
|
version_requirements: !ruby/object:Gem::Requirement
|
266
|
+
none: false
|
234
267
|
requirements:
|
235
|
-
- - '>='
|
268
|
+
- - ! '>='
|
236
269
|
- !ruby/object:Gem::Version
|
237
270
|
version: '0'
|
238
271
|
- !ruby/object:Gem::Dependency
|
239
272
|
name: rspec
|
240
273
|
requirement: !ruby/object:Gem::Requirement
|
274
|
+
none: false
|
241
275
|
requirements:
|
242
|
-
- - '>='
|
276
|
+
- - ! '>='
|
243
277
|
- !ruby/object:Gem::Version
|
244
278
|
version: '0'
|
245
279
|
type: :development
|
246
280
|
prerelease: false
|
247
281
|
version_requirements: !ruby/object:Gem::Requirement
|
282
|
+
none: false
|
248
283
|
requirements:
|
249
|
-
- - '>='
|
284
|
+
- - ! '>='
|
250
285
|
- !ruby/object:Gem::Version
|
251
286
|
version: '0'
|
252
287
|
- !ruby/object:Gem::Dependency
|
253
288
|
name: pry
|
254
289
|
requirement: !ruby/object:Gem::Requirement
|
290
|
+
none: false
|
255
291
|
requirements:
|
256
|
-
- - '>='
|
292
|
+
- - ! '>='
|
257
293
|
- !ruby/object:Gem::Version
|
258
294
|
version: '0'
|
259
295
|
type: :development
|
260
296
|
prerelease: false
|
261
297
|
version_requirements: !ruby/object:Gem::Requirement
|
298
|
+
none: false
|
262
299
|
requirements:
|
263
|
-
- - '>='
|
300
|
+
- - ! '>='
|
264
301
|
- !ruby/object:Gem::Version
|
265
302
|
version: '0'
|
266
303
|
description:
|
@@ -292,25 +329,26 @@ files:
|
|
292
329
|
homepage: http://github.com/jkassemi/stubby
|
293
330
|
licenses:
|
294
331
|
- MIT
|
295
|
-
metadata: {}
|
296
332
|
post_install_message:
|
297
333
|
rdoc_options: []
|
298
334
|
require_paths:
|
299
335
|
- lib
|
300
336
|
required_ruby_version: !ruby/object:Gem::Requirement
|
337
|
+
none: false
|
301
338
|
requirements:
|
302
|
-
- - '>='
|
339
|
+
- - ! '>='
|
303
340
|
- !ruby/object:Gem::Version
|
304
341
|
version: '0'
|
305
342
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
343
|
+
none: false
|
306
344
|
requirements:
|
307
|
-
- - '>='
|
345
|
+
- - ! '>='
|
308
346
|
- !ruby/object:Gem::Version
|
309
347
|
version: 1.8.23
|
310
348
|
requirements: []
|
311
349
|
rubyforge_project: stubby
|
312
|
-
rubygems_version:
|
350
|
+
rubygems_version: 1.8.23
|
313
351
|
signing_key:
|
314
|
-
specification_version:
|
352
|
+
specification_version: 3
|
315
353
|
summary: Declarative hosts / proxy management for multi-environment development
|
316
354
|
test_files: []
|