@tutorialkit-rb/cli 1.5.2-rb.0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +15 -0
- package/dist/index.js +1384 -0
- package/package.json +66 -0
- package/template/.gitignore +13 -0
- package/template/.vscode/extensions.json +4 -0
- package/template/.vscode/launch.json +11 -0
- package/template/README.md +179 -0
- package/template/astro.config.ts +21 -0
- package/template/bin/build-wasm +30 -0
- package/template/icons/languages/css.svg +1 -0
- package/template/icons/languages/html.svg +1 -0
- package/template/icons/languages/js.svg +1 -0
- package/template/icons/languages/json.svg +1 -0
- package/template/icons/languages/markdown.svg +1 -0
- package/template/icons/languages/ruby.svg +1 -0
- package/template/icons/languages/sass.svg +1 -0
- package/template/icons/languages/ts.svg +1 -0
- package/template/icons/phosphor/file-erb.svg +1 -0
- package/template/icons/phosphor/file-rb.svg +5 -0
- package/template/package.json +37 -0
- package/template/package.json.bak +37 -0
- package/template/public/favicon.svg +4 -0
- package/template/public/logo-dark.svg +4 -0
- package/template/public/logo.svg +4 -0
- package/template/ruby-wasm/.railsrc +12 -0
- package/template/ruby-wasm/Gemfile +22 -0
- package/template/ruby-wasm/Gemfile.lock +292 -0
- package/template/ruby-wasm/README.md +19 -0
- package/template/ruby-wasm/bin/pack +16 -0
- package/template/ruby-wasm/boot.rb +32 -0
- package/template/ruby-wasm/config/wasmify.yml +23 -0
- package/template/src/components/FileManager.tsx +116 -0
- package/template/src/components/GitHubLink.astro +17 -0
- package/template/src/components/HeadTags.astro +65 -0
- package/template/src/components/HelpDropdown.tsx +72 -0
- package/template/src/components/RailsPathLinkHandler.tsx +107 -0
- package/template/src/components/ShellConfigurator.tsx +95 -0
- package/template/src/components/TopBar.astro +48 -0
- package/template/src/content/config.ts +9 -0
- package/template/src/content/tutorial/1-getting-started/1-creating-your-first-rails-app/_files/workspace/.keep +0 -0
- package/template/src/content/tutorial/1-getting-started/1-creating-your-first-rails-app/content.md +34 -0
- package/template/src/content/tutorial/1-getting-started/2-rails-console/_files/.tk-config.json +3 -0
- package/template/src/content/tutorial/1-getting-started/2-rails-console/_files/workspace/.keep +0 -0
- package/template/src/content/tutorial/1-getting-started/2-rails-console/content.md +37 -0
- package/template/src/content/tutorial/1-getting-started/meta.md +4 -0
- package/template/src/content/tutorial/2-controllers/2-crud-operations/_files/.tk-config.json +3 -0
- package/template/src/content/tutorial/2-controllers/2-crud-operations/_files/workspace/.keep +0 -0
- package/template/src/content/tutorial/2-controllers/2-crud-operations/content.md +99 -0
- package/template/src/content/tutorial/2-controllers/meta.md +4 -0
- package/template/src/content/tutorial/meta.md +18 -0
- package/template/src/env.d.ts +3 -0
- package/template/src/plugins/remarkRailsPathLinks.ts +39 -0
- package/template/src/templates/crud-products/.tk-config.json +3 -0
- package/template/src/templates/crud-products/workspace/.keep +0 -0
- package/template/src/templates/crud-products/workspace/store/app/controllers/products_controller.rb +48 -0
- package/template/src/templates/crud-products/workspace/store/app/models/product.rb +3 -0
- package/template/src/templates/crud-products/workspace/store/app/views/products/_form.html.erb +10 -0
- package/template/src/templates/crud-products/workspace/store/app/views/products/edit.html.erb +4 -0
- package/template/src/templates/crud-products/workspace/store/app/views/products/index.html.erb +11 -0
- package/template/src/templates/crud-products/workspace/store/app/views/products/new.html.erb +4 -0
- package/template/src/templates/crud-products/workspace/store/app/views/products/show.html.erb +5 -0
- package/template/src/templates/crud-products/workspace/store/config/routes.rb +6 -0
- package/template/src/templates/crud-products/workspace/store/db/migrate/20250521010850_create_products.rb +9 -0
- package/template/src/templates/crud-products/workspace/store/db/schema.rb +22 -0
- package/template/src/templates/crud-products/workspace/store/db/seeds.rb +3 -0
- package/template/src/templates/crud-products/workspace/store/test/fixtures/products.yml +7 -0
- package/template/src/templates/crud-products/workspace/store/test/models/product_test.rb +7 -0
- package/template/src/templates/default/bin/console +9 -0
- package/template/src/templates/default/bin/rackup +11 -0
- package/template/src/templates/default/bin/rails +41 -0
- package/template/src/templates/default/bin/ruby +37 -0
- package/template/src/templates/default/lib/commands.js +39 -0
- package/template/src/templates/default/lib/database.js +46 -0
- package/template/src/templates/default/lib/irb.js +110 -0
- package/template/src/templates/default/lib/patches/app_generator.rb +43 -0
- package/template/src/templates/default/lib/patches/authentication.rb +24 -0
- package/template/src/templates/default/lib/rails.js +69 -0
- package/template/src/templates/default/lib/server/frame_location_middleware.js +77 -0
- package/template/src/templates/default/lib/server.js +307 -0
- package/template/src/templates/default/package-lock.json +1830 -0
- package/template/src/templates/default/package.json +23 -0
- package/template/src/templates/default/pgdata/.keep +0 -0
- package/template/src/templates/default/scripts/createdb.js +7 -0
- package/template/src/templates/default/scripts/rails.js +52 -0
- package/template/src/templates/default/scripts/wait-for-wasm.js +103 -0
- package/template/src/templates/default/workspace/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/.ruby-version +1 -0
- package/template/src/templates/rails-app/workspace/store/Gemfile +37 -0
- package/template/src/templates/rails-app/workspace/store/README.md +24 -0
- package/template/src/templates/rails-app/workspace/store/Rakefile +6 -0
- package/template/src/templates/rails-app/workspace/store/app/assets/images/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/app/assets/stylesheets/application.css +10 -0
- package/template/src/templates/rails-app/workspace/store/app/controllers/application_controller.rb +4 -0
- package/template/src/templates/rails-app/workspace/store/app/helpers/application_helper.rb +2 -0
- package/template/src/templates/rails-app/workspace/store/app/javascript/application.js +4 -0
- package/template/src/templates/rails-app/workspace/store/app/javascript/controllers/application.js +9 -0
- package/template/src/templates/rails-app/workspace/store/app/javascript/controllers/index.js +4 -0
- package/template/src/templates/rails-app/workspace/store/app/jobs/application_job.rb +7 -0
- package/template/src/templates/rails-app/workspace/store/app/mailers/application_mailer.rb +4 -0
- package/template/src/templates/rails-app/workspace/store/app/models/application_record.rb +3 -0
- package/template/src/templates/rails-app/workspace/store/app/models/concerns/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/app/views/layouts/application.html.erb +28 -0
- package/template/src/templates/rails-app/workspace/store/app/views/layouts/mailer.html.erb +13 -0
- package/template/src/templates/rails-app/workspace/store/app/views/layouts/mailer.text.erb +1 -0
- package/template/src/templates/rails-app/workspace/store/app/views/pwa/manifest.json.erb +22 -0
- package/template/src/templates/rails-app/workspace/store/app/views/pwa/service-worker.js +26 -0
- package/template/src/templates/rails-app/workspace/store/bin/importmap +4 -0
- package/template/src/templates/rails-app/workspace/store/bin/rails +4 -0
- package/template/src/templates/rails-app/workspace/store/config/application.rb +30 -0
- package/template/src/templates/rails-app/workspace/store/config/boot.rb +3 -0
- package/template/src/templates/rails-app/workspace/store/config/cable.yml +10 -0
- package/template/src/templates/rails-app/workspace/store/config/credentials.yml.enc +1 -0
- package/template/src/templates/rails-app/workspace/store/config/database.yml +32 -0
- package/template/src/templates/rails-app/workspace/store/config/environment.rb +5 -0
- package/template/src/templates/rails-app/workspace/store/config/environments/development.rb +69 -0
- package/template/src/templates/rails-app/workspace/store/config/environments/production.rb +89 -0
- package/template/src/templates/rails-app/workspace/store/config/environments/test.rb +53 -0
- package/template/src/templates/rails-app/workspace/store/config/importmap.rb +9 -0
- package/template/src/templates/rails-app/workspace/store/config/initializers/assets.rb +7 -0
- package/template/src/templates/rails-app/workspace/store/config/initializers/content_security_policy.rb +25 -0
- package/template/src/templates/rails-app/workspace/store/config/initializers/filter_parameter_logging.rb +8 -0
- package/template/src/templates/rails-app/workspace/store/config/initializers/inflections.rb +16 -0
- package/template/src/templates/rails-app/workspace/store/config/locales/en.yml +31 -0
- package/template/src/templates/rails-app/workspace/store/config/master.key +1 -0
- package/template/src/templates/rails-app/workspace/store/config/puma.rb +41 -0
- package/template/src/templates/rails-app/workspace/store/config/routes.rb +4 -0
- package/template/src/templates/rails-app/workspace/store/config/storage.yml +34 -0
- package/template/src/templates/rails-app/workspace/store/config.ru +6 -0
- package/template/src/templates/rails-app/workspace/store/db/seeds.rb +9 -0
- package/template/src/templates/rails-app/workspace/store/log/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/public/400.html +114 -0
- package/template/src/templates/rails-app/workspace/store/public/404.html +114 -0
- package/template/src/templates/rails-app/workspace/store/public/406-unsupported-browser.html +114 -0
- package/template/src/templates/rails-app/workspace/store/public/422.html +114 -0
- package/template/src/templates/rails-app/workspace/store/public/500.html +114 -0
- package/template/src/templates/rails-app/workspace/store/public/icon.png +0 -0
- package/template/src/templates/rails-app/workspace/store/public/icon.svg +3 -0
- package/template/src/templates/rails-app/workspace/store/public/robots.txt +1 -0
- package/template/src/templates/rails-app/workspace/store/script/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/storage/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/test/controllers/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/test/helpers/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/test/integration/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/test/test_helper.rb +15 -0
- package/template/src/templates/rails-app/workspace/store/tmp/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/tmp/pids/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/tmp/storage/.keep +0 -0
- package/template/src/templates/rails-app/workspace/store/vendor/javascripts/.keep +0 -0
- package/template/tsconfig.json +16 -0
- package/template/uno.config.ts +10 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vite-project",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"test": "node --disable-warning=ExperimentalWarning ./scripts/test.js",
|
|
9
|
+
"test:watch": "node --disable-warning=ExperimentalWarning --watch --watch-path=./workspace ./scripts/test.js",
|
|
10
|
+
"postinstall": "chmod +x bin/* && node --disable-warning=ExperimentalWarning ./scripts/wait-for-wasm.js"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@electric-sql/pglite": "^0.3.1",
|
|
14
|
+
"@rails-tutorial/wasm": "^8.0.2-rc.1",
|
|
15
|
+
"@ruby/wasm-wasi": "^2.7.1",
|
|
16
|
+
"express": "^5.1.0",
|
|
17
|
+
"multer": "^2.0.1",
|
|
18
|
+
"set-cookie-parser": "^2.7.1"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"vite": "^5.2.0"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
|
|
5
|
+
const railsRootDir = new URL("../workspace/store", import.meta.url).pathname;
|
|
6
|
+
const railsPath = join(railsRootDir, 'bin/rails');
|
|
7
|
+
|
|
8
|
+
const waitBinRails = async () => {
|
|
9
|
+
const timeoutMs = 30000;
|
|
10
|
+
const startTime = Date.now();
|
|
11
|
+
|
|
12
|
+
for (; ;) {
|
|
13
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
14
|
+
console.error('Timeout waiting for rails script');
|
|
15
|
+
throw 'Timed out to wait for bin/rails';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const found = await new Promise((resolve) => {
|
|
19
|
+
fs.access(railsPath, fs.constants.X_OK, (err) => {
|
|
20
|
+
if (err) {
|
|
21
|
+
resolve(false)
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
resolve(true)
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (found) return;
|
|
30
|
+
|
|
31
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
await waitBinRails();
|
|
36
|
+
|
|
37
|
+
const railsProcess = spawn("rails", process.argv.slice(2), {
|
|
38
|
+
stdio: 'inherit',
|
|
39
|
+
cwd: railsRootDir,
|
|
40
|
+
env: {
|
|
41
|
+
PATH: "/home/tutorial/bin:/bin:/usr/bin:/usr/local/bin"
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
railsProcess.on('error', (err) => {
|
|
46
|
+
console.error('Failed to start rails script:', err);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
railsProcess.on('close', (code) => {
|
|
51
|
+
process.exit(code);
|
|
52
|
+
});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
|
|
6
|
+
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
7
|
+
const TARGET_DIR = path.join(__dirname, '../node_modules/@ruby/wasm-wasi/dist');
|
|
8
|
+
const TARGET_FILE = path.join(TARGET_DIR, 'ruby.wasm');
|
|
9
|
+
|
|
10
|
+
const WASM_FILE = path.join(__dirname, '../ruby.wasm');
|
|
11
|
+
const LOG_FILE = path.join(__dirname, '../ruby.wasm.log.txt');
|
|
12
|
+
|
|
13
|
+
async function checkIfFileExists(filePath) {
|
|
14
|
+
try {
|
|
15
|
+
await fs.access(filePath);
|
|
16
|
+
return true;
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.log(`✗ Failed to access ${filePath}: ${error.message}`);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function moveFile(src, dest) {
|
|
24
|
+
try {
|
|
25
|
+
await fs.mkdir(path.dirname(dest), { recursive: true });
|
|
26
|
+
await fs.rename(src, dest);
|
|
27
|
+
console.log(`✓ Moved ${src} to ${dest}`);
|
|
28
|
+
|
|
29
|
+
return true;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error(`✗ Failed to move ${src} to ${dest}:`, error.message);
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let lastStatus;
|
|
37
|
+
|
|
38
|
+
async function checkWasmLoaded() {
|
|
39
|
+
if (await checkIfFileExists(TARGET_FILE)) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!(await checkIfFileExists(LOG_FILE))) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
lastStatus = await fs.readFile(LOG_FILE, { encoding: 'utf8' });
|
|
48
|
+
|
|
49
|
+
console.log(`[ruby.wasm] ${lastStatus}`);
|
|
50
|
+
|
|
51
|
+
if (lastStatus === 'status: done') {
|
|
52
|
+
await moveFile(WASM_FILE, TARGET_FILE);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function main() {
|
|
60
|
+
await new Promise((resolve, reject) => {
|
|
61
|
+
const startTime = Date.now();
|
|
62
|
+
const STATUS_TIMEOUT = 30000; // 30 seconds to start
|
|
63
|
+
const OVERALL_TIMEOUT = 300000; // 5 minutes total
|
|
64
|
+
|
|
65
|
+
async function checkAndScheduleNext() {
|
|
66
|
+
try {
|
|
67
|
+
if (await checkWasmLoaded()) {
|
|
68
|
+
console.log(`[ruby.wasm] ready`);
|
|
69
|
+
resolve();
|
|
70
|
+
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const elapsed = Date.now() - startTime;
|
|
75
|
+
|
|
76
|
+
// check if we've exceeded the status timeout and still no status
|
|
77
|
+
if (elapsed > STATUS_TIMEOUT && !lastStatus) {
|
|
78
|
+
reject(new Error('Timeout waiting for wasm download to start'));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// check if we've exceeded the overall timeout
|
|
83
|
+
if (elapsed > OVERALL_TIMEOUT) {
|
|
84
|
+
reject(new Error('Timeout waiting for wasm to load'));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// schedule next check
|
|
89
|
+
setTimeout(checkAndScheduleNext, 1000);
|
|
90
|
+
} catch (error) {
|
|
91
|
+
reject(error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// start the checking process
|
|
96
|
+
checkAndScheduleNext();
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
main().catch((error) => {
|
|
101
|
+
console.error('Preinstall script failed:', error);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby-3.3.6
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
|
|
4
|
+
gem "rails", "~> 8.0.2"
|
|
5
|
+
# The modern asset pipeline for Rails [https://github.com/rails/propshaft]
|
|
6
|
+
gem "propshaft"
|
|
7
|
+
# Use sqlite3 as the database for Active Record
|
|
8
|
+
gem "sqlite3", ">= 2.1"
|
|
9
|
+
# Use the Puma web server [https://github.com/puma/puma]
|
|
10
|
+
gem "puma", ">= 5.0"
|
|
11
|
+
# Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
|
|
12
|
+
gem "importmap-rails"
|
|
13
|
+
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
|
|
14
|
+
gem "turbo-rails"
|
|
15
|
+
# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
|
|
16
|
+
gem "stimulus-rails"
|
|
17
|
+
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
|
|
18
|
+
gem "jbuilder"
|
|
19
|
+
|
|
20
|
+
# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
|
|
21
|
+
gem "bcrypt", "~> 3.1.7"
|
|
22
|
+
|
|
23
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
|
24
|
+
gem "tzinfo-data", platforms: %i[ windows jruby ]
|
|
25
|
+
|
|
26
|
+
# Use the database-backed adapters for Rails.cache, Active Job, and Action Cable
|
|
27
|
+
gem "solid_cache"
|
|
28
|
+
gem "solid_queue"
|
|
29
|
+
gem "solid_cable"
|
|
30
|
+
|
|
31
|
+
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
|
|
32
|
+
# gem "image_processing", "~> 1.2"
|
|
33
|
+
|
|
34
|
+
group :development, :test do
|
|
35
|
+
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
|
36
|
+
gem "debug", platforms: %i[ mri windows ], require: "debug/prelude"
|
|
37
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# README
|
|
2
|
+
|
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
|
4
|
+
application up and running.
|
|
5
|
+
|
|
6
|
+
Things you may want to cover:
|
|
7
|
+
|
|
8
|
+
* Ruby version
|
|
9
|
+
|
|
10
|
+
* System dependencies
|
|
11
|
+
|
|
12
|
+
* Configuration
|
|
13
|
+
|
|
14
|
+
* Database creation
|
|
15
|
+
|
|
16
|
+
* Database initialization
|
|
17
|
+
|
|
18
|
+
* How to run the test suite
|
|
19
|
+
|
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
|
21
|
+
|
|
22
|
+
* Deployment instructions
|
|
23
|
+
|
|
24
|
+
* ...
|
|
File without changes
|
package/template/src/templates/rails-app/workspace/store/app/assets/stylesheets/application.css
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This is a manifest file that'll be compiled into application.css.
|
|
3
|
+
*
|
|
4
|
+
* With Propshaft, assets are served efficiently without preprocessing steps. You can still include
|
|
5
|
+
* application-wide styles in this file, but keep in mind that CSS precedence will follow the standard
|
|
6
|
+
* cascading order, meaning styles declared later in the document or manifest will override earlier ones,
|
|
7
|
+
* depending on specificity.
|
|
8
|
+
*
|
|
9
|
+
* Consider organizing styles into separate files for maintainability.
|
|
10
|
+
*/
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Import and register all your controllers from the importmap via controllers/**/*_controller
|
|
2
|
+
import { application } from "controllers/application"
|
|
3
|
+
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
|
4
|
+
eagerLoadControllersFrom("controllers", application)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
class ApplicationJob < ActiveJob::Base
|
|
2
|
+
# Automatically retry jobs that encountered a deadlock
|
|
3
|
+
# retry_on ActiveRecord::Deadlocked
|
|
4
|
+
|
|
5
|
+
# Most jobs are safe to ignore if the underlying records are no longer available
|
|
6
|
+
# discard_on ActiveJob::DeserializationError
|
|
7
|
+
end
|
|
File without changes
|
package/template/src/templates/rails-app/workspace/store/app/views/layouts/application.html.erb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title><%= content_for(:title) || "Store" %></title>
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
7
|
+
<meta name="mobile-web-app-capable" content="yes">
|
|
8
|
+
<%= csrf_meta_tags %>
|
|
9
|
+
<%= csp_meta_tag %>
|
|
10
|
+
|
|
11
|
+
<%= yield :head %>
|
|
12
|
+
|
|
13
|
+
<%# Enable PWA manifest for installable apps (make sure to enable in config/routes.rb too!) %>
|
|
14
|
+
<%#= tag.link rel: "manifest", href: pwa_manifest_path(format: :json) %>
|
|
15
|
+
|
|
16
|
+
<link rel="icon" href="/icon.png" type="image/png">
|
|
17
|
+
<link rel="icon" href="/icon.svg" type="image/svg+xml">
|
|
18
|
+
<link rel="apple-touch-icon" href="/icon.png">
|
|
19
|
+
|
|
20
|
+
<%# Includes all stylesheet files in app/assets/stylesheets %>
|
|
21
|
+
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
|
|
22
|
+
<%= javascript_importmap_tags %>
|
|
23
|
+
</head>
|
|
24
|
+
|
|
25
|
+
<body>
|
|
26
|
+
<%= yield %>
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= yield %>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Store",
|
|
3
|
+
"icons": [
|
|
4
|
+
{
|
|
5
|
+
"src": "/icon.png",
|
|
6
|
+
"type": "image/png",
|
|
7
|
+
"sizes": "512x512"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"src": "/icon.png",
|
|
11
|
+
"type": "image/png",
|
|
12
|
+
"sizes": "512x512",
|
|
13
|
+
"purpose": "maskable"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"start_url": "/",
|
|
17
|
+
"display": "standalone",
|
|
18
|
+
"scope": "/",
|
|
19
|
+
"description": "Store.",
|
|
20
|
+
"theme_color": "red",
|
|
21
|
+
"background_color": "red"
|
|
22
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Add a service worker for processing Web Push notifications:
|
|
2
|
+
//
|
|
3
|
+
// self.addEventListener("push", async (event) => {
|
|
4
|
+
// const { title, options } = await event.data.json()
|
|
5
|
+
// event.waitUntil(self.registration.showNotification(title, options))
|
|
6
|
+
// })
|
|
7
|
+
//
|
|
8
|
+
// self.addEventListener("notificationclick", function(event) {
|
|
9
|
+
// event.notification.close()
|
|
10
|
+
// event.waitUntil(
|
|
11
|
+
// clients.matchAll({ type: "window" }).then((clientList) => {
|
|
12
|
+
// for (let i = 0; i < clientList.length; i++) {
|
|
13
|
+
// let client = clientList[i]
|
|
14
|
+
// let clientPath = (new URL(client.url)).pathname
|
|
15
|
+
//
|
|
16
|
+
// if (clientPath == event.notification.data.path && "focus" in client) {
|
|
17
|
+
// return client.focus()
|
|
18
|
+
// }
|
|
19
|
+
// }
|
|
20
|
+
//
|
|
21
|
+
// if (clients.openWindow) {
|
|
22
|
+
// return clients.openWindow(event.notification.data.path)
|
|
23
|
+
// }
|
|
24
|
+
// })
|
|
25
|
+
// )
|
|
26
|
+
// })
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative "boot"
|
|
2
|
+
|
|
3
|
+
require "rails/all"
|
|
4
|
+
|
|
5
|
+
# Require the gems listed in Gemfile, including any gems
|
|
6
|
+
# you've limited to :test, :development, or :production.
|
|
7
|
+
Bundler.require(*Rails.groups)
|
|
8
|
+
|
|
9
|
+
module Store
|
|
10
|
+
class Application < Rails::Application
|
|
11
|
+
# Initialize configuration defaults for originally generated Rails version.
|
|
12
|
+
config.load_defaults 8.0
|
|
13
|
+
|
|
14
|
+
# Please, add to the `ignore` list any other `lib` subdirectories that do
|
|
15
|
+
# not contain `.rb` files, or that should not be reloaded or eager loaded.
|
|
16
|
+
# Common ones are `templates`, `generators`, or `middleware`, for example.
|
|
17
|
+
config.autoload_lib(ignore: %w[assets tasks])
|
|
18
|
+
|
|
19
|
+
# Configuration for the application, engines, and railties goes here.
|
|
20
|
+
#
|
|
21
|
+
# These settings can be overridden in specific environments using the files
|
|
22
|
+
# in config/environments, which are processed later.
|
|
23
|
+
#
|
|
24
|
+
# config.time_zone = "Central Time (US & Canada)"
|
|
25
|
+
# config.eager_load_paths << Rails.root.join("extras")
|
|
26
|
+
|
|
27
|
+
# Don't generate system test files.
|
|
28
|
+
config.generators.system_tests = nil
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
+opdmbbIhKjrVxzwTcULNjyc72D92lPMBrS3ITE0htdpvlwr4KZMIzfSPrPhcmpuHtKF3xNkhEW3/MUuQJb+BQ0++W/wmTzP/CJHaiYkidd0a6arzdXLqxKfkTkc3ew6OUCoNUAyAoVJ+ASr/k655xTm77rvSydr0f3syWdXpa/AOzopeSOVuWxr4k0QnSbeOd1/BGVY5p/FzpakfKGlc5TVXTpkvkWqC3z5w0pNJnfRQAxSp0i/0xIk0y9OxJRU3E4Yyu20+O5NQSW4O+kgI6LJEHu1LCrZCXzVO6kz8BktmGajU72pXAaM56oKMvaOWUf+XxJdKC2+6pLMlIw2apkeXA3Gxc0Afl+hSrx62JeqhExbSXccWk9KVgvTHDBnaCgJu/VMCukQELyMqb/Tw9TPjnyMr2WV8v66QPs2gQLg+kGMOZlW6R6ubu0i2BBV+rxQkn1vPOrsgitbK9B6PtPWEgmTdBiu3QcVDFUIomQLTrGqPkkgxReM--H5GpUcrVpHme6TEY--KUIefLaLDjHc8MAEP0yeng==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
default: &default
|
|
2
|
+
adapter: pglite
|
|
3
|
+
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
|
|
4
|
+
timeout: 5000
|
|
5
|
+
|
|
6
|
+
development:
|
|
7
|
+
<<: *default
|
|
8
|
+
database: store_development
|
|
9
|
+
|
|
10
|
+
# Warning: The database defined as "test" will be erased and
|
|
11
|
+
# re-generated from your development database when you run "rake".
|
|
12
|
+
# Do not set this db to the same as development or production.
|
|
13
|
+
test:
|
|
14
|
+
<<: *default
|
|
15
|
+
database: store_test
|
|
16
|
+
|
|
17
|
+
production:
|
|
18
|
+
primary:
|
|
19
|
+
<<: *default
|
|
20
|
+
# database: path/to/persistent/storage/production.sqlite3
|
|
21
|
+
cache:
|
|
22
|
+
<<: *default
|
|
23
|
+
# database: path/to/persistent/storage/production_cache.sqlite3
|
|
24
|
+
migrations_paths: db/cache_migrate
|
|
25
|
+
queue:
|
|
26
|
+
<<: *default
|
|
27
|
+
# database: path/to/persistent/storage/production_queue.sqlite3
|
|
28
|
+
migrations_paths: db/queue_migrate
|
|
29
|
+
cable:
|
|
30
|
+
<<: *default
|
|
31
|
+
# database: path/to/persistent/storage/production_cable.sqlite3
|
|
32
|
+
migrations_paths: db/cable_migrate
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require "active_support/core_ext/integer/time"
|
|
2
|
+
|
|
3
|
+
Rails.application.configure do
|
|
4
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
|
5
|
+
|
|
6
|
+
# Make code changes take effect immediately without server restart.
|
|
7
|
+
config.enable_reloading = true
|
|
8
|
+
|
|
9
|
+
# Do not eager load code on boot.
|
|
10
|
+
config.eager_load = false
|
|
11
|
+
|
|
12
|
+
# Show full error reports.
|
|
13
|
+
config.consider_all_requests_local = true
|
|
14
|
+
|
|
15
|
+
# Enable server timing.
|
|
16
|
+
config.server_timing = true
|
|
17
|
+
|
|
18
|
+
# Enable/disable Action Controller caching. By default Action Controller caching is disabled.
|
|
19
|
+
# Run rails dev:cache to toggle Action Controller caching.
|
|
20
|
+
if Rails.root.join("tmp/caching-dev.txt").exist?
|
|
21
|
+
config.action_controller.perform_caching = true
|
|
22
|
+
config.action_controller.enable_fragment_cache_logging = true
|
|
23
|
+
config.public_file_server.headers = { "cache-control" => "public, max-age=#{2.days.to_i}" }
|
|
24
|
+
else
|
|
25
|
+
config.action_controller.perform_caching = false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Change to :null_store to avoid any caching.
|
|
29
|
+
config.cache_store = :memory_store
|
|
30
|
+
|
|
31
|
+
# Store uploaded files on the local file system (see config/storage.yml for options).
|
|
32
|
+
config.active_storage.service = :local
|
|
33
|
+
|
|
34
|
+
# Don't care if the mailer can't send.
|
|
35
|
+
config.action_mailer.raise_delivery_errors = false
|
|
36
|
+
|
|
37
|
+
# Make template changes take effect immediately.
|
|
38
|
+
config.action_mailer.perform_caching = false
|
|
39
|
+
|
|
40
|
+
# Set localhost to be used by links generated in mailer templates.
|
|
41
|
+
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
|
|
42
|
+
|
|
43
|
+
# Print deprecation notices to the Rails logger.
|
|
44
|
+
config.active_support.deprecation = :log
|
|
45
|
+
|
|
46
|
+
# Raise an error on page load if there are pending migrations.
|
|
47
|
+
config.active_record.migration_error = :page_load
|
|
48
|
+
|
|
49
|
+
# Highlight code that triggered database queries in logs.
|
|
50
|
+
config.active_record.verbose_query_logs = true
|
|
51
|
+
|
|
52
|
+
# Append comments with runtime information tags to SQL queries in logs.
|
|
53
|
+
config.active_record.query_log_tags_enabled = true
|
|
54
|
+
|
|
55
|
+
# Highlight code that enqueued background job in logs.
|
|
56
|
+
config.active_job.verbose_enqueue_logs = true
|
|
57
|
+
|
|
58
|
+
# Raises error for missing translations.
|
|
59
|
+
# config.i18n.raise_on_missing_translations = true
|
|
60
|
+
|
|
61
|
+
# Annotate rendered view with file names.
|
|
62
|
+
config.action_view.annotate_rendered_view_with_filenames = true
|
|
63
|
+
|
|
64
|
+
# Uncomment if you wish to allow Action Cable access from any origin.
|
|
65
|
+
# config.action_cable.disable_request_forgery_protection = true
|
|
66
|
+
|
|
67
|
+
# Raise error when a before_action's only/except options reference missing actions.
|
|
68
|
+
config.action_controller.raise_on_missing_callback_actions = true
|
|
69
|
+
end
|