From 9eb04967a4b7b7382cf5c562d379fdd65ceaaf1b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 6 Mar 2005 14:02:27 +0000 Subject: Added web_service generator (run ./script/generate web_service for help) #776 [Leon Bredt] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@851 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../generators/components/web_service/USAGE | 28 +++++++++++++++++++++ .../web_service/templates/api_definition.rb | 5 ++++ .../components/web_service/templates/controller.rb | 8 ++++++ .../web_service/templates/functional_test.rb | 19 ++++++++++++++ .../web_service/web_service_generator.rb | 29 ++++++++++++++++++++++ 5 files changed, 89 insertions(+) create mode 100644 railties/lib/rails_generator/generators/components/web_service/USAGE create mode 100644 railties/lib/rails_generator/generators/components/web_service/templates/api_definition.rb create mode 100644 railties/lib/rails_generator/generators/components/web_service/templates/controller.rb create mode 100644 railties/lib/rails_generator/generators/components/web_service/templates/functional_test.rb create mode 100644 railties/lib/rails_generator/generators/components/web_service/web_service_generator.rb (limited to 'railties/lib/rails_generator/generators') diff --git a/railties/lib/rails_generator/generators/components/web_service/USAGE b/railties/lib/rails_generator/generators/components/web_service/USAGE new file mode 100644 index 0000000000..d3e45b7fef --- /dev/null +++ b/railties/lib/rails_generator/generators/components/web_service/USAGE @@ -0,0 +1,28 @@ +Description: + The web service generator creates the controller and API definition for + a web service. + + The generator takes a web service name and a list of API methods as arguments. + The web service name may be given in CamelCase or under_score and should + contain no extra suffixes. To create a web service within a + module, specify the web service name as 'module/webservice'. + + The generator creates a controller class in app/controllers, an API definition + in app/apis, and a functional test suite in test/functional. + +Example: + ./script/generate web_service User add edit list remove + + User web service. + Controller: app/controllers/user_controller.rb + API: app/apis/user_api.rb + Test: test/functional/user_api_test.rb + +Modules Example: + ./script/generate web_service 'api/registration' register renew + + Registration web service. + Controller: app/controllers/api/registration_controller.rb + API: app/apis/api/registration_api.rb + Test: test/functional/api/registration_api_test.rb + diff --git a/railties/lib/rails_generator/generators/components/web_service/templates/api_definition.rb b/railties/lib/rails_generator/generators/components/web_service/templates/api_definition.rb new file mode 100644 index 0000000000..97d0b60869 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/web_service/templates/api_definition.rb @@ -0,0 +1,5 @@ +class <%= class_name %>Api < ActionWebService::API::Base +<% for method_name in args -%> + api_method :<%= method_name %> +<% end -%> +end diff --git a/railties/lib/rails_generator/generators/components/web_service/templates/controller.rb b/railties/lib/rails_generator/generators/components/web_service/templates/controller.rb new file mode 100644 index 0000000000..7b0a865709 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/web_service/templates/controller.rb @@ -0,0 +1,8 @@ +class <%= class_name %>Controller < ApplicationController + wsdl_service_name '<%= class_name %>' +<% for method_name in args -%> + + def <%= method_name %> + end +<% end -%> +end diff --git a/railties/lib/rails_generator/generators/components/web_service/templates/functional_test.rb b/railties/lib/rails_generator/generators/components/web_service/templates/functional_test.rb new file mode 100644 index 0000000000..c4d136f83d --- /dev/null +++ b/railties/lib/rails_generator/generators/components/web_service/templates/functional_test.rb @@ -0,0 +1,19 @@ +require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../test_helper' +require '<%= file_path %>_controller' + +class <%= class_name %>Controller; def rescue_action(e) raise e end; end + +class <%= class_name %>ControllerApiTest < Test::Unit::TestCase + def setup + @controller = <%= class_name %>Controller.new + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + end +<% for method_name in args -%> + + def test_<%= method_name %> + result = invoke :<%= method_name %> + assert_equal nil, result + end +<% end -%> +end diff --git a/railties/lib/rails_generator/generators/components/web_service/web_service_generator.rb b/railties/lib/rails_generator/generators/components/web_service/web_service_generator.rb new file mode 100644 index 0000000000..ee18bf8011 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/web_service/web_service_generator.rb @@ -0,0 +1,29 @@ +class WebServiceGenerator < Rails::Generator::NamedBase + def manifest + record do |m| + # Check for class naming collisions. + m.class_collisions class_path, "#{class_name}Api", "#{class_name}Controller", "#{class_name}ApiTest" + + # API and test directories. + m.directory File.join('app/apis', class_path) + m.directory File.join('app/controllers', class_path) + m.directory File.join('test/functional', class_path) + + # API definition, controller, and functional test. + m.template 'api_definition.rb', + File.join('app/apis', + class_path, + "#{file_name}_api.rb") + + m.template 'controller.rb', + File.join('app/controllers', + class_path, + "#{file_name}_controller.rb") + + m.template 'functional_test.rb', + File.join('test/functional', + class_path, + "#{file_name}_api_test.rb") + end + end +end -- cgit v1.2.3