ysm4r 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Authors.txt +2 -0
- data/ChangeLog.txt +1 -0
- data/License.txt +13 -0
- data/Rakefile +209 -0
- data/Readme.txt +4 -0
- data/clean.sh +3 -0
- data/lib/soapex/driver.rb +13 -0
- data/lib/soapex/error.rb +49 -0
- data/lib/soapex/mapping.rb +31 -0
- data/lib/soapex/wsdl2ruby.rb +166 -0
- data/lib/ysm4r.rb +4 -0
- data/lib/ysm4r/client.rb +120 -0
- data/lib/ysm4r/service.rb +68 -0
- data/lib/ysm4r/v1/AccountService.rb +370 -0
- data/lib/ysm4r/v1/AccountServiceDriver.rb +162 -0
- data/lib/ysm4r/v1/AccountServiceMappingRegistry.rb +509 -0
- data/lib/ysm4r/v1/AdGroupService.rb +649 -0
- data/lib/ysm4r/v1/AdGroupServiceDriver.rb +226 -0
- data/lib/ysm4r/v1/AdGroupServiceMappingRegistry.rb +864 -0
- data/lib/ysm4r/v1/AdService.rb +533 -0
- data/lib/ysm4r/v1/AdServiceDriver.rb +178 -0
- data/lib/ysm4r/v1/AdServiceMappingRegistry.rb +753 -0
- data/lib/ysm4r/v1/BasicReportService.rb +259 -0
- data/lib/ysm4r/v1/BasicReportServiceDriver.rb +98 -0
- data/lib/ysm4r/v1/BasicReportServiceMappingRegistry.rb +389 -0
- data/lib/ysm4r/v1/BidInformationService.rb +69 -0
- data/lib/ysm4r/v1/BidInformationServiceDriver.rb +50 -0
- data/lib/ysm4r/v1/BidInformationServiceMappingRegistry.rb +135 -0
- data/lib/ysm4r/v1/BudgetingService.rb +161 -0
- data/lib/ysm4r/v1/BudgetingServiceDriver.rb +98 -0
- data/lib/ysm4r/v1/BudgetingServiceMappingRegistry.rb +230 -0
- data/lib/ysm4r/v1/CampaignService.rb +644 -0
- data/lib/ysm4r/v1/CampaignServiceDriver.rb +210 -0
- data/lib/ysm4r/v1/CampaignServiceMappingRegistry.rb +909 -0
- data/lib/ysm4r/v1/ExcludedWordsService.rb +294 -0
- data/lib/ysm4r/v1/ExcludedWordsServiceDriver.rb +122 -0
- data/lib/ysm4r/v1/ExcludedWordsServiceMappingRegistry.rb +469 -0
- data/lib/ysm4r/v1/ForecastService.rb +200 -0
- data/lib/ysm4r/v1/ForecastServiceDriver.rb +66 -0
- data/lib/ysm4r/v1/ForecastServiceMappingRegistry.rb +359 -0
- data/lib/ysm4r/v1/KeywordResearchService.rb +290 -0
- data/lib/ysm4r/v1/KeywordResearchServiceDriver.rb +66 -0
- data/lib/ysm4r/v1/KeywordResearchServiceMappingRegistry.rb +548 -0
- data/lib/ysm4r/v1/KeywordService.rb +671 -0
- data/lib/ysm4r/v1/KeywordServiceDriver.rb +218 -0
- data/lib/ysm4r/v1/KeywordServiceMappingRegistry.rb +913 -0
- data/lib/ysm4r/v1/LocationService.rb +53 -0
- data/lib/ysm4r/v1/LocationServiceDriver.rb +50 -0
- data/lib/ysm4r/v1/LocationServiceMappingRegistry.rb +111 -0
- data/lib/ysm4r/v1/MasterAccountService.rb +289 -0
- data/lib/ysm4r/v1/MasterAccountServiceDriver.rb +74 -0
- data/lib/ysm4r/v1/MasterAccountServiceMappingRegistry.rb +414 -0
- data/lib/ysm4r/v1/UpgradeService.rb +72 -0
- data/lib/ysm4r/v1/UpgradeServiceDriver.rb +58 -0
- data/lib/ysm4r/v1/UpgradeServiceMappingRegistry.rb +145 -0
- data/lib/ysm4r/v1/UserManagementService.rb +766 -0
- data/lib/ysm4r/v1/UserManagementServiceDriver.rb +290 -0
- data/lib/ysm4r/v1/UserManagementServiceMappingRegistry.rb +1057 -0
- data/lib/ysm4r/v1/sandbox/LocationService.rb +53 -0
- data/lib/ysm4r/v1/sandbox/LocationServiceDriver.rb +50 -0
- data/lib/ysm4r/v1/sandbox/LocationServiceMappingRegistry.rb +111 -0
- data/lib/ysm4r/v1/sandbox/UpgradeService.rb +72 -0
- data/lib/ysm4r/v1/sandbox/UpgradeServiceDriver.rb +58 -0
- data/lib/ysm4r/v1/sandbox/UpgradeServiceMappingRegistry.rb +145 -0
- data/lib/ysm4r/v2/AccountService.rb +372 -0
- data/lib/ysm4r/v2/AccountServiceDriver.rb +162 -0
- data/lib/ysm4r/v2/AccountServiceMappingRegistry.rb +510 -0
- data/lib/ysm4r/v2/AdGroupService.rb +649 -0
- data/lib/ysm4r/v2/AdGroupServiceDriver.rb +226 -0
- data/lib/ysm4r/v2/AdGroupServiceMappingRegistry.rb +864 -0
- data/lib/ysm4r/v2/AdService.rb +553 -0
- data/lib/ysm4r/v2/AdServiceDriver.rb +186 -0
- data/lib/ysm4r/v2/AdServiceMappingRegistry.rb +774 -0
- data/lib/ysm4r/v2/BasicReportService.rb +272 -0
- data/lib/ysm4r/v2/BasicReportServiceDriver.rb +98 -0
- data/lib/ysm4r/v2/BasicReportServiceMappingRegistry.rb +389 -0
- data/lib/ysm4r/v2/BidInformationService.rb +109 -0
- data/lib/ysm4r/v2/BidInformationServiceDriver.rb +66 -0
- data/lib/ysm4r/v2/BidInformationServiceMappingRegistry.rb +177 -0
- data/lib/ysm4r/v2/BudgetingService.rb +161 -0
- data/lib/ysm4r/v2/BudgetingServiceDriver.rb +98 -0
- data/lib/ysm4r/v2/BudgetingServiceMappingRegistry.rb +230 -0
- data/lib/ysm4r/v2/CampaignService.rb +644 -0
- data/lib/ysm4r/v2/CampaignServiceDriver.rb +210 -0
- data/lib/ysm4r/v2/CampaignServiceMappingRegistry.rb +909 -0
- data/lib/ysm4r/v2/CompanyService.rb +68 -0
- data/lib/ysm4r/v2/CompanyServiceDriver.rb +50 -0
- data/lib/ysm4r/v2/CompanyServiceMappingRegistry.rb +136 -0
- data/lib/ysm4r/v2/ExcludedWordsService.rb +294 -0
- data/lib/ysm4r/v2/ExcludedWordsServiceDriver.rb +122 -0
- data/lib/ysm4r/v2/ExcludedWordsServiceMappingRegistry.rb +469 -0
- data/lib/ysm4r/v2/ForecastService.rb +200 -0
- data/lib/ysm4r/v2/ForecastServiceDriver.rb +66 -0
- data/lib/ysm4r/v2/ForecastServiceMappingRegistry.rb +359 -0
- data/lib/ysm4r/v2/KeywordResearchService.rb +369 -0
- data/lib/ysm4r/v2/KeywordResearchServiceDriver.rb +82 -0
- data/lib/ysm4r/v2/KeywordResearchServiceMappingRegistry.rb +673 -0
- data/lib/ysm4r/v2/KeywordService.rb +691 -0
- data/lib/ysm4r/v2/KeywordServiceDriver.rb +226 -0
- data/lib/ysm4r/v2/KeywordServiceMappingRegistry.rb +934 -0
- data/lib/ysm4r/v2/LocationService.rb +53 -0
- data/lib/ysm4r/v2/LocationServiceDriver.rb +50 -0
- data/lib/ysm4r/v2/LocationServiceMappingRegistry.rb +111 -0
- data/lib/ysm4r/v2/MasterAccountService.rb +332 -0
- data/lib/ysm4r/v2/MasterAccountServiceDriver.rb +82 -0
- data/lib/ysm4r/v2/MasterAccountServiceMappingRegistry.rb +480 -0
- data/lib/ysm4r/v2/UpgradeService.rb +72 -0
- data/lib/ysm4r/v2/UpgradeServiceDriver.rb +58 -0
- data/lib/ysm4r/v2/UpgradeServiceMappingRegistry.rb +145 -0
- data/lib/ysm4r/v2/UserManagementService.rb +766 -0
- data/lib/ysm4r/v2/UserManagementServiceDriver.rb +290 -0
- data/lib/ysm4r/v2/UserManagementServiceMappingRegistry.rb +1057 -0
- data/lib/ysm4r/v2/sandbox/LocationService.rb +53 -0
- data/lib/ysm4r/v2/sandbox/LocationServiceDriver.rb +50 -0
- data/lib/ysm4r/v2/sandbox/LocationServiceMappingRegistry.rb +111 -0
- data/lib/ysm4r/v2/sandbox/UpgradeService.rb +72 -0
- data/lib/ysm4r/v2/sandbox/UpgradeServiceDriver.rb +58 -0
- data/lib/ysm4r/v2/sandbox/UpgradeServiceMappingRegistry.rb +145 -0
- data/setup.rb +1585 -0
- data/test/test_campaign_service.rb +12 -0
- data/test/test_keyword_research_service.rb +15 -0
- data/test/test_master_account_service.rb +18 -0
- data/ysm.properties +6 -0
- metadata +171 -0
data/Authors.txt
ADDED
data/ChangeLog.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1 -first version, supports YSM versions 1 and 2, not fully tested
|
data/License.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2007 Brian Hawthorne
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/Rakefile
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'soap4r'
|
3
|
+
require 'soap/compat'
|
4
|
+
require 'net/http'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'rake/clean'
|
7
|
+
require 'rake/testtask'
|
8
|
+
begin
|
9
|
+
require 'rake/gempackagetask'
|
10
|
+
rescue Exception
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
require 'lib/soapex/wsdl2ruby'
|
14
|
+
require 'lib/ysm4r/service'
|
15
|
+
|
16
|
+
CLOBBER.include('pkg')
|
17
|
+
|
18
|
+
# Determine the current version of the software
|
19
|
+
CURRENT_VERSION = '0.1'
|
20
|
+
PKG_VERSION = ENV['REL'] ? ENV['REL'] : CURRENT_VERSION
|
21
|
+
|
22
|
+
SRC_RB = FileList['lib/**/*.rb']
|
23
|
+
|
24
|
+
SANDBOX = true
|
25
|
+
WSDLDIR = 'wsdl'
|
26
|
+
LIBDIR = 'lib'
|
27
|
+
GENDIR = LIBDIR + '/ysm4r'
|
28
|
+
|
29
|
+
CLEAN.include(WSDLDIR)
|
30
|
+
YSM::Service.getVersions.each do |vnum|
|
31
|
+
CLEAN.include(File.join(GENDIR, "v#{vnum}"))
|
32
|
+
end
|
33
|
+
|
34
|
+
# The default task is run if rake is given no explicit arguments.
|
35
|
+
desc "Default task runs the unit tests."
|
36
|
+
task :default => [:test]
|
37
|
+
|
38
|
+
Rake::TestTask.new do |t|
|
39
|
+
t.libs << "test"
|
40
|
+
t.test_files = FileList['test/test*.rb']
|
41
|
+
t.verbose = true
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "gets the wsdl files for YSM services"
|
45
|
+
task :getwsdl do
|
46
|
+
host = "searchmarketing.yahoo.com"
|
47
|
+
YSM::Service.getVersions.each do |vnum|
|
48
|
+
vname = "v#{vnum}"
|
49
|
+
mkdir_p(File.join(WSDLDIR, vname, "sandbox"))
|
50
|
+
YSM::Service.getServices(vnum).each do |s|
|
51
|
+
path = "/developer/docs/V#{vnum}/wsdl/V#{vnum}/#{s}Service.wsdl"
|
52
|
+
save(getfile(host, path), getWsdlFileName(vname,s))
|
53
|
+
|
54
|
+
# put sandbox wsdls in their own directory
|
55
|
+
if ["Location", "Upgrade"].include?(s)
|
56
|
+
path = "/developer/docs/V#{vnum}/wsdl-sandbox/V#{vnum}/#{s}Service.wsdl"
|
57
|
+
save(getfile(host, path), getWsdlFileName(vname, s, true))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "generates YSM classes from the wsdl files"
|
65
|
+
task :generate do
|
66
|
+
YSM::Service.getVersions.each do |vnum|
|
67
|
+
vname = "v#{vnum}"
|
68
|
+
gendir = File.join(GENDIR, "v#{vnum}")
|
69
|
+
mkdir_p(File.join(gendir, "sandbox"))
|
70
|
+
YSM::Service.getServices(vnum).each do |name|
|
71
|
+
generateServiceFiles(gendir, vnum, name)
|
72
|
+
if ["Location", "Upgrade"].include?(name)
|
73
|
+
generateServiceFiles(gendir, vnum, name, true)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def generateServiceFiles(gendir, versionnum, servicename, sandbox=false)
|
80
|
+
versionname = "v#{versionnum}"
|
81
|
+
wsdlfilename = getWsdlFileName(versionname, servicename, sandbox)
|
82
|
+
sandbox = sandbox ? "sandbox" : ""
|
83
|
+
generator = SOAP::MultiService::WSDL2Ruby.new(File.join(gendir, sandbox), true)
|
84
|
+
generator.run(wsdlfilename, :modulepath=>"YSM::#{servicename}Service", :classdef=>nil, :mapping_registry=>nil, :driver=>nil)
|
85
|
+
fixFile(versionname, File.join(gendir, sandbox, "#{servicename}Service.rb"))
|
86
|
+
fixFile(versionname, File.join(gendir, sandbox, "#{servicename}ServiceMappingRegistry.rb"))
|
87
|
+
fixFile(versionname, File.join(gendir, sandbox, "#{servicename}ServiceDriver.rb"))
|
88
|
+
end
|
89
|
+
|
90
|
+
def filterFile(file)
|
91
|
+
tempfile = file + '.tmp'
|
92
|
+
outfile = File.new(tempfile,"w")
|
93
|
+
File.open(file, "r") do |infile|
|
94
|
+
yield(infile, outfile)
|
95
|
+
end
|
96
|
+
outfile.close
|
97
|
+
File.rename(tempfile, file)
|
98
|
+
end
|
99
|
+
|
100
|
+
def fixFile(versionname, file)
|
101
|
+
puts "fixing: #{file}"
|
102
|
+
filterFile(file) do |infile, outfile|
|
103
|
+
input = infile.read
|
104
|
+
# driver imports mapping registry instead of classdef file
|
105
|
+
if file =~ /Driver/
|
106
|
+
input.gsub!(/require \'(.*)Service/, 'require \'\1ServiceMappingRegistry')
|
107
|
+
end
|
108
|
+
# set proper requirepath (should be done by wsdl2ruby)
|
109
|
+
input.gsub!(/require \'(.*)Service(.*).rb\'/, 'require \'ysm4r/' + versionname + '/\1Service\2\'')
|
110
|
+
outfile.puts input
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
def getWsdlFileName(version, service, sandbox=false)
|
116
|
+
#(puts("getWsdlFilename(#{version.inspect}, #{service.inspect}, #{sandbox.inspect})")) if $DEBUG
|
117
|
+
sandbox = sandbox ? "sandbox" : ""
|
118
|
+
File.join(WSDLDIR, version, sandbox, service+".wsdl")
|
119
|
+
end
|
120
|
+
|
121
|
+
def getfile(host, path)
|
122
|
+
puts "getting http://#{host}#{path}"
|
123
|
+
http = Net::HTTP.new(host)
|
124
|
+
http.start { |w| w.get2(path).body }
|
125
|
+
end
|
126
|
+
|
127
|
+
def fixWsdl(wsdl)
|
128
|
+
['type', 'base'].each do |name|
|
129
|
+
['long', 'string', 'date', 'int', 'boolean'].each do |type|
|
130
|
+
wsdl.gsub!(Regexp.new("#{name}=\"#{type}\""),"#{name}=\"xsd:#{type}\"")
|
131
|
+
end
|
132
|
+
end
|
133
|
+
schema_ns = "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
|
134
|
+
if wsdl !~ Regexp.new(schema_ns)
|
135
|
+
wsdl.gsub!(/(<wsdl:definitions[^>]*)>/, '\1 ' + schema_ns + '>')
|
136
|
+
end
|
137
|
+
wsdl.gsub!("ServiceService", "Service")
|
138
|
+
wsdl
|
139
|
+
end
|
140
|
+
|
141
|
+
# Saves this document to the specified @var path.
|
142
|
+
#doesn't create the file if contains markup for google 404 page
|
143
|
+
def save(content, path)
|
144
|
+
if content !~ /<H2>Error 404<\/H2>/
|
145
|
+
File::open(path, 'w') {|f| f.write(fixWsdl(content))}
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# ====================================================================
|
150
|
+
# Create a task that will package the Rake software into distributable
|
151
|
+
# gem files.
|
152
|
+
|
153
|
+
PKG_FILES = FileList[
|
154
|
+
'*.*',
|
155
|
+
'Rakefile',
|
156
|
+
'lib/**/*.rb',
|
157
|
+
'examples/**/*.rb',
|
158
|
+
'test/**/*.rb',
|
159
|
+
'scripts/**/*.rb'
|
160
|
+
]
|
161
|
+
|
162
|
+
PKG_FILES.exclude(/\._/)
|
163
|
+
|
164
|
+
if ! defined?(Gem)
|
165
|
+
puts "Package Target requires RubyGEMs"
|
166
|
+
else
|
167
|
+
spec = Gem::Specification.new do |s|
|
168
|
+
|
169
|
+
#### Basic information.
|
170
|
+
|
171
|
+
s.name = 'ysm4r'
|
172
|
+
s.version = PKG_VERSION
|
173
|
+
s.summary = "Client library for the Yahoo Search Marketing API."
|
174
|
+
s.description = %{\
|
175
|
+
Ysm4r provides a high-level Ruby interface to Yahoo's Search Marketing API.\
|
176
|
+
Currently the following API versions are supported:\
|
177
|
+
\
|
178
|
+
* V1\
|
179
|
+
* V2\
|
180
|
+
}
|
181
|
+
|
182
|
+
s.files = PKG_FILES.to_a
|
183
|
+
s.require_path = 'lib'
|
184
|
+
s.autorequire = 'ysm4r'
|
185
|
+
|
186
|
+
s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ }
|
187
|
+
|
188
|
+
#s.has_rdoc = true
|
189
|
+
s.has_rdoc = false
|
190
|
+
#s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
|
191
|
+
#s.rdoc_options <<
|
192
|
+
# '--title' << 'Builder -- Easy XML Building' <<
|
193
|
+
# '--main' << 'README' <<
|
194
|
+
# '--line-numbers'
|
195
|
+
|
196
|
+
s.author = "Brian Hawthorne"
|
197
|
+
s.homepage = "http://rubyforge.org/projects/ysm4r/"
|
198
|
+
s.requirements << 'soap4r v 1.5.6 or greater'
|
199
|
+
s.requirements << 'http-access2 v 2.0.5 or greater'
|
200
|
+
s.rubyforge_project = 'ysm4r'
|
201
|
+
end
|
202
|
+
|
203
|
+
Rake::GemPackageTask.new(spec) do |t|
|
204
|
+
t.need_tar = true
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
#require 'scripts/publish'
|
209
|
+
|
data/Readme.txt
ADDED
data/clean.sh
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'soap/rpc/driver'
|
2
|
+
|
3
|
+
module SOAP::RPC
|
4
|
+
class Driver
|
5
|
+
def prepare(headers, endpoint=nil)
|
6
|
+
self.proxy.endpoint_url = endpoint if endpoint
|
7
|
+
headers.each {|h| self.headerhandler << h}
|
8
|
+
(self.wiredump_dev = STDOUT) if $DEBUG
|
9
|
+
self.options['protocol.http.ssl_config.verify_mode'] = nil
|
10
|
+
(self.wiredump_file_base = "debug") if $DEBUG
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/soapex/error.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
module SOAP::MultiService
|
2
|
+
|
3
|
+
# Generic error provides base class for more specific errors
|
4
|
+
# while still allowing a blanket rescue for any multiservice error.
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
# Raised if a call is made to a method that does not exist in the multiservice API
|
8
|
+
class UnknownAPICall < Error; end
|
9
|
+
|
10
|
+
# Raised if an attempt is made to instantiate a type that does not exist in
|
11
|
+
# the multiservice SOAP API
|
12
|
+
class UnknownType < Error; end
|
13
|
+
|
14
|
+
# Raised if a call returns with a SOAP error
|
15
|
+
class ApiError < Error
|
16
|
+
attr_accessor :soap_faultcode
|
17
|
+
attr_accessor :soap_faultstring
|
18
|
+
attr_accessor :code
|
19
|
+
attr_accessor :internal
|
20
|
+
attr_accessor :message
|
21
|
+
attr_accessor :trigger
|
22
|
+
attr_accessor :violations
|
23
|
+
|
24
|
+
def initialize(fault)
|
25
|
+
@soap_faultcode = getOrNil(fault, 'faultcode')
|
26
|
+
@soap_faultstring = getOrNil(fault, 'faultstring')
|
27
|
+
@code = getOrNil(fault.detail, 'code')
|
28
|
+
@internal = getOrNil(fault.detail,'internal')
|
29
|
+
@message = @soap_faultstring #getOrNil(fault.detail,'message')
|
30
|
+
@message = getOrNil(fault.detail,'message')
|
31
|
+
@trigger = getOrNil(fault.detail,'trigger')
|
32
|
+
@violations = getOrNil(fault.detail,'violations')
|
33
|
+
end
|
34
|
+
|
35
|
+
def inspect
|
36
|
+
"#<SOAP::MultiService::ApiError: \"#{@code || @soap_faultstring || @message}\">"
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
inspect
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def getOrNil(obj, meth)
|
45
|
+
obj.respond_to?(meth) ? eval("obj.#{meth}") : nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'soap/mapping/mapping'
|
2
|
+
require 'soap/mapping/registry'
|
3
|
+
|
4
|
+
def needspatch
|
5
|
+
SOAP::Mapping.set_attributes(a=[], :x=>10)
|
6
|
+
a != [10]
|
7
|
+
rescue Exception => e
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
if needspatch
|
12
|
+
|
13
|
+
# Apply mapping patch only if it has not already been applied.
|
14
|
+
class << SOAP::Mapping
|
15
|
+
alias set_attributes_old set_attributes
|
16
|
+
def set_attributes(obj, values)
|
17
|
+
if not obj.is_a?(::SOAP::Mapping::Object) and obj.kind_of?(Array)
|
18
|
+
values.each do |key, value|
|
19
|
+
if value.kind_of?(Array)
|
20
|
+
obj.concat(value)
|
21
|
+
else
|
22
|
+
obj << value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
else
|
26
|
+
set_attributes_old(obj, values)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
# WSDL4R - WSDL to ruby mapping library.
|
2
|
+
# Copyright (C) 2002-2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'logger'
|
10
|
+
require 'xsd/qname'
|
11
|
+
require 'wsdl/importer'
|
12
|
+
require 'wsdl/soap/classDefCreator'
|
13
|
+
require 'wsdl/soap/servantSkeltonCreator'
|
14
|
+
require 'wsdl/soap/driverCreator'
|
15
|
+
require 'wsdl/soap/clientSkeltonCreator'
|
16
|
+
require 'wsdl/soap/standaloneServerStubCreator'
|
17
|
+
require 'wsdl/soap/cgiStubCreator'
|
18
|
+
|
19
|
+
|
20
|
+
module SOAP
|
21
|
+
module MultiService
|
22
|
+
|
23
|
+
class WSDL2Ruby
|
24
|
+
attr_reader :options, :logger, :basedir
|
25
|
+
|
26
|
+
Options = [:classdef, :mapping_registry, :driver, :client_skelton, :servant_skelton,
|
27
|
+
:standalone_server_stub, :cgi_stub]
|
28
|
+
|
29
|
+
def initialize(basedir, force=false, logger=nil)
|
30
|
+
@basedir = basedir
|
31
|
+
@force = force
|
32
|
+
@logger ||= Logger.new(STDERR)
|
33
|
+
end
|
34
|
+
|
35
|
+
def run(location, options={})
|
36
|
+
@modulepath = (options[:modulepath] || "")
|
37
|
+
@wsdl = import(location)
|
38
|
+
@servicename = @wsdl.services[0].name.name
|
39
|
+
Options.each do |optname|
|
40
|
+
if options.key?(optname)
|
41
|
+
servicename = (options[optname] || @servicename)
|
42
|
+
method("create_#{optname.to_s}".to_sym).call(servicename)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def create_classdef(servicename)
|
50
|
+
@logger.info { "Creating class definition." }
|
51
|
+
@classdef_filename = servicename + '.rb'
|
52
|
+
write_file(@classdef_filename) do |f|
|
53
|
+
f << WSDL::SOAP::ClassDefCreator.new(@wsdl, @modulepath).dump
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_mapping_registry(servicename)
|
58
|
+
@logger.info { "Creating mapping registry." }
|
59
|
+
@mapping_registry_filename = servicename + 'MappingRegistry.rb'
|
60
|
+
write_file(@mapping_registry_filename) do |f|
|
61
|
+
f << "require '#{@classdef_filename}'\n" if @classdef_filename
|
62
|
+
f << WSDL::SOAP::MappingRegistryCreator.new(@wsdl, @modulepath).dump
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_driver(servicename)
|
67
|
+
@logger.info { "Creating driver." }
|
68
|
+
@driver_filename = servicename + 'Driver.rb'
|
69
|
+
write_file(@driver_filename) do |f|
|
70
|
+
f << "require '#{@classdef_filename}'\n\n" if @classdef_filename
|
71
|
+
f << WSDL::SOAP::DriverCreator.new(@wsdl, @modulepath).dump(create_name(servicename))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def create_client_skelton(servicename)
|
76
|
+
@logger.info { "Creating client skelton." }
|
77
|
+
@client_skelton_filename = servicename + 'Client.rb'
|
78
|
+
write_file(@client_skelton_filename) do |f|
|
79
|
+
f << shbang << "\n"
|
80
|
+
f << "require '#{@driver_filename}'\n\n" if @driver_filename
|
81
|
+
f << WSDL::SOAP::ClientSkeltonCreator.new(@wsdl, @modulepath).dump(
|
82
|
+
create_name(servicename))
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def create_servant_skelton(servicename)
|
87
|
+
@logger.info { "Creating servant skelton." }
|
88
|
+
@servant_skelton_filename = servicename + 'Servant' + '.rb'
|
89
|
+
write_file(@servant_skelton_filename) do |f|
|
90
|
+
f << "require '#{@classdef_filename}'\n\n" if @classdef_filename
|
91
|
+
f << WSDL::SOAP::ServantSkeltonCreator.new(@wsdl, @modulepath).dump(
|
92
|
+
create_name(servicename))
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def create_cgi_stub(servicename=nil)
|
97
|
+
@logger.info { "Creating CGI stub." }
|
98
|
+
@cgi_stubFilename = servicename + '.cgi'
|
99
|
+
write_file(@cgi_stubFilename) do |f|
|
100
|
+
f << shbang << "\n"
|
101
|
+
if @servant_skelton_filename
|
102
|
+
f << "require '#{@servant_skelton_filename}'\n\n"
|
103
|
+
end
|
104
|
+
f << WSDL::SOAP::CGIStubCreator.new(@wsdl, @modulepath).dump(create_name(servicename))
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def create_standalone_server_stub(servicename=nil)
|
109
|
+
@logger.info { "Creating standalone stub." }
|
110
|
+
@standalone_server_stub_filename = servicename + '.rb'
|
111
|
+
write_file(@standalone_server_stub_filename) do |f|
|
112
|
+
f << shbang << "\n"
|
113
|
+
f << "require '#{@servant_skelton_filename}'\n\n" if @servant_skelton_filename
|
114
|
+
f << WSDL::SOAP::StandaloneServerStubCreator.new(@wsdl, @modulepath).dump(
|
115
|
+
create_name(servicename))
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def write_file(filename)
|
120
|
+
check_file(filename) or return
|
121
|
+
|
122
|
+
if @basedir
|
123
|
+
filename = File.join(basedir, filename)
|
124
|
+
end
|
125
|
+
File.open(filename, "w") do |f|
|
126
|
+
yield f
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def check_file(filename)
|
131
|
+
if @basedir
|
132
|
+
filename = File.join(basedir, filename)
|
133
|
+
end
|
134
|
+
if FileTest.exist?(filename)
|
135
|
+
if @force
|
136
|
+
@logger.warn {
|
137
|
+
"File '#{filename}' exists but overrides it."
|
138
|
+
}
|
139
|
+
true
|
140
|
+
else
|
141
|
+
@logger.warn {
|
142
|
+
"File '#{filename}' exists. #{$0} did not override it."
|
143
|
+
}
|
144
|
+
false
|
145
|
+
end
|
146
|
+
else
|
147
|
+
@logger.info { "Creates file '#{filename}'." }
|
148
|
+
true
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def shbang
|
153
|
+
"#!/usr/bin/env ruby"
|
154
|
+
end
|
155
|
+
|
156
|
+
def create_name(name)
|
157
|
+
name ? XSD::QName.new(@wsdl.targetnamespace, name) : nil
|
158
|
+
end
|
159
|
+
|
160
|
+
def import(location)
|
161
|
+
WSDL::Importer.import(location)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|