forward 0.3.0 → 0.3.1

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 CHANGED
@@ -1,7 +1,36 @@
1
- 1. parse options
2
- 2. pass to client
3
- 3. client gets a session for the user based on stored token/authentication request or asks the user to signup
4
- 4. if account is in good standing client requests a tunnel to be setup
5
- 5. if tunnel is setup, client opens the ssh channel
6
- 6. client starts forwarding traffic
7
- 7. the end
1
+ # Forward
2
+
3
+ The ruby client for [https://forwardhq.com/](https://forwardhq.com/). Forward gives you a sharable URL for localhost websites/webapps.
4
+
5
+ ## Usage
6
+
7
+ > forward <port> [options]
8
+ > forward <host> [options]
9
+ > forward <host:port> [options]
10
+
11
+ Description:
12
+
13
+ Share a server running on localhost:port over the web by tunneling
14
+ through Forward. A URL is created for each tunnel.
15
+
16
+ Simple example:
17
+
18
+ # You are developing a Rails site.
19
+
20
+ > rails server &
21
+ > forward 3000
22
+ Forward created at https://mycompany.fwd.wf
23
+
24
+ Assigning a static subdomain prefix:
25
+
26
+ > rails server &
27
+ > forward 3000 myapp
28
+ Forward created at https://myapp-mycompany.fwd.wf
29
+
30
+ Virtual Host example:
31
+
32
+ # You are already running something on port 80 that uses
33
+ # virtual host names.
34
+
35
+ > forward mysite.dev
36
+ Forward created at https://mycompany.fwd.wf
@@ -39,6 +39,10 @@ module Forward
39
39
  ENV['FORWARD_SSH_PORT'] || DEFAULT_SSH_PORT
40
40
  end
41
41
 
42
+ def self.windows?
43
+ RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
44
+ end
45
+
42
46
  def self.config=(config)
43
47
  @config = config
44
48
  end
@@ -81,7 +85,7 @@ module Forward
81
85
  end
82
86
 
83
87
  def self.logdev
84
- @logdev ||= '/dev/null'
88
+ @logdev ||= (windows? ? 'NUL:' : '/dev/null')
85
89
  end
86
90
 
87
91
  def self.log
@@ -21,9 +21,9 @@ module Forward
21
21
 
22
22
  > rails server &
23
23
  > forward 3000
24
- Forward created at https://4ad3f-mycompany.fwd.wf
24
+ Forward created at https://mycompany.fwd.wf
25
25
 
26
- Assigning a subdomain prefix:
26
+ Assigning a static subdomain prefix:
27
27
 
28
28
  > rails server &
29
29
  > forward 3000 myapp
@@ -35,14 +35,14 @@ module Forward
35
35
  # virtual host names.
36
36
 
37
37
  > forward mysite.dev
38
- Forward created at https://dh43a-mycompany.fwd.wf
38
+ Forward created at https://mycompany.fwd.wf
39
39
 
40
40
  BANNER
41
41
 
42
42
  # Parse non-published options and remove them from ARGV, then
43
43
  # parse published options and update the options Hash with provided
44
44
  # options and removes switches from ARGV.
45
- def self.parse_cli_options
45
+ def self.parse_cli_options(args)
46
46
  Forward.log.debug("Parsing options")
47
47
  options = {}
48
48
 
@@ -78,7 +78,7 @@ module Forward
78
78
  end
79
79
  end
80
80
 
81
- @opts.parse!
81
+ @opts.parse!(args)
82
82
 
83
83
  options
84
84
  end
@@ -106,7 +106,7 @@ module Forward
106
106
  Forward.log.debug("Forwardfile options: `#{options.inspect}'")
107
107
  end
108
108
 
109
- options.merge!(parse_cli_options)
109
+ options.merge!(parse_cli_options(args))
110
110
 
111
111
  forwarded, prefix = args[0..1]
112
112
  options[:subdomain_prefix] = prefix unless prefix.nil?
@@ -230,7 +230,7 @@ module Forward
230
230
  # Parses various options and arguments, validates everything to ensure
231
231
  # we're safe to proceed, and finally passes options to the Client.
232
232
  def self.run(args)
233
- ::HighLine.use_color = false if Forward::Config.windows?
233
+ ::HighLine.use_color = false if Forward.windows?
234
234
  if ARGV.include?('--debug')
235
235
  Forward.debug!
236
236
  ARGV.delete('--debug')
@@ -1,5 +1,4 @@
1
1
  require 'fileutils'
2
- require 'rbconfig'
3
2
  require 'yaml'
4
3
 
5
4
  module Forward
@@ -80,19 +79,12 @@ module Forward
80
79
  raise ConfigError, 'Unable to write config file'
81
80
  end
82
81
 
83
- # Shortcut for checking if host os is windows.
84
- #
85
- # Returns true or false if windows or not.
86
- def self.windows?
87
- RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
88
- end
89
-
90
82
  # Returns the location of the forward ssh private key
91
83
  # based on the host os.
92
84
  #
93
85
  # Returns the String path.
94
86
  def self.key_path
95
- if windows?
87
+ if Forward.windows?
96
88
  File.join(ENV['HOME'], 'forward', 'key')
97
89
  else
98
90
  File.join(ENV['HOME'], '.ssh', 'forwardhq.com')
@@ -104,7 +96,7 @@ module Forward
104
96
  #
105
97
  # Returns the String path.
106
98
  def self.config_path
107
- if windows?
99
+ if Forward.windows?
108
100
  File.join(ENV['HOME'], 'forward', 'config')
109
101
  else
110
102
  File.join(ENV['HOME'], '.forward')
@@ -1,3 +1,3 @@
1
1
  module Forward
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -51,24 +51,34 @@ describe Forward::CLI do
51
51
  end
52
52
 
53
53
  it 'parses a Forwardfile' do
54
- yaml = YAML.dump(:auth => 'username:password')
55
- File.open('Forwardfile', 'w') { |f| f.write(yaml) }
54
+ hash_to_forwardfile(:auth => 'username:password')
56
55
 
57
56
  options = Forward::CLI.parse_forwardfile
58
57
  options.has_key?(:auth).must_equal true
59
58
  end
60
59
 
61
60
  it 'exits if a Forwardfile does not parse to a Hash' do
62
- yaml = YAML.dump('username:password')
63
- File.open('Forwardfile', 'w') { |f| f.write(yaml) }
61
+ hash_to_forwardfile('username:password')
64
62
 
65
63
  lambda {
66
64
  dev_null { Forward::CLI.parse_forwardfile }
67
65
  }.must_raise SystemExit
68
66
  end
69
67
 
70
- it 'overloads Forwardfile options via commandline' do
71
- flunk
68
+ it 'overloads Forwardfile options via commandline options' do
69
+ hash_to_forwardfile(
70
+ :port => 8000,
71
+ :username => 'username',
72
+ :password => 'password',
73
+ :subdomain_prefix => 'foo'
74
+ )
75
+ args = [ '3000', '-a', 'example:secret', 'bar' ]
76
+ options = Forward::CLI.parse_args_and_options(args)
77
+
78
+ options[:port].must_equal 3000
79
+ options[:username].must_equal 'example'
80
+ options[:password].must_equal 'secret'
81
+ options[:subdomain_prefix].must_equal 'bar'
72
82
  end
73
83
 
74
84
  it 'doesnt exit on valid ports' do
@@ -114,3 +124,8 @@ describe Forward::CLI do
114
124
  end
115
125
 
116
126
  end
127
+
128
+ def hash_to_forwardfile(hash)
129
+ yaml = YAML.dump(hash)
130
+ File.open('Forwardfile', 'w') { |f| f.write(yaml) }
131
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forward
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-22 00:00:00.000000000 Z
12
+ date: 2013-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json