ruby-cleverdome 0.0.1 → 0.0.2

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.
@@ -2,19 +2,24 @@ require 'nokogiri'
2
2
  require 'savon'
3
3
  require 'uuid'
4
4
  require 'signed_xml'
5
+ require 'mime/types'
6
+ require 'ruby-cleverdome/multipart'
7
+ require 'base64'
5
8
 
6
9
  module RubyCleverdome
7
10
  class Client
8
- def initialize(sso_endpoint, widgets_wsdl)
11
+ def initialize(sso_endpoint, widgets_path)
12
+ @widgets_path = widgets_path
13
+
9
14
  @sso_client = Savon.client(
10
15
  endpoint: sso_endpoint,
11
16
  namespace: 'urn:up-us:sso-service:service:v1',
12
- # proxy: 'http://127.0.0.1:8888',
17
+ proxy: 'http://127.0.0.1:8888',
13
18
  # log_level: :debug
14
19
  )
15
20
  @widgets_client = Savon.client(
16
- wsdl: widgets_wsdl,
17
- # proxy: 'http://127.0.0.1:8888',
21
+ wsdl: widgets_path + '?wsdl',
22
+ proxy: 'http://127.0.0.1:8888',
18
23
  element_form_default: :unqualified,
19
24
  # log_level: :debug
20
25
  )
@@ -38,7 +43,26 @@ module RubyCleverdome
38
43
  response = @widgets_client.call(
39
44
  method,
40
45
  :attributes => { 'xmlns' => 'http://tempuri.org/' },
41
- message: { sessionID: 'EE282ABB-7BC3-42D3-BE98-9F8CE4217A12' } .merge(locals) )
46
+ message: { sessionID: 'EE282ABB-7BC3-42D3-BE98-9F8CE4217A12' } .merge(locals)
47
+ )
48
+ end
49
+
50
+ def upload_file(session_id, app_id, file_path)
51
+ data, headers = Multipart::Post.prepare_query(
52
+ "sessionID" => session_id,
53
+ "file" => File.open(file_path),
54
+ 'applicationID' => app_id
55
+ )
56
+
57
+ response = @widgets_client.call(
58
+ :upload_file,
59
+ :attributes => {
60
+ 'xmlns' => 'http://tempuri.org/'
61
+ },
62
+ message: {
63
+ inputStream: Base64.encode64(data)
64
+ })
65
+ response.body[:upload_file_response][:upload_file_result]
42
66
  end
43
67
 
44
68
  def create_request(provider, uid)
@@ -0,0 +1,81 @@
1
+ # Takes a hash of string and file parameters and returns a string of text
2
+ # formatted to be sent as a multipart form post.
3
+ #
4
+ # Author:: Cody Brimhall <mailto:brimhall@somuchwit.com>
5
+ # Created:: 22 Feb 2008
6
+ # License:: Distributed under the terms of the WTFPL (http://www.wtfpl.net/txt/copying/)
7
+
8
+ require 'rubygems'
9
+ require 'mime/types'
10
+ require 'cgi'
11
+
12
+
13
+ module Multipart
14
+ VERSION = "1.0.0"
15
+
16
+ # Formats a given hash as a multipart form post
17
+ # If a hash value responds to :string or :read messages, then it is
18
+ # interpreted as a file and processed accordingly; otherwise, it is assumed
19
+ # to be a string
20
+ class Post
21
+ # We have to pretend we're a web browser...
22
+ USERAGENT = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/523.10.6 (KHTML, like Gecko) Version/3.0.4 Safari/523.10.6"
23
+ BOUNDARY = "0123456789ABLEWASIEREISAWELBA9876543210"
24
+ CONTENT_TYPE = "multipart/form-data; boundary=#{ BOUNDARY }"
25
+ HEADER = { "Content-Type" => CONTENT_TYPE, "User-Agent" => USERAGENT }
26
+
27
+ def self.prepare_query(params)
28
+ fp = []
29
+
30
+ params.each do |k, v|
31
+ # Are we trying to make a file parameter?
32
+ if v.respond_to?(:path) and v.respond_to?(:read) then
33
+ fp.push(FileParam.new(k, v.path, v.read))
34
+ # We must be trying to make a regular parameter
35
+ else
36
+ fp.push(StringParam.new(k, v))
37
+ end
38
+ end
39
+
40
+ # Assemble the request body using the special multipart format
41
+ query = fp.collect {|p| "--" + BOUNDARY + "\r\n" + p.to_multipart }.join("") + "--" + BOUNDARY + "--"
42
+ return query, HEADER
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ # Formats a basic string key/value pair for inclusion with a multipart post
49
+ class StringParam
50
+ attr_accessor :k, :v
51
+
52
+ def initialize(k, v)
53
+ @k = k
54
+ @v = v
55
+ end
56
+
57
+ def to_multipart
58
+ return "Content-Disposition: form-data; name=\"#{CGI::escape(k)}\"\r\n\r\n#{v}\r\n"
59
+ end
60
+ end
61
+
62
+ # Formats the contents of a file or string for inclusion with a multipart
63
+ # form post
64
+ class FileParam
65
+ attr_accessor :k, :filename, :content
66
+
67
+ def initialize(k, filename, content)
68
+ @k = k
69
+ @filename = filename
70
+ @content = content
71
+ end
72
+
73
+ def to_multipart
74
+ # If we can tell the possible mime-type from the filename, use the
75
+ # first in the list; otherwise, use "application/octet-stream"
76
+ mime_type = MIME::Types.type_for(filename)[0] || MIME::Types["application/octet-stream"][0]
77
+ return "Content-Disposition: form-data; name=\"#{CGI::escape(k)}\"; filename=\"#{ filename }\"\r\n" +
78
+ "Content-Type: #{ mime_type.simplified }\r\n\r\n#{ content }\r\n"
79
+ end
80
+ end
81
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-cleverdome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -75,6 +75,38 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: mime-types
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: base64
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
78
110
  description: Ruby client to access CleverDome.
79
111
  email: sanyo.gorbunov@gmail.com
80
112
  executables: []
@@ -82,6 +114,7 @@ extensions: []
82
114
  extra_rdoc_files: []
83
115
  files:
84
116
  - lib/ruby-cleverdome.rb
117
+ - lib/ruby-cleverdome/multipart.rb
85
118
  homepage: https://github.com/SanyoGorbunov/ruby-cleverdome/
86
119
  licenses: []
87
120
  post_install_message: