plutonium 0.9.0 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/Rakefile +9 -0
- data/app/assets/build/plutonium.js +5122 -0
- data/app/assets/javascripts/controllers/index.js +34 -0
- data/app/assets/javascripts/plutonium-app.js +7 -0
- data/app/assets/javascripts/plutonium.js +1 -0
- data/css.manifest +3 -0
- data/esbuild.config.js +44 -0
- data/lib/generators/pu/gen/component/component_generator.rb +13 -4
- data/lib/generators/pu/lib/plutonium_generators/concerns/actions.rb +86 -72
- data/lib/generators/pu/lib/plutonium_generators/model_generator.rb +1 -1
- data/lib/generators/pu/rodauth/install_generator.rb +1 -2
- data/lib/plutonium/core/fields/renderers/factory.rb +0 -1
- data/lib/plutonium/pkg/base.rb +0 -4
- data/lib/plutonium/railtie.rb +10 -2
- data/lib/plutonium/version.rb +1 -1
- data/lib/plutonium.rb +17 -14
- data/package-lock.json +0 -7
- data/package.json +5 -5
- data/postcss.config.js +1 -1
- data/public/plutonium-assets/plutonium-app-36KN5FVJ.js +6 -0
- data/public/plutonium-assets/plutonium-app-36KN5FVJ.js.map +7 -0
- data/public/plutonium-assets/plutonium.50232e35b5495f5ad90d.css +3415 -0
- data/tailwind.config.js +11 -12
- data/templates/base.rb +1 -1
- metadata +19 -22
- data/app/assets/js/controllers/application.js +0 -7
- data/app/assets/js/controllers/index.js +0 -30
- data/app/assets/js/plutonium.js +0 -2
- data/build.js +0 -12
- data/lib/generators/pu/gem/pagy/pagy_generator.rb +0 -25
- data/lib/generators/pu/gem/pagy/templates/config/initializers/pagy.rb +0 -4
- data/lib/generators/pu/gem/rabl/rabl_generator.rb +0 -25
- data/lib/generators/pu/gem/rabl/templates/.keep +0 -0
- data/lib/generators/pu/gem/rabl/templates/config/initializers/rabl.rb +0 -60
- data/lib/generators/pu/gem/simple_form/simple_form_generator.rb +0 -25
- data/lib/generators/pu/gem/simple_form/templates/.keep +0 -0
- data/lib/plutonium/core/fields/renderers/map_renderer.rb +0 -19
- /data/{lib/generators/pu/gem/pagy/templates → app/assets/build}/.keep +0 -0
- /data/app/assets/{js → javascripts}/controllers/resource_dismiss_controller.js +0 -0
- /data/app/assets/{js → javascripts}/controllers/resource_drop_down_controller.js +0 -0
- /data/app/assets/{js → javascripts}/turbo/index.js +0 -0
- /data/app/assets/{js → javascripts}/turbo/turbo_actions.js +0 -0
- /data/app/assets/{js → javascripts}/turbo/turbo_debug.js +0 -0
- /data/app/assets/{js → javascripts}/turbo/turbo_frame_monkey_patch.js +0 -0
- /data/app/assets/{css → stylesheets}/plutonium.css +0 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
// Import controllers here
|
2
|
+
import NestedResourceFormFieldsController from "../../../views/components/nested_resource_form_fields/nested_resource_form_fields_controller.js"
|
3
|
+
import TabBarController from "../../../views/components/tab_bar/tab_bar_controller.js"
|
4
|
+
import ToolbarController from "../../../views/components/toolbar/toolbar_controller.js"
|
5
|
+
import TableSearchInputController from "../../../views/components/table_search_input/table_search_input_controller.js"
|
6
|
+
import TableToolbarController from "../../../views/components/table_toolbar/table_toolbar_controller.js"
|
7
|
+
import TableController from "../../../views/components/table/table_controller.js"
|
8
|
+
import FormController from "../../../views/components/form/form_controller.js"
|
9
|
+
import ResourceDropDownController from "./resource_drop_down_controller.js"
|
10
|
+
import ResourceDismissController from "./resource_dismiss_controller.js"
|
11
|
+
|
12
|
+
export function registerControllers(application) {
|
13
|
+
// Register controllers here
|
14
|
+
application.register("nested-resource-form-fields", NestedResourceFormFieldsController)
|
15
|
+
application.register("tab-bar", TabBarController)
|
16
|
+
application.register("toolbar", ToolbarController)
|
17
|
+
application.register("table-search-input", TableSearchInputController)
|
18
|
+
application.register("table-toolbar", TableToolbarController)
|
19
|
+
application.register("table", TableController)
|
20
|
+
application.register("form", FormController)
|
21
|
+
application.register("resource-drop-down", ResourceDropDownController)
|
22
|
+
application.register("resource-dismiss", ResourceDismissController)
|
23
|
+
}
|
24
|
+
|
25
|
+
// Export controllers here
|
26
|
+
export { NestedResourceFormFieldsController };
|
27
|
+
export { TabBarController };
|
28
|
+
export { ToolbarController };
|
29
|
+
export { TableSearchInputController };
|
30
|
+
export { TableToolbarController };
|
31
|
+
export { TableController };
|
32
|
+
export { FormController };
|
33
|
+
export { ResourceDropDownController };
|
34
|
+
export { ResourceDismissController };
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from "./controllers"
|
data/css.manifest
ADDED
data/esbuild.config.js
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
const esbuild = require('esbuild');
|
2
|
+
const manifestPlugin = require('esbuild-plugin-manifest')
|
3
|
+
|
4
|
+
|
5
|
+
if (process.argv.includes("--prod")) {
|
6
|
+
esbuild.build({
|
7
|
+
outdir: "public/plutonium-assets",
|
8
|
+
entryPoints: [
|
9
|
+
"app/assets/javascripts/plutonium-app.js"
|
10
|
+
],
|
11
|
+
plugins: [
|
12
|
+
manifestPlugin({
|
13
|
+
filename: `${__dirname}/js.manifest`,
|
14
|
+
shortNames: true,
|
15
|
+
})
|
16
|
+
],
|
17
|
+
minify: true,
|
18
|
+
sourcemap: true,
|
19
|
+
bundle: true,
|
20
|
+
})
|
21
|
+
|
22
|
+
esbuild.build({
|
23
|
+
outdir: "app/assets/build",
|
24
|
+
entryPoints: [
|
25
|
+
"app/assets/javascripts/plutonium.js"
|
26
|
+
],
|
27
|
+
bundle: true,
|
28
|
+
})
|
29
|
+
}
|
30
|
+
else {
|
31
|
+
esbuild.context({
|
32
|
+
outdir: "public/plutonium-assets/build",
|
33
|
+
entryPoints: [
|
34
|
+
"app/assets/javascripts/plutonium-app.js"
|
35
|
+
],
|
36
|
+
plugins: [
|
37
|
+
manifestPlugin({
|
38
|
+
filename: `${__dirname}/js.dev.manifest`,
|
39
|
+
shortNames: true,
|
40
|
+
})
|
41
|
+
],
|
42
|
+
bundle: true,
|
43
|
+
}).then((context) => context.watch().catch((e) => console.error(e.message)))
|
44
|
+
}
|
@@ -20,8 +20,10 @@ module Pu
|
|
20
20
|
template "component.html.erb", "#{component_path}.html.erb"
|
21
21
|
template "controller.js", controller_path
|
22
22
|
|
23
|
-
|
24
|
-
insert_into_file
|
23
|
+
controllers_index_file = File.join __dir__, "../../../../../app/assets/javascripts/controllers/index.js"
|
24
|
+
insert_into_file controllers_index_file, controller_import, after: /.*Import controllers here*\n/
|
25
|
+
insert_into_file controllers_index_file, controller_registration, after: /.*Register controllers here*\n/
|
26
|
+
insert_into_file controllers_index_file, controller_export, after: /.*Export controllers here*\n/
|
25
27
|
end
|
26
28
|
|
27
29
|
protected
|
@@ -78,9 +80,16 @@ module Pu
|
|
78
80
|
[component_module, "#{component_name}Controller"].compact.join("::").gsub("::", "_")
|
79
81
|
end
|
80
82
|
|
83
|
+
def controller_import
|
84
|
+
"import #{controller_reference} from \"../../../../#{controller_path}\"\n"
|
85
|
+
end
|
86
|
+
|
81
87
|
def controller_registration
|
82
|
-
|
83
|
-
|
88
|
+
" application.register(\"#{controller_identifier}\", #{controller_reference})\n"
|
89
|
+
end
|
90
|
+
|
91
|
+
def controller_export
|
92
|
+
"export { #{controller_reference} }\n"
|
84
93
|
end
|
85
94
|
end
|
86
95
|
end
|
@@ -11,87 +11,89 @@ module PlutoniumGenerators
|
|
11
11
|
protected
|
12
12
|
|
13
13
|
#
|
14
|
-
# Sets the ruby version for the project in .ruby-version and Gemfile to `
|
14
|
+
# Sets the ruby version for the project in .ruby-version and Gemfile to `version`
|
15
15
|
#
|
16
|
-
# @
|
17
|
-
#
|
18
|
-
def set_ruby_version!
|
19
|
-
log :set_ruby_version!, PlutoniumGenerators::RUBY_VERSION
|
20
|
-
|
21
|
-
in_root do
|
22
|
-
create_file ".ruby-version", PlutoniumGenerators::RUBY_VERSION, force: true, verbose: false
|
23
|
-
gsub_file "Gemfile", /^ruby ["'].*["']/, "ruby '~> #{PlutoniumGenerators::RUBY_VERSION}'", verbose: false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
#
|
28
|
-
# Adds a new gem into the Gemfile
|
29
|
-
# Existing directives are updated if they do not match
|
30
|
-
# When `:group` is specified, the gem is inserted into the approriate gem group.
|
31
|
-
#
|
32
|
-
# @param [String] name the name of the gem
|
33
|
-
# @param [Hash] **kwargs set of options to append see #super
|
16
|
+
# @param [string] version semantic ruby version you want to use e.g. 3.3.0
|
34
17
|
#
|
35
18
|
# @return [void]
|
36
19
|
#
|
37
|
-
def
|
38
|
-
|
20
|
+
def set_ruby_version!(version)
|
21
|
+
log :set_ruby_version!, version
|
39
22
|
|
40
23
|
in_root do
|
41
|
-
|
42
|
-
|
43
|
-
File.rename("Gemfile", "Gemfile.bak")
|
44
|
-
File.write("Gemfile", "")
|
45
|
-
# Generate the directive
|
46
|
-
super
|
47
|
-
# Get the generated directive
|
48
|
-
directive = gemfile.strip
|
49
|
-
ensure
|
50
|
-
# Restore our gemfile
|
51
|
-
File.delete "Gemfile"
|
52
|
-
File.rename "Gemfile.bak", "Gemfile"
|
53
|
-
end
|
54
|
-
|
55
|
-
pattern = /^# gem ['"]#{name}['"].*/
|
56
|
-
if gemfile.match(pattern)
|
57
|
-
# Replace commented out directive
|
58
|
-
gsub_file("Gemfile", pattern, directive)
|
59
|
-
break
|
60
|
-
end
|
61
|
-
|
62
|
-
# Remove existing directive
|
63
|
-
remove_gem name
|
64
|
-
|
65
|
-
# Insert the new directive
|
66
|
-
if groups != []
|
67
|
-
str = groups.sort.map(&:inspect).join(", ")
|
68
|
-
after_sentinel = "group #{str} do\n"
|
69
|
-
|
70
|
-
unless File.read("Gemfile").match?(/^#{after_sentinel}/)
|
71
|
-
inject_into_file "Gemfile", "\n#{after_sentinel}end\n"
|
72
|
-
end
|
73
|
-
else
|
74
|
-
after_sentinel = "# Project gems\n\n"
|
75
|
-
unless File.read("Gemfile").match?(/^#{after_sentinel}/)
|
76
|
-
inject_into_file "Gemfile", "\n#{after_sentinel}", after: /^ruby .*\n/
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
inject_into_file "Gemfile", "#{directive}\n", after: /^#{after_sentinel}/
|
24
|
+
create_file ".ruby-version", version, force: true, verbose: false
|
25
|
+
gsub_file "Gemfile", /^ruby ["'].*["']/, "ruby '~> #{version}'", verbose: false
|
81
26
|
end
|
82
27
|
end
|
83
28
|
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
# @
|
90
|
-
#
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
29
|
+
# #
|
30
|
+
# # Adds a new gem into the Gemfile
|
31
|
+
# # Existing directives are updated if they do not match
|
32
|
+
# # When `:group` is specified, the gem is inserted into the approriate gem group.
|
33
|
+
# #
|
34
|
+
# # @param [String] name the name of the gem
|
35
|
+
# # @param [Hash] **kwargs set of options to append see #super
|
36
|
+
# #
|
37
|
+
# # @return [void]
|
38
|
+
# #
|
39
|
+
# def gem(name, **kwargs)
|
40
|
+
# groups = Array(kwargs.delete(:group))
|
41
|
+
|
42
|
+
# in_root do
|
43
|
+
# begin
|
44
|
+
# # Create a temp gemfile
|
45
|
+
# File.rename("Gemfile", "Gemfile.bak")
|
46
|
+
# File.write("Gemfile", "")
|
47
|
+
# # Generate the directive
|
48
|
+
# super
|
49
|
+
# # Get the generated directive
|
50
|
+
# directive = gemfile.strip
|
51
|
+
# ensure
|
52
|
+
# # Restore our gemfile
|
53
|
+
# File.delete "Gemfile"
|
54
|
+
# File.rename "Gemfile.bak", "Gemfile"
|
55
|
+
# end
|
56
|
+
|
57
|
+
# pattern = /^# gem ['"]#{name}['"].*/
|
58
|
+
# if gemfile.match(pattern)
|
59
|
+
# # Replace commented out directive
|
60
|
+
# gsub_file("Gemfile", pattern, directive)
|
61
|
+
# break
|
62
|
+
# end
|
63
|
+
|
64
|
+
# # Remove existing directive
|
65
|
+
# remove_gem name
|
66
|
+
|
67
|
+
# # Insert the new directive
|
68
|
+
# if groups != []
|
69
|
+
# str = groups.sort.map(&:inspect).join(", ")
|
70
|
+
# after_sentinel = "group #{str} do\n"
|
71
|
+
|
72
|
+
# unless File.read("Gemfile").match?(/^#{after_sentinel}/)
|
73
|
+
# inject_into_file "Gemfile", "\n#{after_sentinel}end\n"
|
74
|
+
# end
|
75
|
+
# else
|
76
|
+
# after_sentinel = "# Project gems\n\n"
|
77
|
+
# unless File.read("Gemfile").match?(/^#{after_sentinel}/)
|
78
|
+
# inject_into_file "Gemfile", "\n#{after_sentinel}", after: /^ruby .*\n/
|
79
|
+
# end
|
80
|
+
# end
|
81
|
+
|
82
|
+
# inject_into_file "Gemfile", "#{directive}\n", after: /^#{after_sentinel}/
|
83
|
+
# end
|
84
|
+
# end
|
85
|
+
|
86
|
+
# #
|
87
|
+
# # Removes a gem and any preceeding comments from the Gemfile
|
88
|
+
# #
|
89
|
+
# # @param gem [String] the name of the gem to remove
|
90
|
+
# #
|
91
|
+
# # @return [void]
|
92
|
+
# #
|
93
|
+
# def remove_gem(gem)
|
94
|
+
# log :remove_gem, gem
|
95
|
+
# gsub_file "Gemfile", /(:?^.*#.*\n)*.*gem ['"]#{gem}['"].*\n/, "", verbose: false
|
96
|
+
# end
|
95
97
|
|
96
98
|
#
|
97
99
|
# Evaluates the given template and merges it with the project's docker-compose.yml
|
@@ -348,6 +350,18 @@ module PlutoniumGenerators
|
|
348
350
|
File.read("Gemfile")
|
349
351
|
end
|
350
352
|
end
|
353
|
+
|
354
|
+
def bundle(*gems)
|
355
|
+
Bundler.with_unbundled_env do
|
356
|
+
run "bundle add #{Array(gems).join " "}"
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def unbundle(*gems)
|
361
|
+
Bundler.with_unbundled_env do
|
362
|
+
run "bundle remove #{Array(gems).join " "}"
|
363
|
+
end
|
364
|
+
end
|
351
365
|
end
|
352
366
|
end
|
353
367
|
end
|
@@ -7,7 +7,7 @@ module PlutoniumGenerators
|
|
7
7
|
class ModelGenerator < ActiveRecord::Generators::ModelGenerator
|
8
8
|
include PlutoniumGenerators::Generator
|
9
9
|
|
10
|
-
|
10
|
+
remove_hook_for :test_framework
|
11
11
|
remove_task :create_migration_file
|
12
12
|
remove_task :create_model_file
|
13
13
|
remove_task :create_module_file
|
@@ -9,7 +9,6 @@ module Plutonium
|
|
9
9
|
|
10
10
|
map_type :belongs_to, :has_one, :has_many, to: Plutonium::Core::Fields::Renderers::AssociationRenderer
|
11
11
|
map_type :attachment, to: Plutonium::Core::Fields::Renderers::AttachmentRenderer
|
12
|
-
map_type :map, to: Plutonium::Core::Fields::Renderers::MapRenderer
|
13
12
|
|
14
13
|
def self.build(name, type:, **)
|
15
14
|
mapping = mappings[type] || Plutonium::Core::Fields::Renderers::BasicRenderer
|
data/lib/plutonium/pkg/base.rb
CHANGED
data/lib/plutonium/railtie.rb
CHANGED
@@ -2,7 +2,15 @@ require "view_component"
|
|
2
2
|
|
3
3
|
module Plutonium
|
4
4
|
class Railtie < Rails::Railtie
|
5
|
-
|
5
|
+
config.plutonium = ActiveSupport::OrderedOptions.new
|
6
|
+
|
7
|
+
initializer "plutonium.append_assets_path" do |app|
|
8
|
+
config.to_prepare do
|
9
|
+
Rails.application.config.assets.paths << Plutonium.root.join("app/assets/build").to_s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
initializer "plutonium.asset_server" do
|
6
14
|
# setup a middleware to serve our assets
|
7
15
|
config.app_middleware.insert_before(
|
8
16
|
ActionDispatch::Static,
|
@@ -17,7 +25,7 @@ module Plutonium
|
|
17
25
|
)
|
18
26
|
end
|
19
27
|
|
20
|
-
initializer "plutonium.
|
28
|
+
initializer "plutonium.view_components_capture_compat" do
|
21
29
|
config.view_component.capture_compatibility_patch_enabled = true
|
22
30
|
end
|
23
31
|
end
|
data/lib/plutonium/version.rb
CHANGED
data/lib/plutonium.rb
CHANGED
@@ -21,28 +21,31 @@ module Plutonium
|
|
21
21
|
|
22
22
|
def self.stylesheet_link
|
23
23
|
if Plutonium::Config.development
|
24
|
-
|
25
|
-
"
|
24
|
+
base_dir = "/plutonium-assets/build"
|
25
|
+
manifest = "css.dev.manifest"
|
26
|
+
filename = "plutonium-dev.css"
|
26
27
|
else
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# "/plutonium-assets/#{file}"
|
31
|
-
# end
|
28
|
+
base_dir = "/plutonium-assets"
|
29
|
+
manifest = "css.manifest"
|
30
|
+
filename = "plutonium.css"
|
32
31
|
end
|
32
|
+
|
33
|
+
file = JSON.parse(File.read(root.join(manifest)))[filename]
|
34
|
+
"#{base_dir}/#{file}"
|
33
35
|
end
|
34
36
|
|
35
37
|
def self.script_link
|
38
|
+
filename = "plutonium-app.js"
|
36
39
|
if Plutonium::Config.development
|
37
|
-
|
38
|
-
"
|
40
|
+
base_dir = "/plutonium-assets/build"
|
41
|
+
manifest = "js.dev.manifest"
|
39
42
|
else
|
40
|
-
|
41
|
-
|
42
|
-
# file = JSON.parse(File.read(root.join("css.manifest")))["plutonium.css"]
|
43
|
-
# "/plutonium-assets/#{file}"
|
44
|
-
# end
|
43
|
+
base_dir = "/plutonium-assets"
|
44
|
+
manifest = "js.manifest"
|
45
45
|
end
|
46
|
+
|
47
|
+
file = JSON.parse(File.read(root.join(manifest)))[filename]
|
48
|
+
"#{base_dir}/#{file}"
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
data/package-lock.json
CHANGED
@@ -13,7 +13,6 @@
|
|
13
13
|
"esbuild-plugin-manifest": "^1.0.3",
|
14
14
|
"flowbite": "^2.3.0",
|
15
15
|
"lodash.debounce": "^4.0.8",
|
16
|
-
"mapkick": "^0.2.6",
|
17
16
|
"postcss": "^8.4.35",
|
18
17
|
"postcss-cli": "^11.0.0",
|
19
18
|
"postcss-hash": "^3.0.0",
|
@@ -1381,12 +1380,6 @@
|
|
1381
1380
|
"node": "14 || >=16.14"
|
1382
1381
|
}
|
1383
1382
|
},
|
1384
|
-
"node_modules/mapkick": {
|
1385
|
-
"version": "0.2.6",
|
1386
|
-
"resolved": "https://registry.npmjs.org/mapkick/-/mapkick-0.2.6.tgz",
|
1387
|
-
"integrity": "sha512-sDfPCOhTpQrzJc3Yzwg5XOBy5o2TTNEfH2dG2QZM7RUtfQzhY+xErfhQHrQvSOaWbf4zOegPq/dhaWuv2fo4CA==",
|
1388
|
-
"dev": true
|
1389
|
-
},
|
1390
1383
|
"node_modules/merge2": {
|
1391
1384
|
"version": "1.4.1",
|
1392
1385
|
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
data/package.json
CHANGED
@@ -11,12 +11,12 @@
|
|
11
11
|
"postcss": "^8.4.35",
|
12
12
|
"postcss-cli": "^11.0.0",
|
13
13
|
"postcss-hash": "^3.0.0",
|
14
|
-
"tailwindcss": "^3.4.1"
|
15
|
-
"mapkick": "^0.2.6"
|
14
|
+
"tailwindcss": "^3.4.1"
|
16
15
|
},
|
17
16
|
"scripts": {
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
17
|
+
"css:dev": "postcss app/assets/stylesheets/plutonium.css -o public/plutonium-assets/build/plutonium-dev.css --watch",
|
18
|
+
"js:dev": "node esbuild.config.js",
|
19
|
+
"css:prod": "postcss app/assets/stylesheets/plutonium.css -o public/plutonium-assets/plutonium.css --prod",
|
20
|
+
"js:prod": "node esbuild.config.js --prod"
|
21
21
|
}
|
22
22
|
}
|