3
3
require 'rails/generators/named_base'
4
4
5
5
class PluginGenerator < Rails ::Generators ::NamedBase
6
+ attr_writer :about
6
7
attr_writer :github_username
7
8
8
9
desc 'This generator creates a Discourse plugin skeleton'
9
10
10
11
source_root File . expand_path ( 'templates' , __dir__ )
11
12
12
- class_option :controller , type : :boolean , desc : "Generate controller" , default : true
13
- class_option :spec , type : :boolean , desc : "Generate spec" , default : true
14
- class_option :acceptance , type : :boolean , desc : "Generate acceptance test" , default : true
15
- class_option :stylesheet , type : :boolean , desc : "Generate Stylesheet" , default : true
16
- class_option :javascript , type : :boolean , desc : "Generate Javascript initializer" , default : true
17
- class_option :scheduled_job , type : :boolean , desc : "Generate scheduled job" , default : false
18
- class_option :help , type : :boolean , desc : "Adds help comments in generated files" , default : true
13
+ class_option :no_license , type : :boolean , desc : "No license" , default : false
19
14
20
- def create_acceptance_file
21
- return unless @options [ 'acceptance' ]
15
+ def create_plugin
16
+ @about ||= ask ( "What is the purpose of your plugin?" )
17
+ @github_username ||= ask ( "Github username?" )
22
18
23
- template 'acceptance-test.js.es6.erb' , File . join ( 'plugins' , dasherized_name , "test/javascripts/acceptance" , "#{ dasherized_name } -test.js.es6" )
19
+ readme_file
20
+ routes_file
21
+ engine_file
22
+ plugin_file
23
+ controller_file
24
+ license_file
25
+ stylesheet_file
26
+ javascript_file
27
+ settings_file
28
+ locales_file
24
29
end
25
30
26
- def create_spec_file
27
- return if ! @options [ 'spec' ] || ! @options [ 'controller' ]
28
-
31
+ def controller_file
32
+ template 'plugin_controller.rb.erb' , File . join ( 'plugins' , dasherized_name , "app/controllers/ #{ dasherized_name } / #{ underscored_name } _controller.rb" )
33
+ template 'controller.rb.erb' , File . join ( 'plugins' , dasherized_name , "app/controllers/ #{ dasherized_name } /actions_controller.rb" )
29
34
template 'controller_spec.rb.erb' , File . join ( 'plugins' , dasherized_name , "spec/requests/actions_controller_spec.rb" )
30
35
end
31
36
32
- def create_scheduled_job_file
33
- return unless @options [ 'scheduled_job' ]
34
-
35
- path = File . join ( 'plugins' , dasherized_name , 'jobs/scheduled' , "check_#{ underscored_name } .rb" )
36
- template 'scheduled_job.rb.erb' , path
37
- end
38
-
39
- def create_readme_file
40
- ensure_github_username
41
-
37
+ def readme_file
42
38
template 'README.md.erb' , File . join ( 'plugins' , dasherized_name , "README.md" )
43
39
end
44
40
45
- def create_license_file
46
- ensure_github_username
41
+ def license_file
42
+ return if @options [ 'no_license' ]
47
43
48
44
template 'LICENSE.erb' , File . join ( 'plugins' , dasherized_name , "LICENSE" )
49
45
end
50
46
51
- def create_plugin_file
52
- ensure_github_username
47
+ def engine_file
48
+ template 'engine.rb.erb' , File . join ( 'plugins' , dasherized_name , "lib" , dasherized_name , "engine.rb" )
49
+ end
53
50
54
- template 'plugin.rb.erb' , File . join ( 'plugins' , dasherized_name , "plugin.rb" )
51
+ def routes_file
52
+ template 'routes.rb.erb' , File . join ( 'plugins' , dasherized_name , "config" , "routes.rb" )
53
+ template 'route_constraint.rb.erb' , File . join ( 'plugins' , dasherized_name , "lib" , "#{ underscored_name } _constraint.rb" )
55
54
end
56
55
57
- def create_stylesheet_file
58
- return unless @options [ 'stylesheet' ]
56
+ def plugin_file
57
+ template 'plugin.rb.erb' , File . join ( 'plugins' , dasherized_name , "plugin.rb" )
58
+ end
59
59
60
+ def stylesheet_file
60
61
template 'stylesheet.scss.erb' , File . join ( 'plugins' , dasherized_name , 'assets/stylesheets/common' , "#{ dasherized_name } .scss" )
62
+ template 'stylesheet.scss.erb' , File . join ( 'plugins' , dasherized_name , 'assets/stylesheets/desktop' , "#{ dasherized_name } .scss" )
63
+ template 'stylesheet.scss.erb' , File . join ( 'plugins' , dasherized_name , 'assets/stylesheets/mobile' , "#{ dasherized_name } .scss" )
61
64
end
62
65
63
- def create_javascript_file
64
- return unless @options [ 'javascript' ]
66
+ def javascript_file
67
+ template 'acceptance-test.js.es6.erb' , File . join ( 'plugins' , dasherized_name , "test/javascripts/acceptance" , "#{ dasherized_name } -test.js.es6" )
68
+ template 'javascript.js.es6.erb' , File . join ( 'plugins' , dasherized_name , 'assets/javascripts/initializers' , "#{ dasherized_name } .js.es6" )
69
+ template 'route-map.js.es6.erb' , File . join ( 'plugins' , dasherized_name , 'assets/javascripts/discourse' , "#{ dasherized_name } -route-map.js.es6" )
70
+
71
+ folder = 'assets/javascripts/discourse/templates'
72
+ template "#{ folder } /template.hbs.erb" , path ( folder , "actions.hbs" )
73
+ template "#{ folder } /template-show.hbs.erb" , path ( folder , "actions-show.hbs" )
74
+ template "#{ folder } /template-index.hbs.erb" , path ( folder , "actions-index.hbs" )
75
+
76
+ folder = 'assets/javascripts/discourse/routes'
77
+ template "#{ folder } /route.js.es6.erb" , path ( folder , "#{ dasherized_name } -actions.js.es6" )
78
+ template "#{ folder } /route-show.js.es6.erb" , path ( folder , "#{ dasherized_name } -actions-show.js.es6" )
79
+ template "#{ folder } /route-index.js.es6.erb" , path ( folder , "#{ dasherized_name } -actions-index.js.es6" )
80
+
81
+ folder = 'assets/javascripts/discourse/controllers'
82
+ template "#{ folder } /controller.js.es6.erb" , path ( folder , "actions.js.es6" )
83
+ template "#{ folder } /controller-show.js.es6.erb" , path ( folder , "actions-show.js.es6" )
84
+ template "#{ folder } /controller-index.js.es6.erb" , path ( folder , "actions-index.js.es6" )
85
+
86
+ folder = 'assets/javascripts/discourse/models'
87
+ template "#{ folder } /model.js.es6.erb" , path ( folder , "action.js.es6" )
65
88
66
- template 'javascript.es6.erb' , File . join ( 'plugins' , dasherized_name , 'assets/javascripts/initializers' , "#{ dasherized_name } .es6" )
89
+ folder = 'assets/javascripts/discourse/adapters'
90
+ template "#{ folder } /adapter.js.es6.erb" , path ( folder , "action.js.es6" )
67
91
end
68
92
69
- def create_settings_file
93
+ def settings_file
70
94
template 'settings.yml.erb' , File . join ( 'plugins' , dasherized_name , 'config' , 'settings.yml' )
71
95
end
72
96
73
- def create_locales_file
74
- template 'client.en.yml.erb' , File . join ( 'plugins' , dasherized_name , ' config/locales' , ' client.en.yml')
97
+ def locales_file
98
+ template 'client.en.yml.erb' , path ( ' config/locales/ client.en.yml')
75
99
template 'server.en.yml.erb' , File . join ( 'plugins' , dasherized_name , 'config/locales' , 'server.en.yml' )
76
100
end
77
101
@@ -83,10 +107,6 @@ def create_gitignore_entry
83
107
end
84
108
end
85
109
86
- def ensure_github_username
87
- @github_username ||= ask ( "Github username?" )
88
- end
89
-
90
110
def underscored_name
91
111
name . underscore
92
112
end
@@ -98,4 +118,8 @@ def dasherized_name
98
118
def classified_name
99
119
name . tableize . classify
100
120
end
121
+
122
+ def path ( *args )
123
+ File . join ( 'plugins' , dasherized_name , args )
124
+ end
101
125
end
0 commit comments