rct 0.3 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/rct CHANGED
@@ -1,6 +1,6 @@
1
- #!/usr/bin/env jruby
1
+ #!/usr/bin/env ruby
2
2
  #
3
- # Copyright 2012 Jyri J. Virkki <jyri@virkki.com>
3
+ # Copyright 2012-2013 Jyri J. Virkki <jyri@virkki.com>
4
4
  #
5
5
  # This file is part of rct.
6
6
  #
@@ -26,16 +26,7 @@
26
26
  #
27
27
 
28
28
  require 'rct'
29
-
30
- # A few globals:
31
- $HTTP = RCTHTTP.new()
32
- $STATE = State.new()
33
-
34
- # Set some defaults:
35
- RCT.sset(RCT_MODE, RCT_MODE_CLI)
36
- RCT.sset(SERVER_PROTOCOL, 'http')
37
- RCT.sset(SERVER_HOSTNAME, 'localhost')
38
- RCT.sset(SERVER_PORT, '80')
29
+ require 'rct/rct_init'
39
30
 
40
31
  RCT.parse_global_options()
41
32
 
@@ -19,7 +19,7 @@
19
19
 
20
20
 
21
21
  #-----------------------------------------------------------------------------
22
- # Assorted utility methods. TODO: cleanup
22
+ # Assorted utility methods of general interest. TODO: cleanup
23
23
  #
24
24
  class RCT
25
25
 
@@ -87,6 +87,12 @@ class RCT
87
87
  end
88
88
 
89
89
 
90
+ # define global options (from parse_global_options) so can do error chacking
91
+ $GLOBAL_OPTS = {
92
+ '-t' => 1, '--test' => 1, '--req' => 1, '-h' => 1, '--host' => 1,
93
+ '-p' => 1, '--port' => 1, '-v' => 1
94
+ }
95
+
90
96
  def self.parse_global_options
91
97
  pos = 0
92
98
 
@@ -138,6 +144,10 @@ class RCT
138
144
  def self.parse_options(opts, required)
139
145
  return if opts == nil
140
146
  opts.each { |key, info|
147
+ if ($GLOBAL_OPTS[info[0]] == 1 || $GLOBAL_OPTS[info[1]] == 1)
148
+ bad_invocation("Error in CLI definition: #{info[0]}|#{info[1]} " +
149
+ "conflicts with global options!")
150
+ end
141
151
  value = get_opt(info)
142
152
  if (required && value == nil)
143
153
  bad_invocation("Required argument #{info[0]}|#{info[1]} has no value!")
@@ -17,7 +17,7 @@
17
17
  # along with rct. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
- RCT_VERSION = '0.3'
20
+ RCT_VERSION = '0.5'
21
21
 
22
22
  RCT_MODE = '_mode'
23
23
  RCT_MODE_CLI = 'cli'
@@ -45,4 +45,5 @@ RESULT = 1
45
45
  INFO = 2
46
46
  DEBUG = 3
47
47
 
48
+ CLI_OUTPUT = '_cli_output'
48
49
 
@@ -25,6 +25,10 @@
25
25
  # 'cli' method which provides info about the CLI methods and their
26
26
  # arguments.
27
27
  #
28
+ # Client methods can provide friendly output in CLI mode by setting
29
+ # CLI_OUTPUT to the desired text. If it is not set, the raw response body
30
+ # is shown.
31
+ #
28
32
  class RCTCLI
29
33
 
30
34
 
@@ -63,7 +67,13 @@ class RCTCLI
63
67
  }
64
68
 
65
69
  RCT.log(INFO, response)
66
- puts response.body
70
+ cli_output = RCT.sget(CLI_OUTPUT)
71
+ if (cli_output != nil)
72
+ puts cli_output
73
+ else
74
+ puts response
75
+ puts response.body
76
+ end
67
77
  end
68
78
 
69
79
 
@@ -19,6 +19,7 @@
19
19
 
20
20
 
21
21
  require 'httpclient'
22
+ require 'base64'
22
23
 
23
24
 
24
25
  #------------------------------------------------------------------------------
@@ -104,7 +105,15 @@ class RCTHTTP
104
105
  if (auth == REQ_AUTH_TYPE_BASIC)
105
106
  name = RCT.sget(REQ_AUTH_NAME)
106
107
  pwd = RCT.sget(REQ_AUTH_PWD)
107
- @http_client.set_auth(nil, name, pwd)
108
+
109
+ # This does not send the authorization header unless server
110
+ # first responds with 401, which some REST services won't do.
111
+ # So, instead, set header manually below.
112
+ # @http_client.set_auth(nil, name, pwd)
113
+
114
+ up = "#{name}:#{pwd}"
115
+ encoded = Base64.strict_encode64(up)
116
+ headers['Authorization'] = "Basic #{encoded}"
108
117
  else
109
118
  raise "Requested auth type '#{auth}' unknown"
110
119
  end
@@ -139,8 +148,8 @@ class RCTHTTP
139
148
  return response
140
149
  end
141
150
 
142
- show_response(res)
143
151
  response = Response.new(res)
152
+ show_response(response)
144
153
  return response
145
154
  end
146
155
 
@@ -177,8 +186,9 @@ class RCTHTTP
177
186
  headers = res.headers
178
187
  if (headers != nil)
