]> git.openstreetmap.org Git - rails.git/blob - vendor/plugins/oauth-plugin/generators/oauth_provider/oauth_provider_generator.rb
Merging 16820:16891 from trunk.
[rails.git] / vendor / plugins / oauth-plugin / generators / oauth_provider / oauth_provider_generator.rb
1 class OauthProviderGenerator < Rails::Generator::Base
2   default_options :skip_migration => false
3   attr_reader   :class_path,
4                 :controller_name,
5                 :controller_class_path,
6                 :controller_file_path,
7                 :controller_class_name,
8                 :controller_singular_name,
9                 :controller_plural_name
10   alias_method  :controller_file_name,  :controller_singular_name
11
12   def initialize(runtime_args, runtime_options = {})
13     super
14
15     @controller_name = args.shift || 'oauth'
16     @controller_singular_name = 'oauth'
17     @controller_plural_name = 'oauth'
18     @controller_file_name = 'oauth'
19     @controller_class_name="Oauth"
20     @class_path=''
21     @controller_class_path=''
22   end
23
24   def manifest
25     record do |m|
26       
27       # Check for class naming collisions.
28       # Check for class naming collisions.
29       m.class_collisions controller_class_path,       "#{controller_class_name}Controller", # Oauth Controller
30                                                       "#{controller_class_name}Helper",
31                                                       "#{controller_class_name}ClientsController",
32                                                       "#{controller_class_name}ClientsHelper"
33       m.class_collisions class_path,                  "ClientApplication","OauthNonce","RequestToken","AccessToken","OauthToken"
34
35       # Controller, helper, views, and test directories.
36       m.directory File.join('app/models', class_path)
37       m.directory File.join('app/controllers', controller_class_path)
38       m.directory File.join('app/helpers', controller_class_path)
39       m.directory File.join('app/views', controller_class_path, controller_file_name)
40       m.directory File.join('app/views', controller_class_path, 'oauth_clients')
41
42       m.template 'client_application.rb',File.join('app/models',"client_application.rb")
43       m.template 'oauth_token.rb',    File.join('app/models',"oauth_token.rb")
44       m.template 'request_token.rb',  File.join('app/models',"request_token.rb")
45       m.template 'access_token.rb',   File.join('app/models',"access_token.rb")
46       m.template 'oauth_nonce.rb',    File.join('app/models',"oauth_nonce.rb")
47
48       m.template 'controller.rb',File.join('app/controllers',controller_class_path,"#{controller_file_name}_controller.rb")
49       m.template 'helper.rb',File.join('app/helpers',controller_class_path,"#{controller_file_name}_helper.rb")
50
51       m.template 'clients_controller.rb',File.join('app/controllers',controller_class_path,"#{controller_file_name}_clients_controller.rb")
52       m.template 'clients_helper.rb',File.join('app/helpers',controller_class_path,"#{controller_file_name}_clients_helper.rb")
53
54       if !options[:test_unit]
55         m.directory File.join('spec')
56         m.directory File.join('spec/models')
57         m.directory File.join('spec/fixtures', class_path)
58         m.directory File.join('spec/controllers', controller_class_path)
59         
60         m.template 'client_application_spec.rb',File.join('spec/models',"client_application_spec.rb")
61         m.template 'oauth_token_spec.rb',    File.join('spec/models',"oauth_token_spec.rb")
62         m.template 'oauth_nonce_spec.rb',    File.join('spec/models',"oauth_nonce_spec.rb")
63         m.template 'client_applications.yml',File.join('spec/fixtures',"client_applications.yml")
64         m.template 'oauth_tokens.yml',    File.join('spec/fixtures',"oauth_tokens.yml")
65         m.template 'oauth_nonces.yml',    File.join('spec/fixtures',"oauth_nonces.yml")
66         m.template 'controller_spec_helper.rb', File.join('spec/controllers', controller_class_path,"#{controller_file_name}_controller_spec_helper.rb")
67         m.template 'controller_spec.rb',File.join('spec/controllers',controller_class_path,"#{controller_file_name}_controller_spec.rb")      
68         m.template 'clients_controller_spec.rb',File.join('spec/controllers',controller_class_path,"#{controller_file_name}_clients_controller_spec.rb")
69       else
70         m.directory File.join('test')
71         m.directory File.join('test/unit')
72         m.directory File.join('test/fixtures', class_path)
73         m.directory File.join('test/functional', controller_class_path)
74         m.template 'client_application_test.rb',File.join('test/unit',"client_application_test.rb")
75         m.template 'oauth_token_test.rb',    File.join('test/unit',"oauth_token_test.rb")
76         m.template 'oauth_nonce_test.rb',    File.join('test/unit',"oauth_nonce_test.rb")
77         m.template 'client_applications.yml',File.join('test/fixtures',"client_applications.yml")
78         m.template 'oauth_tokens.yml',    File.join('test/fixtures',"oauth_tokens.yml")
79         m.template 'oauth_nonces.yml',    File.join('test/fixtures',"oauth_nonces.yml")
80         m.template 'controller_test_helper.rb', File.join('test', controller_class_path,"#{controller_file_name}_controller_test_helper.rb")
81         m.template 'controller_test.rb',File.join('test/functional',controller_class_path,"#{controller_file_name}_controller_test.rb")
82         m.template 'clients_controller_test.rb',File.join('test/functional',controller_class_path,"#{controller_file_name}_clients_controller_test.rb")
83       end
84
85       m.template '_form.html.erb',  File.join('app/views', controller_class_path, 'oauth_clients', "_form.html.erb")
86       m.template 'new.html.erb',  File.join('app/views', controller_class_path, 'oauth_clients', "new.html.erb")
87       m.template 'index.html.erb',  File.join('app/views', controller_class_path, 'oauth_clients', "index.html.erb")
88       m.template 'show.html.erb',  File.join('app/views', controller_class_path, 'oauth_clients', "show.html.erb")
89       m.template 'edit.html.erb',  File.join('app/views', controller_class_path, 'oauth_clients', "edit.html.erb")
90       m.template 'authorize.html.erb',  File.join('app/views', controller_class_path, controller_file_name, "authorize.html.erb")
91       m.template 'authorize_success.html.erb',  File.join('app/views', controller_class_path, controller_file_name, "authorize_success.html.erb")
92       m.template 'authorize_failure.html.erb',  File.join('app/views', controller_class_path, controller_file_name, "authorize_failure.html.erb")
93       
94
95       unless options[:skip_migration]
96         m.migration_template 'migration.rb', 'db/migrate', :assigns => {
97           :migration_name => "CreateOauthTables"
98         }, :migration_file_name => "create_oauth_tables"
99       end
100     end
101   end
102
103   protected
104     def banner
105       "Usage: #{$0} #{spec.name}"
106     end
107
108     def add_options!(opt)
109       opt.separator ''
110       opt.separator 'Options:'
111       opt.on("--skip-migration", 
112              "Don't generate a migration file") { |v| options[:skip_migration] = v }
113       opt.on("--test-unit", 
114              "Generate the Test::Unit compatible tests instead of RSpec") { |v| options[:test_unit] = v }
115     end
116 end