boxrubylib 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,284 @@
1
+ #= restclientlib.rb
2
+ #Author:: Takehiko Watanabe
3
+ #CopyRights:: Canon Software Inc.
4
+ #Created date:: 2009/06/10
5
+ #Version:: 1.0.0
6
+ #
7
+ #This file contains RestClientLib module.
8
+
9
+ require "net/http"
10
+ require "net/https"
11
+ require "openssl"
12
+ require "rexml/document"
13
+ require "digest/md5"
14
+ require "cgi"
15
+ Net::HTTP.version_1_2
16
+ #
17
+ #= module of Rest Client Library
18
+ #
19
+ module RestClientLib
20
+
21
+ #Http client class.
22
+ #
23
+ #attributes:
24
+ # proxyUrl - Proxy server URL, if you don't want to use Proxy set nil.
25
+ # proxyPort - Proxy server port.
26
+ class HttpClient
27
+ attr_accessor :proxyUrl, :proxyPort, :useSSL
28
+
29
+ # Constructor.
30
+ #
31
+ def initialize
32
+ @proxyUrl = nil
33
+ @proxyPort = nil
34
+ @useSSL = false;
35
+ end
36
+
37
+ # Throw http get request method to the server.
38
+ #
39
+ # [server]
40
+ # Server address.
41
+ # [port]
42
+ # Server port. If you want to use default port 80, you pass the parameter - nil.
43
+ # [uri]
44
+ # URI(include parameter and value).
45
+ # [header]
46
+ # HTTP header. If you don't need to describe, you pass the parameter - nil.
47
+ #
48
+ # [Return value]
49
+ # Http response body.
50
+ def httpGetRequest(server, port, uri, header)
51
+ port = 80 if (port == nil)
52
+ h = Net::HTTP::Proxy(@proxyUrl,@proxyPort).new(server, port)
53
+ if (@useSSL == true)
54
+ h.use_ssl = true
55
+ h.verify_mode = OpenSSL::SSL::VERIFY_NONE
56
+ end
57
+ return h.start() { |http|
58
+ response = http.get(uri, header)
59
+ response.body
60
+ }
61
+ end
62
+
63
+ # Throw http post request method to the server.
64
+ #
65
+ # [server]
66
+ # Server address.
67
+ # [port]
68
+ # Server port. If you want to use default port 80, you pass the parameter - nil.
69
+ # [uri]
70
+ # URI.
71
+ # [header]
72
+ # HTTP header. If you don't need to describe, you pass the parameter - nil.
73
+ # [data]
74
+ # HTTP query data.
75
+ #
76
+ # [Return value]
77
+ # Http response body.
78
+ def httpPostRequest(server, port, uri, header, data)
79
+ port = 80 if (port == nil)
80
+ h = Net::HTTP::Proxy(@proxyUrl,@proxyPort).new(server, port)
81
+ if (@useSSL == true)
82
+ h.use_ssl = true
83
+ h.verify_mode = OpenSSL::SSL::VERIFY_NONE
84
+ end
85
+ return h.start() { |http|
86
+ response = http.post(uri, data, header)
87
+ response.body
88
+ }
89
+
90
+ end
91
+
92
+ # Generate query string.
93
+ #
94
+ # [params]
95
+ # Query parameter. You need to pass this parameter to hash type.
96
+ #
97
+ # [Return value]
98
+ # Http response body.
99
+ def genQueryString(params)
100
+ ret = Array.new
101
+ params.each do |k,l|
102
+ if l.kind_of?(Array)
103
+ l.each do |m|
104
+ ret.push(CGI::escape(k.to_s) + "=" + CGI::escape(m.to_s))
105
+ end
106
+ else
107
+ ret.push(CGI::escape(k.to_s) + "=" + CGI::escape(l.to_s))
108
+ end
109
+ end
110
+ ret.join("&")
111
+ end
112
+
113
+ # Determine MIME type from file name.
114
+ #
115
+ # [filename]
116
+ # File name.
117
+ #
118
+ # [Return value]
119
+ # MIME type.
120
+ def resolveMime(filename)
121
+ if filename =~ /\.(\w+)$/
122
+ extn = $1
123
+ case extn
124
+ when "form" then return "multipart/form-data"
125
+ when "txt" then return "text/plain"
126
+ when "html" then return "text/html"
127
+ when "htm" then return "text/html"
128
+ when "jpg" then return "image/jpeg"
129
+ when "png" then return "image/png"
130
+ when "gif" then return "image/gif"
131
+ else return "application/octet-stream"
132
+ end
133
+ else
134
+ return "application/octet-stream"
135
+ end
136
+ end
137
+
138
+ # Assemble to multipart query.
139
+ #
140
+ # [name]
141
+ # Parameter name.
142
+ # [value]
143
+ # Parameter value.
144
+ #
145
+ # [Return value]
146
+ # Multipart query.
147
+ def toMultiPart(name, value)
148
+ return "Content-Disposition: form-data; name=\"#{CGI::escape(name)}\"\n\n#{value.to_s}\n"
149
+ end
150
+
151
+ # File to multipart query.
152
+ #
153
+ # [filename]
154
+ # File name.
155
+ # [content]
156
+ # File contents.
157
+ #
158
+ # [Return value]
159
+ # File query.
160
+ def fileToMultiPart(filename, content)
161
+ mimetype = resolveMime(filename)
162
+ ret = "Content-Disposition: form-data; name=\"fileField\"; filename=\"#{filename}\"\n"
163
+ if (mimetype != nil)
164
+ ret += "Content-Type: #{mimetype}\n\n" + content + "\n"
165
+ end
166
+ return ret
167
+ end
168
+
169
+ # Generate query for post method.
170
+ #
171
+ # [filename]
172
+ # File name.
173
+ # [params]
174
+ # Parameters.
175
+ # [data]
176
+ # File data.
177
+ # [boundary]
178
+ # Query boundary.
179
+ #
180
+ # [Return value]
181
+ # Query string.
182
+ def prepareQuery(filename, params, data, boundary)
183
+ query = ""
184
+ if (params != nil)
185
+ params.each do |key, value|
186
+ if (defined?(value)&&(value.instance_of?(Array)))
187
+ value.each do |item|
188
+ query += "--" + boundary +"\n" + toMultiPart(key, item)
189
+ end
190
+ else
191
+ query += "--" + boundary + "\n" + toMultiPart(key, value)
192
+ end
193
+ end
194
+ end
195
+ if ((filename != nil)&&(data != nil))
196
+ query += "--" + boundary + "\n";
197
+ query += fileToMultiPart(filename, data);
198
+ end
199
+ query += "--" + boundary + "--\n" if (query != nil)
200
+
201
+ return query
202
+ end
203
+ end
204
+
205
+ #Rest client class.
206
+ #
207
+ class RestClient < HttpClient
208
+ # Constructor.
209
+ #
210
+ def initialize
211
+ super
212
+ end
213
+
214
+ # Throw rest get request method to the server.
215
+ #
216
+ # [server]
217
+ # Server address.
218
+ # [port]
219
+ # Server port. If you want to use default port 80, you pass the parameter - nil.
220
+ # [apipath]
221
+ # Api path to rest request.
222
+ # [params]
223
+ # Parameters to get. You need to pass this parameter to hash type.
224
+ # [header]
225
+ # HTTP header. If you don't need to describe, you pass the parameter - nil.
226
+ #
227
+ # [Return value]
228
+ # Xml document.
229
+ def getRequest(server, port, apipath, params, header)
230
+ if (params != nil)
231
+ uri = apipath + "?" + genQueryString(params)
232
+ else
233
+ uri = apipath
234
+ end
235
+ body = self.httpGetRequest(server, port, uri, header)
236
+ begin
237
+ return REXML::Document.new(body) if body
238
+ return nil
239
+ rescue
240
+ body
241
+ end
242
+ end
243
+
244
+ # Throw rest post request method to the server.
245
+ # Notice - This method makes content-type header field automatically,
246
+ # so you don't set content-type to "header" parameter.
247
+ #
248
+ # [server]
249
+ # Server address.
250
+ # [port]
251
+ # Server port. If you want to use default port 80, you pass the parameter - nil.
252
+ # [apipath]
253
+ # Api path to rest request.
254
+ # [fileName]
255
+ # File name, if you want to post file.
256
+ # [data]
257
+ # File data, if you want to post file.
258
+ # [params]
259
+ # Parameters to post. You need to pass this parameter to hash type.
260
+ # [header]
261
+ # HTTP header. If you don't need to describe, you pass the parameter - nil.
262
+ #
263
+ # [Return value]
264
+ # Xml document.
265
+ def postRequest(server, port, apipath, fileName, data, params, header)
266
+ boundary = Digest::MD5.hexdigest(fileName != nil ? fileName : Time.now.to_s).to_s
267
+ query = self.prepareQuery(fileName, params, data, boundary)
268
+ if (header != nil)
269
+ localheader = Hash[header]
270
+ else
271
+ localheader = Hash.new
272
+ end
273
+ localheader['Content-Type'] = "multipart/form-data, boundary=" + boundary + "\r\n"
274
+ localheader['Content-Length'] = query.length.to_s
275
+ body = self.httpPostRequest(server, port, apipath, localheader, query)
276
+ begin
277
+ return REXML::Document.new(body) if body
278
+ return nil
279
+ rescue
280
+ return body
281
+ end
282
+ end
283
+ end
284
+ end
data/lib/boxrubylib.rb ADDED
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'boxrubylib/boxclientlib'
5
+
6
+ module Boxrubylib
7
+ VERSION = '0.0.1'
8
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/boxrubylib.rb'}"
9
+ puts "Loading boxrubylib gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestBoxrubylib < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/boxrubylib'
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: boxrubylib
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tomohiko Ariki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-21 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.2
24
+ version:
25
+ description: Ruby library of OpenBox API.
26
+ email:
27
+ - tomohiko.ariki@nifty.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - License.txt
35
+ - Manifest.txt
36
+ - PostInstall.txt
37
+ files:
38
+ - History.txt
39
+ - License.txt
40
+ - Manifest.txt
41
+ - PostInstall.txt
42
+ - README.rdoc
43
+ - Rakefile
44
+ - lib/boxrubylib.rb
45
+ - lib/boxrubylib/boxclientlib.rb
46
+ - lib/boxrubylib/restclientlib.rb
47
+ - script/console
48
+ - script/destroy
49
+ - script/generate
50
+ - test/test_boxrubylib.rb
51
+ - test/test_helper.rb
52
+ has_rdoc: true
53
+ homepage: http://boxrubylib.rubyforge.org
54
+ licenses: []
55
+
56
+ post_install_message: PostInstall.txt
57
+ rdoc_options:
58
+ - --main
59
+ - README.rdoc
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project: boxrubylib
77
+ rubygems_version: 1.3.5
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: Ruby library of OpenBox API.
81
+ test_files:
82
+ - test/test_boxrubylib.rb
83
+ - test/test_helper.rb