actionwebservice 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ *0.6.2* (27th March, 2005)
2
+
3
+ * Allow method declarations for direct dispatching to declare parameters as well. We treat an arity of < 0 or > 0 as an indication that we should send through parameters. Closes #939.
4
+
5
+
1
6
  *0.6.1* (22th March, 2005)
2
7
 
3
8
  * Fix that method response QNames mismatched with that declared in the WSDL, makes SOAP::WSDLDriverFactory work against AWS again
data/Rakefile CHANGED
@@ -9,10 +9,15 @@ require 'fileutils'
9
9
 
10
10
  PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
11
11
  PKG_NAME = 'actionwebservice'
12
- PKG_VERSION = '0.6.1' + PKG_BUILD
12
+ PKG_VERSION = '0.6.2' + PKG_BUILD
13
13
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
14
14
  PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
15
15
 
16
+ RELEASE_NAME = "REL #{PKG_VERSION}"
17
+
18
+ RUBY_FORGE_PROJECT = "aws"
19
+ RUBY_FORGE_USER = "webster132"
20
+
16
21
  desc "Default Task"
17
22
  task :default => [ :test ]
18
23
 
@@ -30,6 +35,7 @@ Rake::RDocTask.new { |rdoc|
30
35
  rdoc.rdoc_dir = 'doc'
31
36
  rdoc.title = "Action Web Service -- Web services for Action Pack"
32
37
  rdoc.options << '--line-numbers --inline-source --main README --accessor class_inheritable_option=RW'
38
+ rdoc.template = "#{ENV['template']}.rb" if ENV['template']
33
39
  rdoc.rdoc_files.include('README')
34
40
  rdoc.rdoc_files.include('CHANGELOG')
35
41
  rdoc.rdoc_files.include('lib/action_web_service.rb')
@@ -56,9 +62,9 @@ spec = Gem::Specification.new do |s|
56
62
  s.rubyforge_project = "aws"
57
63
  s.homepage = "http://www.rubyonrails.org"
58
64
 
59
- s.add_dependency('actionpack', '= 1.6.0' + PKG_BUILD)
60
- s.add_dependency('activerecord', '= 1.9.0' + PKG_BUILD)
61
- s.add_dependency('activesupport', '= 1.0.2' + PKG_BUILD)
65
+ s.add_dependency('actionpack', '= 1.7.0' + PKG_BUILD)
66
+ s.add_dependency('activerecord', '= 1.9.1' + PKG_BUILD)
67
+ s.add_dependency('activesupport', '= 1.0.3' + PKG_BUILD)
62
68
 
63
69
  s.has_rdoc = true
64
70
  s.requirements << 'none'
@@ -144,3 +150,118 @@ task :lines do
144
150
  puts "Total:"
145
151
  puts " Lines #{total_lines}, LOC #{total_loc}"
146
152
  end
153
+
154
+ desc "Publish the release files to RubyForge."
155
+ task :release => [:package] do
156
+ files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
157
+
158
+ if RUBY_FORGE_PROJECT then
159
+ require 'net/http'
160
+ require 'open-uri'
161
+
162
+ project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
163
+ project_data = open(project_uri) { |data| data.read }
164
+ group_id = project_data[/[?&]group_id=(\d+)/, 1]
165
+ raise "Couldn't get group id" unless group_id
166
+
167
+ # This echos password to shell which is a bit sucky
168
+ if ENV["RUBY_FORGE_PASSWORD"]
169
+ password = ENV["RUBY_FORGE_PASSWORD"]
170
+ else
171
+ print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
172
+ password = STDIN.gets.chomp
173
+ end
174
+
175
+ login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
176
+ data = [
177
+ "login=1",
178
+ "form_loginname=#{RUBY_FORGE_USER}",
179
+ "form_pw=#{password}"
180
+ ].join("&")
181
+ http.post("/account/login.php", data)
182
+ end
183
+
184
+ cookie = login_response["set-cookie"]
185
+ raise "Login failed" unless cookie
186
+ headers = { "Cookie" => cookie }
187
+
188
+ release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
189
+ release_data = open(release_uri, headers) { |data| data.read }
190
+ package_id = release_data[/[?&]package_id=(\d+)/, 1]
191
+ raise "Couldn't get package id" unless package_id
192
+
193
+ first_file = true
194
+ release_id = ""
195
+
196
+ files.each do |filename|
197
+ basename = File.basename(filename)
198
+ file_ext = File.extname(filename)
199
+ file_data = File.open(filename, "rb") { |file| file.read }
200
+
201
+ puts "Releasing #{basename}..."
202
+
203
+ release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
204
+ release_date = Time.now.strftime("%Y-%m-%d %H:%M")
205
+ type_map = {
206
+ ".zip" => "3000",
207
+ ".tgz" => "3110",
208
+ ".gz" => "3110",
209
+ ".gem" => "1400"
210
+ }; type_map.default = "9999"
211
+ type = type_map[file_ext]
212
+ boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
213
+
214
+ query_hash = if first_file then
215
+ {
216
+ "group_id" => group_id,
217
+ "package_id" => package_id,
218
+ "release_name" => RELEASE_NAME,
219
+ "release_date" => release_date,
220
+ "type_id" => type,
221
+ "processor_id" => "8000", # Any
222
+ "release_notes" => "",
223
+ "release_changes" => "",
224
+ "preformatted" => "1",
225
+ "submit" => "1"
226
+ }
227
+ else
228
+ {
229
+ "group_id" => group_id,
230
+ "release_id" => release_id,
231
+ "package_id" => package_id,
232
+ "step2" => "1",
233
+ "type_id" => type,
234
+ "processor_id" => "8000", # Any
235
+ "submit" => "Add This File"
236
+ }
237
+ end
238
+
239
+ query = "?" + query_hash.map do |(name, value)|
240
+ [name, URI.encode(value)].join("=")
241
+ end.join("&")
242
+
243
+ data = [
244
+ "--" + boundary,
245
+ "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
246
+ "Content-Type: application/octet-stream",
247
+ "Content-Transfer-Encoding: binary",
248
+ "", file_data, ""
249
+ ].join("\x0D\x0A")
250
+
251
+ release_headers = headers.merge(
252
+ "Content-Type" => "multipart/form-data; boundary=#{boundary}"
253
+ )
254
+
255
+ target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
256
+ http.post(target + query, data, release_headers)
257
+ end
258
+
259
+ if first_file then
260
+ release_id = release_response.body[/release_id=(\d+)/, 1]
261
+ raise("Couldn't get release id") unless release_id
262
+ end
263
+
264
+ first_file = false
265
+ end
266
+ end
267
+ end
@@ -27,9 +27,9 @@ begin
27
27
  require 'active_record'
28
28
  rescue LoadError
29
29
  require 'rubygems'
30
- require_gem 'activesupport', '>= 0.9.0'
31
- require_gem 'actionpack', '>= 1.4.0'
32
- require_gem 'activerecord', '>= 1.6.0'
30
+ require_gem 'activesupport', '>= 1.0.2'
31
+ require_gem 'actionpack', '>= 1.6.0'
32
+ require_gem 'activerecord', '>= 1.9.0'
33
33
  end
34
34
 
35
35
  $:.unshift(File.dirname(__FILE__) + "/action_web_service/vendor/")
@@ -64,7 +64,8 @@ module ActionWebService # :nodoc:
64
64
  require_dependency(file_name)
65
65
  rescue LoadError => load_error
66
66
  requiree = / -- (.*?)(\.rb)?$/.match(load_error).to_a[1]
67
- raise LoadError, requiree == file_name ? "Missing API definition file in apis/#{file_name}.rb" : "Can't load file: #{requiree}"
67
+ msg = requiree == file_name ? "Missing API definition file in apis/#{file_name}.rb" : "Can't load file: #{requiree}"
68
+ raise LoadError.new(msg).copy_blame!(load_error)
68
69
  end
69
70
  klass = nil
70
71
  class_names.each do |name|
@@ -83,8 +84,10 @@ module ActionWebService # :nodoc:
83
84
  private
84
85
  def inherited(child)
85
86
  inherited_without_api(child)
86
- child.web_service_api(child.controller_path)
87
- rescue Exception => e
87
+ begin child.web_service_api(child.controller_path)
88
+ rescue MissingSourceFile => e
89
+ raise unless e.is_missing?("apis/#{child.controller_path}_api")
90
+ end
88
91
  end
89
92
  end
90
93
  end
@@ -34,7 +34,12 @@ module ActionWebService # :nodoc:
34
34
 
35
35
  def web_service_direct_invoke(invocation)
36
36
  @method_params = invocation.method_ordered_params
37
- return_value = self.__send__(invocation.api_method_name)
37
+ arity = method(invocation.api_method_name).arity rescue 0
38
+ if arity < 0 || arity > 0
39
+ return_value = self.__send__(invocation.api_method_name, *@method_params)
40
+ else
41
+ return_value = self.__send__(invocation.api_method_name)
42
+ end
38
43
  if invocation.api.has_api_method?(invocation.api_method_name)
39
44
  returns = invocation.returns ? invocation.returns[0] : nil
40
45
  else
@@ -40,6 +40,7 @@ module DispatcherTest
40
40
 
41
41
  class DirectAPI < ActionWebService::API::Base
42
42
  api_method :add, :expects => [{:a=>:int}, {:b=>:int}], :returns => [:int]
43
+ api_method :add2, :expects => [{:a=>:int}, {:b=>:int}], :returns => [:int]
43
44
  api_method :before_filtered
44
45
  api_method :after_filtered, :returns => [[:int]]
45
46
  api_method :struct_return, :returns => [[Node]]
@@ -141,6 +142,7 @@ module DispatcherTest
141
142
  after_filter :alwaysok, :only => [:after_filtered]
142
143
 
143
144
  attr :added
145
+ attr :added2
144
146
  attr :before_filter_called
145
147
  attr :before_filter_target_called
146
148
  attr :after_filter_called
@@ -159,6 +161,10 @@ module DispatcherTest
159
161
  @added = @params['a'] + @params['b']
160
162
  end
161
163
 
164
+ def add2(a, b)
165
+ @added2 = a + b
166
+ end
167
+
162
168
  def before_filtered
163
169
  @before_filter_target_called = true
164
170
  end
@@ -212,6 +218,8 @@ module DispatcherCommonTests
212
218
  def test_direct_dispatching
213
219
  assert_equal(70, do_method_call(@direct_controller, 'Add', 20, 50))
214
220
  assert_equal(70, @direct_controller.added)
221
+ assert_equal(50, do_method_call(@direct_controller, 'Add2', 25, 25))
222
+ assert_equal(50, @direct_controller.added2)
215
223
  assert(@direct_controller.void_called == false)
216
224
  case @encoder
217
225
  when WS::Encoding::SoapRpcEncoding
@@ -2,6 +2,18 @@ $:.unshift(File.dirname(__FILE__) + '/apis')
2
2
  require File.dirname(__FILE__) + '/abstract_dispatcher'
3
3
  require 'wsdl/parser'
4
4
 
5
+ class ActionController::Base
6
+ class << self
7
+ alias :inherited_without_name_error :inherited
8
+ def inherited(child)
9
+ begin
10
+ inherited_without_name_error(child)
11
+ rescue NameError => e
12
+ end
13
+ end
14
+ end
15
+ end
16
+
5
17
  class AutoLoadController < ActionController::Base; end
6
18
  class FailingAutoLoadController < ActionController::Base; end
7
19
  class BrokenAutoLoadController < ActionController::Base; end
@@ -39,7 +51,7 @@ class TC_DispatcherActionControllerSoap < Test::Unit::TestCase
39
51
  assert(!AutoLoadController.web_service_api.nil?)
40
52
  assert(AutoLoadController.web_service_api.has_public_api_method?('Void'))
41
53
  assert(FailingAutoLoadController.web_service_api.nil?)
42
- assert_raises(LoadError, NameError) do
54
+ assert_raises(MissingSourceFile) do
43
55
  FailingAutoLoadController.require_web_service_api :blah
44
56
  end
45
57
  assert_raises(ArgumentError) do
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.8
3
3
  specification_version: 1
4
4
  name: actionwebservice
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.6.1
7
- date: 2005-03-22
6
+ version: 0.6.2
7
+ date: 2005-03-27
8
8
  summary: Web service support for Action Pack.
9
9
  require_paths:
10
10
  - lib
@@ -142,7 +142,7 @@ dependencies:
142
142
  -
143
143
  - "="
144
144
  - !ruby/object:Gem::Version
145
- version: 1.6.0
145
+ version: 1.7.0
146
146
  version:
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: activerecord
@@ -152,7 +152,7 @@ dependencies:
152
152
  -
153
153
  - "="
154
154
  - !ruby/object:Gem::Version
155
- version: 1.9.0
155
+ version: 1.9.1
156
156
  version:
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: activesupport
@@ -162,5 +162,5 @@ dependencies:
162
162
  -
163
163
  - "="
164
164
  - !ruby/object:Gem::Version
165
- version: 1.0.2
165
+ version: 1.0.3
166
166
  version: