ngrok-tunnel 1.0.1 → 2.0.1

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: ca6bf750325cd01425d06a581329da3c50e3f4a7
4
- data.tar.gz: c3d1f8a5acc781598882792e5b99896295a485c4
3
+ metadata.gz: 4c864e0a2db71b2c84350df7daba7ef501c75a2d
4
+ data.tar.gz: adbc7d33d04e99d3e657f53ff4c203d93a323b0e
5
5
  SHA512:
6
- metadata.gz: 911ba4c6d25a317b580eba31971b3c732782aad259d88778956f21cfed4dc6375c323dfe1b20473e2629a799e449725162e003bd0f3a4c828fa2ea400fc401bd
7
- data.tar.gz: 13df49c97439971b80f307a101ef9da302c5bd31d3b369be7a64c69e7ab13763116c3287fbc743d30382ce57c89d0cf8aecb2dbfe6e71bec1f4aefca021dbe8b
6
+ metadata.gz: f97a3e3eb817a84c124029ab9e40ea3d6bbd81548a576ba6c454f261564d9aa7a1150496d0b47035010d93a699b39543b7706d3e9fec113247e3a9f67dc25709
7
+ data.tar.gz: 96dbd1d0a73e59675ffe02e386953383d202c258b386665de17a6f4965ee40461fe274d5eab3f75e36806b1ed81d33ae804d27ed1b4b8f0720f3e8538293ab2f
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Ngrok::Tunnel
2
2
 
3
- ngrok-tunnel provides ruby wrapper for ngrok
3
+ Ngrok-tunnel gem is a ruby wrapper for ngrok
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/ngrok-tunnel.svg)](http://badge.fury.io/rb/ngrok-tunnel)
4
6
 
5
7
  ## Installation
6
8
 
@@ -23,33 +25,54 @@ Or install it yourself as:
23
25
  ```ruby
24
26
  require 'ngrok/tunnel'
25
27
 
26
- # spawn ngrok
27
- Ngrok::Tunnel.start(3001)
28
+ # spawn ngrok (default port 3001)
29
+ Ngrok::Tunnel.start
28
30
 
29
31
  # ngrok local_port
30
- Ngrok::Tunnel.local_port
32
+ Ngrok::Tunnel.port
33
+ => 3001
31
34
 
32
35
  # ngrok external url
33
36
  Ngrok::Tunnel.ngrok_url
37
+ => "http://aaa0e65.ngrok.com"
38
+
34
39
  Ngrok::Tunnel.ngrok_url_https
40
+ => "https://aaa0e65.ngrok.com"
35
41
 
36
42
  Ngrok::Tunnel.running?
43
+ => true
44
+
37
45
  Ngrok::Tunnel.stopped?
46
+ => false
38
47
 
39
48
  # ngrok process id
40
49
  Ngrok::Tunnel.pid
50
+ => 27384
41
51
 
42
52
  # ngrok log file descriptor
43
- Ngrok::Tunnel.log_file
53
+ Ngrok::Tunnel.log
54
+ => #<File:/tmp/ngrok20141022-27376-cmmiq4>
44
55
 
45
56
  # kill ngrok
46
57
  Ngrok::Tunnel.stop
58
+ => :stopped
59
+
60
+ ```
61
+
62
+ ```ruby
63
+ # ngrok custom parameters
64
+ Ngrok::Tunnel.start(port: 3333,
65
+ subdomain: 'MY_SUBDOMAIN',
66
+ authtoken: 'MY_TOKEN',
67
+ log: 'ngrok.log',
68
+ config: '~/.ngrok')
47
69
 
48
70
  ```
49
71
 
72
+
50
73
  ## Contributing
51
74
 
52
- 1. Fork it ( https://github.com/[my-github-username]/ngrok-tunnel/fork )
75
+ 1. Fork it ( https://github.com/bogdanovich/ngrok-tunnel/fork )
53
76
  2. Create your feature branch (`git checkout -b my-new-feature`)
54
77
  3. Commit your changes (`git commit -am 'Add some feature'`)
55
78
  4. Push to the branch (`git push origin my-new-feature`)
data/lib/ngrok/tunnel.rb CHANGED
@@ -5,29 +5,31 @@ module Ngrok
5
5
 
6
6
  class NotFound < StandardError; end
7
7
  class FetchUrlError < StandardError; end
8
+ class Error < StandardError; end
8
9
 
9
10
  class Tunnel
10
11
 
11
12
  class << self
12
- attr_reader :pid, :local_port, :ngrok_url, :ngrok_url_https, :log_file, :status
13
+ attr_reader :pid, :ngrok_url, :ngrok_url_https, :status
13
14
 
14
- def init
15
- @status = :stopped
15
+ def init(params = {})
16
+ @params = {port: 3001, timeout: 10, config: '/dev/null'}.merge(params)
17
+ @status = :stopped unless @status
16
18
  end
17
19
 
18
- def start(port, options = {})
19
- options[:timeout] ||= 10
20
- @options = options
21
-
20
+ def start(params = {})
22
21
  ensure_binary
23
-
24
- @local_port = port.to_i
25
- @log_file = Tempfile.new('ngrok')
22
+ init(params)
23
+
24
+ if stopped?
25
+ @params[:log] = (@params[:log]) ? File.open(@params[:log], 'w+') : Tempfile.new('ngrok')
26
+ @pid = spawn("exec ngrok " + ngrok_exec_params)
27
+ at_exit { Ngrok::Tunnel.stop }
28
+ @status = :running
29
+ fetch_urls
30
+ end
26
31
 
27
- @pid = spawn("exec ngrok -log=stdout #{@local_port} > #{@log_file.path}")
28
- at_exit { Ngrok::Tunnel.stop }
29
- @status = :running
30
- fetch_urls
32
+ @ngrok_url
31
33
  end
32
34
 
33
35
  def stop
@@ -36,6 +38,7 @@ module Ngrok
36
38
  @ngrok_url = @ngrok_url_https = @pid = nil
37
39
  @status = :stopped
38
40
  end
41
+ @status
39
42
  end
40
43
 
41
44
  def running?
@@ -46,18 +49,49 @@ module Ngrok
46
49
  @status == :stopped
47
50
  end
48
51
 
52
+ def port
53
+ @params[:port]
54
+ end
55
+
56
+ def log
57
+ @params[:log]
58
+ end
59
+
60
+ def subdomain
61
+ @params[:subdomain]
62
+ end
63
+
64
+ def authtoken
65
+ @params[:authtoken]
66
+ end
67
+
49
68
  def inherited(subclass)
50
69
  init
51
70
  end
52
71
 
53
72
  private
54
73
 
74
+ def ngrok_exec_params
75
+ exec_params = "-log=stdout "
76
+ exec_params << "-authtoken=#{@params[:authtoken]} " if @params[:authtoken]
77
+ exec_params << "-subdomain=#{@params[:subdomain]} " if @params[:subdomain]
78
+ exec_params << "-config=#{@params[:config]} #{@params[:port].to_i} > #{@params[:log].path}"
79
+ end
80
+
55
81
  def fetch_urls
56
- @options[:timeout].times do
57
- @ngrok_url, @ngrok_url_https = @log_file.read.scan(/"Url":"([^"]+)"/).flatten
82
+ @params[:timeout].times do
83
+ log_content = @params[:log].read
84
+ @ngrok_url, @ngrok_url_https = log_content.scan(/"Url":"([^"]+)"/).flatten
58
85
  return @ngrok_url if @ngrok_url
86
+
87
+ error = log_content.scan(/"Error":"([^"]+)"/).flatten
88
+ unless error.empty?
89
+ self.stop
90
+ raise Ngrok::Error, error.first
91
+ end
92
+
59
93
  sleep 1