179
188
  headers.each { |k,v|
180
- RCT.log(INFO, "XH: #{k}: #{v}")
189
+ RCT.log(INFO, "#{k}: #{v}")
181
190
  }
191
+ RCT.log(INFO, "")
182
192
  end
183
193
 
184
194
  RCT.log(INFO, res.body)
@@ -0,0 +1,29 @@
1
+ #
2
+ # Copyright 2013 Jyri J. Virkki <jyri@virkki.com>
3
+ #
4
+ # This file is part of rct.
5
+ #
6
+ # rct is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # rct is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with rct. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+
20
+
21
+ # A few globals:
22
+ $HTTP = RCTHTTP.new()
23
+ $STATE = State.new()
24
+
25
+ # Set some defaults:
26
+ RCT.sset(RCT_MODE, RCT_MODE_CLI)
27
+ RCT.sset(SERVER_PROTOCOL, 'http')
28
+ RCT.sset(SERVER_HOSTNAME, 'localhost')
29
+ RCT.sset(SERVER_PORT, '80')
@@ -92,7 +92,7 @@ class Response
92
92
  #
93
93
  def headers
94
94
  return nil if @res == nil
95
- return @res.header
95
+ return @res.headers
96
96
  end
97
97
 
98
98
 
@@ -112,7 +112,12 @@ class Response
112
112
  #
113
113
  def to_s
114
114
  return "error: #{@fail_msg}" if @res == nil
115
- return "#{@res.status} #{@res.reason}"
115
+
116
+ rv = "#{@res.status} #{@res.reason}"
117
+ if (@fail_msg != nil)
118
+ rv += " (#{@fail_msg})"
119
+ end
120
+ return rv
116
121
  end
117
122
 
118
123
 
@@ -0,0 +1,24 @@
1
+ #
2
+ # Copyright 2013 Jyri J. Virkki <jyri@virkki.com>
3
+ #
4
+ # This file is part of rct.
5
+ #
6
+ # rct is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # rct is distributed in the hope that it will be useful, but
12
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with rct. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+
20
+
21
+ # CLI scripts built on top of rct can require this file to initialize rct.
22
+
23
+ require 'rct'
24
+ require 'rct/rct_init'
@@ -20,6 +20,7 @@
20
20
 
21
21
  require 'securerandom'
22
22
  require 'json'
23
+ require 'cgi'
23
24
 
24
25
 
25
26
  #------------------------------------------------------------------------------
@@ -40,11 +41,12 @@ class RCTClient
40
41
  return params
41
42
  end
42
43
 
44
+ val = CGI.escape(value)
43
45
  if (params == nil || params.empty?)
44
- return "?#{name}=#{value}"
46
+ return "?#{name}=#{val}"
45
47
  end
46
48
 
47
- return "#{params}&#{name}=#{value}"
49
+ return "#{params}&#{name}=#{val}"
48
50
  end
49
51
 
50
52
 
@@ -121,4 +123,14 @@ class RCTClient
121
123
  end
122
124
 
123
125
 
126
+ #----------------------------------------------------------------------------
127
+ # Convenience function, returns true if we're running in CLI mode.
128
+ #
129
+ def is_cli
130
+ mode = sget(RCT_MODE)
131
+ return true if (mode == RCT_MODE_CLI)
132
+ false
133
+ end
134
+
135
+
124
136
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rct
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: '0.3'
4
+ version: '0.5'
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jyri J. Virkki
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-11 00:00:00.000000000 Z
12
+ date: 2013-12-28 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: wip
15
15
  email: jyri@virkki.com
@@ -18,40 +18,40 @@ executables:
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
+ - lib/rct.rb
21
22
  - lib/rct/baseutils.rb
22
- - lib/rct/rct_cli.rb
23
- - lib/rct/constants.rb
24
- - lib/rct/state.rb
25
- - lib/rct/response.rb
23
+ - lib/rct/rct_init.rb
26
24
  - lib/rct/rct_http.rb
25
+ - lib/rct/response.rb
26
+ - lib/rct/state.rb
27
+ - lib/rct/constants.rb
28
+ - lib/rct/rct_cli.rb
27
29
  - lib/rct_client.rb
28
- - lib/rct.rb
30
+ - lib/rct_cli_app.rb
29
31
  - bin/rct
30
32
  homepage: https://github.com/jvirkki/rct
31
33
  licenses:
32
34
  - GPLv3
33
- post_install_message:
35
+ post_install_message:
34
36
  rdoc_options: []
35
37
  require_paths:
36
38
  - lib
37
39
  required_ruby_version: !ruby/object:Gem::Requirement
40
+ none: false
38
41
  requirements:
39
42
  - - ! '>='
40
43
  - !ruby/object:Gem::Version
41
- version: !binary |-
42
- MA==
43
- none: false
44
+ version: '0'
44
45
  required_rubygems_version: !ruby/object:Gem::Requirement
46
+ none: false
45
47
  requirements:
46
48
  - - ! '>='
47
49
  - !ruby/object:Gem::Version
48
- version: !binary |-
49
- MA==
50
- none: false
50
+ version: '0'
51
51
  requirements: []
52
52
  rubyforge_project: nowarning
53
- rubygems_version: 1.8.24
54
- signing_key:
53
+ rubygems_version: 1.8.23
54
+ signing_key:
55
55
  specification_version: 3
56
56
  summary: rct
57
57
  test_files: []