mirror of
https://github.com/discourse/discourse.git
synced 2025-04-11 01:36:39 +08:00
DEV: removes plugin generator (#14101)
I don't have the time to maintain this and https://github.com/discourse/discourse-plugin-skeleton is doing 80% of the job very easily.
This commit is contained in:
parent
f3f7efd439
commit
efbc2481d8
@ -1,125 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require 'rails/generators/named_base'
|
|
||||||
|
|
||||||
class PluginGenerator < Rails::Generators::NamedBase
|
|
||||||
attr_writer :about
|
|
||||||
attr_writer :github_username
|
|
||||||
|
|
||||||
desc 'This generator creates a Discourse plugin skeleton'
|
|
||||||
|
|
||||||
source_root File.expand_path('templates', __dir__)
|
|
||||||
|
|
||||||
class_option :no_license, type: :boolean, desc: "No license", default: false
|
|
||||||
|
|
||||||
def create_plugin
|
|
||||||
@about ||= ask("What is the purpose of your plugin?")
|
|
||||||
@github_username ||= ask("Github username?")
|
|
||||||
|
|
||||||
readme_file
|
|
||||||
routes_file
|
|
||||||
engine_file
|
|
||||||
plugin_file
|
|
||||||
controller_file
|
|
||||||
license_file
|
|
||||||
stylesheet_file
|
|
||||||
javascript_file
|
|
||||||
settings_file
|
|
||||||
locales_file
|
|
||||||
end
|
|
||||||
|
|
||||||
def controller_file
|
|
||||||
template 'plugin_controller.rb.erb', File.join('plugins', dasherized_name, "app/controllers/#{underscored_name}/#{underscored_name}_controller.rb")
|
|
||||||
template 'controller.rb.erb', File.join('plugins', dasherized_name, "app/controllers/#{underscored_name}/actions_controller.rb")
|
|
||||||
template 'controller_spec.rb.erb', File.join('plugins', dasherized_name, "spec/requests/actions_controller_spec.rb")
|
|
||||||
end
|
|
||||||
|
|
||||||
def readme_file
|
|
||||||
template 'README.md.erb', File.join('plugins', dasherized_name, "README.md")
|
|
||||||
end
|
|
||||||
|
|
||||||
def license_file
|
|
||||||
return if @options['no_license']
|
|
||||||
|
|
||||||
template 'LICENSE.erb', File.join('plugins', dasherized_name, "LICENSE")
|
|
||||||
end
|
|
||||||
|
|
||||||
def engine_file
|
|
||||||
template 'engine.rb.erb', File.join('plugins', dasherized_name, "lib", dasherized_name, "engine.rb")
|
|
||||||
end
|
|
||||||
|
|
||||||
def routes_file
|
|
||||||
template 'routes.rb.erb', File.join('plugins', dasherized_name, "config", "routes.rb")
|
|
||||||
template 'route_constraint.rb.erb', File.join('plugins', dasherized_name, "lib", "#{underscored_name}_constraint.rb")
|
|
||||||
end
|
|
||||||
|
|
||||||
def plugin_file
|
|
||||||
template 'plugin.rb.erb', File.join('plugins', dasherized_name, "plugin.rb")
|
|
||||||
end
|
|
||||||
|
|
||||||
def stylesheet_file
|
|
||||||
template 'stylesheet.scss.erb', File.join('plugins', dasherized_name, 'assets/stylesheets/common', "#{dasherized_name}.scss")
|
|
||||||
template 'stylesheet.scss.erb', File.join('plugins', dasherized_name, 'assets/stylesheets/desktop', "#{dasherized_name}.scss")
|
|
||||||
template 'stylesheet.scss.erb', File.join('plugins', dasherized_name, 'assets/stylesheets/mobile', "#{dasherized_name}.scss")
|
|
||||||
end
|
|
||||||
|
|
||||||
def javascript_file
|
|
||||||
template 'acceptance-test.js.es6.erb', File.join('plugins', dasherized_name, "test/javascripts/acceptance", "#{dasherized_name}-test.js.es6")
|
|
||||||
template 'javascript.js.es6.erb', File.join('plugins', dasherized_name, 'assets/javascripts/initializers', "#{dasherized_name}.js.es6")
|
|
||||||
template 'route-map.js.es6.erb', File.join('plugins', dasherized_name, 'assets/javascripts/discourse', "#{dasherized_name}-route-map.js.es6")
|
|
||||||
|
|
||||||
folder = 'assets/javascripts/discourse/templates'
|
|
||||||
template "#{folder}/template.hbs.erb", path(folder, "actions.hbs")
|
|
||||||
template "#{folder}/template-show.hbs.erb", path(folder, "actions-show.hbs")
|
|
||||||
template "#{folder}/template-index.hbs.erb", path(folder, "actions-index.hbs")
|
|
||||||
|
|
||||||
folder = 'assets/javascripts/discourse/routes'
|
|
||||||
template "#{folder}/route.js.es6.erb", path(folder, "#{dasherized_name}-actions.js.es6")
|
|
||||||
template "#{folder}/route-show.js.es6.erb", path(folder, "#{dasherized_name}-actions-show.js.es6")
|
|
||||||
template "#{folder}/route-index.js.es6.erb", path(folder, "#{dasherized_name}-actions-index.js.es6")
|
|
||||||
|
|
||||||
folder = 'assets/javascripts/discourse/controllers'
|
|
||||||
template "#{folder}/controller.js.es6.erb", path(folder, "actions.js.es6")
|
|
||||||
template "#{folder}/controller-show.js.es6.erb", path(folder, "actions-show.js.es6")
|
|
||||||
template "#{folder}/controller-index.js.es6.erb", path(folder, "actions-index.js.es6")
|
|
||||||
|
|
||||||
folder = 'assets/javascripts/discourse/models'
|
|
||||||
template "#{folder}/model.js.es6.erb", path(folder, "action.js.es6")
|
|
||||||
|
|
||||||
folder = 'assets/javascripts/discourse/adapters'
|
|
||||||
template "#{folder}/adapter.js.es6.erb", path(folder, "action.js.es6")
|
|
||||||
end
|
|
||||||
|
|
||||||
def settings_file
|
|
||||||
template 'settings.yml.erb', File.join('plugins', dasherized_name, 'config', 'settings.yml')
|
|
||||||
end
|
|
||||||
|
|
||||||
def locales_file
|
|
||||||
template 'client.en.yml.erb', path('config/locales/client.en.yml')
|
|
||||||
template 'server.en.yml.erb', File.join('plugins', dasherized_name, 'config/locales', 'server.en.yml')
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_gitignore_entry
|
|
||||||
plugin_entry = "!/plugins/#{dasherized_name}"
|
|
||||||
|
|
||||||
unless File.readlines(".gitignore").grep(/#{plugin_entry}/).size > 0
|
|
||||||
open('.gitignore', 'a') { |f| f.puts "\n#{plugin_entry}" }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def underscored_name
|
|
||||||
name.underscore
|
|
||||||
end
|
|
||||||
|
|
||||||
def dasherized_name
|
|
||||||
underscored_name.dasherize
|
|
||||||
end
|
|
||||||
|
|
||||||
def classified_name
|
|
||||||
name.tableize.classify
|
|
||||||
end
|
|
||||||
|
|
||||||
def path(*args)
|
|
||||||
File.join('plugins', dasherized_name, args)
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,20 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2018 <%= @github_username %>.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,16 +0,0 @@
|
|||||||
# <%= name %>
|
|
||||||
|
|
||||||
<%= name %> is a plugin for ...
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Follow [Install a Plugin](https://meta.discourse.org/t/install-a-plugin/19157)
|
|
||||||
how-to from the official Discourse Meta, using `git clone https://github.com/<%= @github_username %>/<%= dasherized_name %>.git`
|
|
||||||
as the plugin command.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
## Feedback
|
|
||||||
|
|
||||||
If you have issues or suggestions for the plugin, please bring them up on
|
|
||||||
[Discourse Meta](https://meta.discourse.org).
|
|
@ -1,9 +0,0 @@
|
|||||||
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
|
|
||||||
|
|
||||||
acceptance("<%= name %>", { loggedIn: true });
|
|
||||||
|
|
||||||
test("<%= name %> works", async assert => {
|
|
||||||
await visit("/admin/plugins/<%= dasherized_name %>");
|
|
||||||
|
|
||||||
assert.ok(false, "it shows the <%= name %> button");
|
|
||||||
});
|
|
@ -1,7 +0,0 @@
|
|||||||
import RestAdapter from "discourse/adapters/rest";
|
|
||||||
|
|
||||||
export default RestAdapter.extend({
|
|
||||||
basePath() {
|
|
||||||
return "/<%= dasherized_name %>/";
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,5 +0,0 @@
|
|||||||
import Controller from "@ember/controller";
|
|
||||||
export default Controller.extend({
|
|
||||||
actions: {
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,5 +0,0 @@
|
|||||||
import Controller from "@ember/controller";
|
|
||||||
export default Controller.extend({
|
|
||||||
actions: {
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,2 +0,0 @@
|
|||||||
import Controller from "@ember/controller";
|
|
||||||
export default Controller.extend({});
|
|
@ -1,3 +0,0 @@
|
|||||||
import RestModel from "discourse/models/rest";
|
|
||||||
|
|
||||||
export default RestModel.extend({});
|
|
@ -1,13 +0,0 @@
|
|||||||
import DiscourseRoute from 'discourse/routes/discourse'
|
|
||||||
|
|
||||||
export default DiscourseRoute.extend({
|
|
||||||
controllerName: "actions-index",
|
|
||||||
|
|
||||||
model(params) {
|
|
||||||
return this.store.findAll("action");
|
|
||||||
},
|
|
||||||
|
|
||||||
renderTemplate() {
|
|
||||||
this.render("actions-index");
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,13 +0,0 @@
|
|||||||
import DiscourseRoute from 'discourse/routes/discourse'
|
|
||||||
|
|
||||||
export default DiscourseRoute.extend({
|
|
||||||
controllerName: "actions-show",
|
|
||||||
|
|
||||||
model(params) {
|
|
||||||
return this.store.find("action", params.id);
|
|
||||||
},
|
|
||||||
|
|
||||||
renderTemplate() {
|
|
||||||
this.render("actions-show");
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,9 +0,0 @@
|
|||||||
import DiscourseRoute from 'discourse/routes/discourse'
|
|
||||||
|
|
||||||
export default DiscourseRoute.extend({
|
|
||||||
controllerName: "actions",
|
|
||||||
|
|
||||||
renderTemplate() {
|
|
||||||
this.render("actions");
|
|
||||||
}
|
|
||||||
});
|
|
@ -1 +0,0 @@
|
|||||||
controller-index.hbs
|
|
@ -1 +0,0 @@
|
|||||||
controller-show.hbs id: {{model.id}}
|
|
@ -1,3 +0,0 @@
|
|||||||
controller.hbs
|
|
||||||
|
|
||||||
{{outlet}}
|
|
@ -1,3 +0,0 @@
|
|||||||
en:
|
|
||||||
js:
|
|
||||||
<%= underscored_name %>:
|
|
@ -1,15 +0,0 @@
|
|||||||
module <%= classified_name %>
|
|
||||||
class ActionsController < ::ApplicationController
|
|
||||||
requires_plugin <%= classified_name %>
|
|
||||||
|
|
||||||
before_action :ensure_logged_in
|
|
||||||
|
|
||||||
def index
|
|
||||||
render_json_dump({ actions: [] })
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
render_json_dump({ action: { id: params[:id] } })
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,13 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
describe <%= name %>::ActionsController do
|
|
||||||
before do
|
|
||||||
Jobs.run_immediately!
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'can list' do
|
|
||||||
sign_in(Fabricate(:user))
|
|
||||||
get "/<%= dasherized_name %>/list.json"
|
|
||||||
expect(response.status).to eq(200)
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,12 +0,0 @@
|
|||||||
module <%= classified_name %>
|
|
||||||
class Engine < ::Rails::Engine
|
|
||||||
engine_name "<%= classified_name %>".freeze
|
|
||||||
isolate_namespace <%= classified_name %>
|
|
||||||
|
|
||||||
config.after_initialize do
|
|
||||||
Discourse::Application.routes.append do
|
|
||||||
mount ::<%= classified_name %>::Engine, at: "/<%= dasherized_name %>"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,13 +0,0 @@
|
|||||||
import { withPluginApi } from "discourse/lib/plugin-api";
|
|
||||||
|
|
||||||
function initialize<%= classified_name %>(api) {
|
|
||||||
// https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/lib/plugin-api.js.es6
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "<%= dasherized_name %>",
|
|
||||||
|
|
||||||
initialize() {
|
|
||||||
withPluginApi("0.8.31", initialize<%= classified_name %>);
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
# name: <%= name %>
|
|
||||||
# about: <%= @about %>
|
|
||||||
# version: 0.1
|
|
||||||
# authors: <%= @github_username %>
|
|
||||||
# url: https://github.com/<%= @github_username %>
|
|
||||||
|
|
||||||
register_asset 'stylesheets/common/<%= dasherized_name %>.scss'
|
|
||||||
register_asset 'stylesheets/desktop/<%= dasherized_name %>.scss', :desktop
|
|
||||||
register_asset 'stylesheets/mobile/<%= dasherized_name %>.scss', :mobile
|
|
||||||
|
|
||||||
enabled_site_setting :<%= underscored_name %>_enabled
|
|
||||||
|
|
||||||
PLUGIN_NAME ||= '<%= classified_name %>'
|
|
||||||
|
|
||||||
load File.expand_path('lib/<%= dasherized_name %>/engine.rb', __dir__)
|
|
||||||
|
|
||||||
after_initialize do
|
|
||||||
# https://github.com/discourse/discourse/blob/main/lib/plugin/instance.rb
|
|
||||||
end
|
|
@ -1,10 +0,0 @@
|
|||||||
module <%= classified_name %>
|
|
||||||
class <%= classified_name %>Controller < ::ApplicationController
|
|
||||||
requires_plugin <%= classified_name %>
|
|
||||||
|
|
||||||
before_action :ensure_logged_in
|
|
||||||
|
|
||||||
def index
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,7 +0,0 @@
|
|||||||
export default function() {
|
|
||||||
this.route("<%= dasherized_name %>", function() {
|
|
||||||
this.route("actions", function() {
|
|
||||||
this.route("show", { path: "/:id" });
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
@ -1,5 +0,0 @@
|
|||||||
class <%= classified_name %>Constraint
|
|
||||||
def matches?(request)
|
|
||||||
SiteSetting.<%= underscored_name %>_enabled
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,7 +0,0 @@
|
|||||||
require_dependency "<%= underscored_name %>_constraint"
|
|
||||||
|
|
||||||
<%= classified_name %>::Engine.routes.draw do
|
|
||||||
get "/" => "<%= underscored_name %>#index", constraints: <%= classified_name %>Constraint.new
|
|
||||||
get "/actions" => "actions#index", constraints: <%= classified_name %>Constraint.new
|
|
||||||
get "/actions/:id" => "actions#show", constraints: <%= classified_name %>Constraint.new
|
|
||||||
end
|
|
@ -1,8 +0,0 @@
|
|||||||
module Jobs
|
|
||||||
class ::<%= classified_name %>::Check < ::Jobs::Scheduled
|
|
||||||
every 1.day
|
|
||||||
|
|
||||||
def execute(args = nil)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,3 +0,0 @@
|
|||||||
en:
|
|
||||||
site_settings:
|
|
||||||
<%= underscored_name %>_enabled: "Enable <%= name %> plugin"
|
|
@ -1,4 +0,0 @@
|
|||||||
plugins:
|
|
||||||
<%= underscored_name %>_enabled:
|
|
||||||
default: true
|
|
||||||
client: true
|
|
@ -1,2 +0,0 @@
|
|||||||
.<%= dasherized_name %> {
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user