60
- @log_file.rewind
94
+ @params[:log].rewind
61
95
  end
62
96
  raise FetchUrlError, "Unable to fetch external url"
63
97
  @ngrok_url
@@ -1,5 +1,5 @@
1
1
  module Ngrok
2
2
  class Tunnel
3
- VERSION = "1.0.1"
3
+ VERSION = "2.0.1"
4
4
  end
5
5
  end
@@ -20,8 +20,7 @@ describe Ngrok::Tunnel do
20
20
  describe "Run process" do
21
21
 
22
22
  before(:all) do
23
- @local_port = 3001
24
- Ngrok::Tunnel.start(3001)
23
+ Ngrok::Tunnel.start
25
24
  end
26
25
 
27
26
  after(:all) { Ngrok::Tunnel.stop }
@@ -39,7 +38,7 @@ describe Ngrok::Tunnel do
39
38
  end
40
39
 
41
40
  it "should match local_port" do
42
- expect(Ngrok::Tunnel.local_port).to eq(@local_port)
41
+ expect(Ngrok::Tunnel.port).to eq(3001)
43
42
  end
44
43
 
45
44
  it "should have valid ngrok_url" do
@@ -60,4 +59,24 @@ describe Ngrok::Tunnel do
60
59
 
61
60
  end
62
61
 
62
+ describe "Custom log file" do
63
+ it "should be able to use custom log file" do
64
+ Ngrok::Tunnel.start(log: 'test.log')
65
+ expect(Ngrok::Tunnel.running?).to eq true
66
+ expect(Ngrok::Tunnel.log.path).to eq 'test.log'
67
+ Ngrok::Tunnel.stop
68
+ expect(Ngrok::Tunnel.stopped?).to eq true
69
+ end
70
+ end
71
+
72
+ describe "Custom subdomain" do
73
+ it "should fail without authtoken" do
74
+ expect {Ngrok::Tunnel.start(subdomain: 'test-subdomain')}.to raise_error
75
+ end
76
+
77
+ it "should fail with incorrect authtoken" do
78
+ expect {Ngrok::Tunnel.start(subdomain: 'test-subdomain', authtoken: 'incorrect_token')}.to raise_error
79
+ end
80
+ end
81
+
63
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ngrok-tunnel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Bogdanovich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-22 00:00:00.000000000 Z
11
+ date: 2014-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry