1 class OauthProviderGenerator < Rails::Generator::Base
2 default_options :skip_migration => false
3 attr_reader :class_path,
5 :controller_class_path,
7 :controller_class_name,
8 :controller_singular_name,
9 :controller_plural_name
10 alias_method :controller_file_name, :controller_singular_name
12 def initialize(runtime_args, runtime_options = {})
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"
21 @controller_class_path=''
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"
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')
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")
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")
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")
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)
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")
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")
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")
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"
105 "Usage: #{$0} #{spec.name}"
108 def add_options!(opt)
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 }