snowpack 1.0.0.alpha2
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +3 -0
- data/.tool-versions +1 -0
- data/.travis.yml +16 -0
- data/Brewfile +2 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile +13 -0
- data/LICENSE +21 -0
- data/README.md +116 -0
- data/Rakefile +6 -0
- data/bin/bootstrap +25 -0
- data/exe/snowpack +7 -0
- data/lib/snowpack/application.rb +98 -0
- data/lib/snowpack/application_cli.rb +39 -0
- data/lib/snowpack/cli/application/cli.rb +32 -0
- data/lib/snowpack/cli/application/command.rb +53 -0
- data/lib/snowpack/cli/application/commands/assets/clobber.rb +31 -0
- data/lib/snowpack/cli/application/commands/assets/compile.rb +32 -0
- data/lib/snowpack/cli/application/commands/console.rb +55 -0
- data/lib/snowpack/cli/application/commands/db/create.rb +33 -0
- data/lib/snowpack/cli/application/commands/db/create_migration.rb +38 -0
- data/lib/snowpack/cli/application/commands/db/drop.rb +33 -0
- data/lib/snowpack/cli/application/commands/db/migrate.rb +47 -0
- data/lib/snowpack/cli/application/commands/db/reset.rb +28 -0
- data/lib/snowpack/cli/application/commands/db/rollback.rb +54 -0
- data/lib/snowpack/cli/application/commands/db/sample_data.rb +41 -0
- data/lib/snowpack/cli/application/commands/db/seed.rb +41 -0
- data/lib/snowpack/cli/application/commands/db/structure/dump.rb +38 -0
- data/lib/snowpack/cli/application/commands/db/utils/database.rb +76 -0
- data/lib/snowpack/cli/application/commands/db/utils/database_config.rb +49 -0
- data/lib/snowpack/cli/application/commands/db/version.rb +37 -0
- data/lib/snowpack/cli/application/commands/generate/slice.rb +32 -0
- data/lib/snowpack/cli/application/commands/routes/update.rb +35 -0
- data/lib/snowpack/cli/application/commands.rb +27 -0
- data/lib/snowpack/cli/command.rb +48 -0
- data/lib/snowpack/cli/standalone/cli.rb +14 -0
- data/lib/snowpack/cli/standalone/commands/new.rb +33 -0
- data/lib/snowpack/cli/standalone/commands.rb +13 -0
- data/lib/snowpack/components/formalist.rb +27 -0
- data/lib/snowpack/components/persistence.rb +56 -0
- data/lib/snowpack/components.rb +5 -0
- data/lib/snowpack/console/context.rb +32 -0
- data/lib/snowpack/console/plugins/relation_readers.rb +17 -0
- data/lib/snowpack/console/plugins/slice_readers.rb +33 -0
- data/lib/snowpack/generator.rb +57 -0
- data/lib/snowpack/generators/application/generator.rb +67 -0
- data/lib/snowpack/generators/application/templates/.env-example.tt +10 -0
- data/lib/snowpack/generators/application/templates/.env.test-example.tt +1 -0
- data/lib/snowpack/generators/application/templates/.gitignore +20 -0
- data/lib/snowpack/generators/application/templates/.rspec +2 -0
- data/lib/snowpack/generators/application/templates/Brewfile +4 -0
- data/lib/snowpack/generators/application/templates/Gemfile.tt +46 -0
- data/lib/snowpack/generators/application/templates/Guardfile +7 -0
- data/lib/snowpack/generators/application/templates/Procfile.dev +3 -0
- data/lib/snowpack/generators/application/templates/Procfile.support +1 -0
- data/lib/snowpack/generators/application/templates/README.md.tt +45 -0
- data/lib/snowpack/generators/application/templates/Rakefile +5 -0
- data/lib/snowpack/generators/application/templates/bin/run +7 -0
- data/lib/snowpack/generators/application/templates/config/application.rb.tt +19 -0
- data/lib/snowpack/generators/application/templates/config/puma.rb.tt +14 -0
- data/lib/snowpack/generators/application/templates/config/routes.rb.tt +15 -0
- data/lib/snowpack/generators/application/templates/config.ru +5 -0
- data/lib/snowpack/generators/application/templates/db/migrate/.keep +0 -0
- data/lib/snowpack/generators/application/templates/db/sample_data.rb +1 -0
- data/lib/snowpack/generators/application/templates/db/seed.rb +1 -0
- data/lib/snowpack/generators/application/templates/lib/__application_path__/operation.rb.tt +12 -0
- data/lib/snowpack/generators/application/templates/lib/__application_path__/persistence/relations/.keep +0 -0
- data/lib/snowpack/generators/application/templates/lib/__application_path__/types.rb.tt +11 -0
- data/lib/snowpack/generators/application/templates/lib/__application_path__/web/action.rb.tt +56 -0
- data/lib/snowpack/generators/application/templates/lib/__application_path__/web/view/context.rb.tt +31 -0
- data/lib/snowpack/generators/application/templates/lib/hanami/action/csrf_protection.rb +225 -0
- data/lib/snowpack/generators/application/templates/log/.keep +0 -0
- data/lib/snowpack/generators/application/templates/package.json.tt +25 -0
- data/lib/snowpack/generators/application/templates/public/.keep +0 -0
- data/lib/snowpack/generators/application/templates/script/bootstrap +32 -0
- data/lib/snowpack/generators/application/templates/script/console +26 -0
- data/lib/snowpack/generators/application/templates/script/server +13 -0
- data/lib/snowpack/generators/application/templates/script/setup +27 -0
- data/lib/snowpack/generators/application/templates/script/support +9 -0
- data/lib/snowpack/generators/application/templates/script/test +19 -0
- data/lib/snowpack/generators/application/templates/script/update +13 -0
- data/lib/snowpack/generators/application/templates/spec/spec_helper.rb +13 -0
- data/lib/snowpack/generators/application/templates/spec/suite/.keep +0 -0
- data/lib/snowpack/generators/application/templates/spec/support/suite.rb +9 -0
- data/lib/snowpack/generators/application/templates/system/__application_path__/import.rb.tt +5 -0
- data/lib/snowpack/generators/application/templates/system/boot/assets.rb.tt +17 -0
- data/lib/snowpack/generators/application/templates/system/boot/logger.rb.tt +10 -0
- data/lib/snowpack/generators/application/templates/system/boot/monitor.rb.tt +9 -0
- data/lib/snowpack/generators/application/templates/system/boot/persistence.rb.tt +9 -0
- data/lib/snowpack/generators/application/templates/system/boot/settings.rb.tt +18 -0
- data/lib/snowpack/generators/application/templates/system/boot/web.rb.tt +9 -0
- data/lib/snowpack/generators/slice/generator.rb +62 -0
- data/lib/snowpack/generators/slice/templates/lib/__slice_path__/.keep +0 -0
- data/lib/snowpack/generators/slice/templates/lib/__slice_path__/web/action.rb.tt +10 -0
- data/lib/snowpack/generators/slice/templates/lib/__slice_path__/web/actions/.keep +0 -0
- data/lib/snowpack/generators/slice/templates/lib/__slice_path__/web/view.rb.tt +17 -0
- data/lib/snowpack/generators/slice/templates/lib/__slice_path__/web/views/.keep +0 -0
- data/lib/snowpack/generators/slice/templates/system/__slice_path__/import.rb.tt +9 -0
- data/lib/snowpack/generators/slice/templates/system/__slice_path__/slice.rb.tt +10 -0
- data/lib/snowpack/instrumentation/appsignal/appsignal_ext.rb +13 -0
- data/lib/snowpack/instrumentation/appsignal/que.rb +70 -0
- data/lib/snowpack/instrumentation/appsignal/rack.rb +84 -0
- data/lib/snowpack/roda/web.rb +47 -0
- data/lib/snowpack/slice.rb +85 -0
- data/lib/snowpack/test/suite.rb +164 -0
- data/lib/snowpack/test/tasks.rake +40 -0
- data/lib/snowpack/test_tasks.rb +4 -0
- data/lib/snowpack/types.rb +9 -0
- data/lib/snowpack/version.rb +5 -0
- data/lib/snowpack/view/part_builder.rb +45 -0
- data/lib/snowpack/view/parts/pager.rb +107 -0
- data/lib/snowpack/view/parts/paginated.rb +22 -0
- data/lib/snowpack/web/application.rb +38 -0
- data/lib/snowpack/web/assets.rb +56 -0
- data/lib/snowpack/web/endpoint_resolver.rb +66 -0
- data/lib/snowpack/web/form.rb +38 -0
- data/lib/snowpack/web/plugin.rb +44 -0
- data/lib/snowpack/web/rack_logger.rb +73 -0
- data/lib/snowpack/web/router.rb +58 -0
- data/lib/snowpack/web.rb +20 -0
- data/lib/snowpack.rb +27 -0
- data/snowpack.gemspec +34 -0
- metadata +327 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "structure/dump"
|
|
5
|
+
require_relative "utils/database"
|
|
6
|
+
|
|
7
|
+
module Snowpack
|
|
8
|
+
module CLI
|
|
9
|
+
module Application
|
|
10
|
+
module Commands
|
|
11
|
+
module DB
|
|
12
|
+
class CreateMigration < Command
|
|
13
|
+
desc "Create new migration file"
|
|
14
|
+
|
|
15
|
+
argument :name, desc: "Migration file name"
|
|
16
|
+
|
|
17
|
+
def call(name:, **)
|
|
18
|
+
migrator = database.migrator
|
|
19
|
+
version = migrator.generate_version
|
|
20
|
+
|
|
21
|
+
measure "migration #{version}_#{name} created" do
|
|
22
|
+
migrator.create_file(name, version)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def database
|
|
29
|
+
@database ||= Utils::Database.for_application(application)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
register "db create_migration", DB::CreateMigration
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "utils/database_config"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Application
|
|
9
|
+
module Commands
|
|
10
|
+
module DB
|
|
11
|
+
class Drop < Command
|
|
12
|
+
desc "Delete database"
|
|
13
|
+
|
|
14
|
+
def call(**)
|
|
15
|
+
db_name = database_config.db_name
|
|
16
|
+
|
|
17
|
+
system(database_config.cli_env_vars, "dropdb #{Shellwords.escape(db_name)}")
|
|
18
|
+
out.puts "=> database #{db_name} dropped" if $?.success?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def database_config
|
|
24
|
+
@database_config ||= Utils::DatabaseConfig.for_application(application)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
register "db drop", Commands::DB::Drop
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "structure/dump"
|
|
5
|
+
require_relative "utils/database"
|
|
6
|
+
|
|
7
|
+
module Snowpack
|
|
8
|
+
module CLI
|
|
9
|
+
module Application
|
|
10
|
+
module Commands
|
|
11
|
+
module DB
|
|
12
|
+
class Migrate < Command
|
|
13
|
+
desc "Migrates database"
|
|
14
|
+
|
|
15
|
+
option :target, desc: "Target migration number", aliases: ["-t"]
|
|
16
|
+
|
|
17
|
+
def call(target: nil, **)
|
|
18
|
+
measure "database #{database.name} migrated" do
|
|
19
|
+
if target
|
|
20
|
+
run_migrations(target: target)
|
|
21
|
+
else
|
|
22
|
+
run_migrations
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
run_command Structure::Dump
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def run_migrations(**options )
|
|
32
|
+
ROM::SQL.with_gateway(database.gateway) do
|
|
33
|
+
database.migrator.run(options)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def database
|
|
38
|
+
@database ||= Utils::Database.for_application(application)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
register "db migrate", DB::Migrate
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "drop"
|
|
5
|
+
require_relative "create"
|
|
6
|
+
require_relative "migrate"
|
|
7
|
+
|
|
8
|
+
module Snowpack
|
|
9
|
+
module CLI
|
|
10
|
+
module Application
|
|
11
|
+
module Commands
|
|
12
|
+
module DB
|
|
13
|
+
class Reset < Command
|
|
14
|
+
desc "Drop, create, and migrate database"
|
|
15
|
+
|
|
16
|
+
def call(**)
|
|
17
|
+
run_command Drop
|
|
18
|
+
run_command Create
|
|
19
|
+
run_command Migrate
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
register "db reset", Commands::DB::Reset
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "structure/dump"
|
|
5
|
+
require_relative "utils/database"
|
|
6
|
+
|
|
7
|
+
module Snowpack
|
|
8
|
+
module CLI
|
|
9
|
+
module Application
|
|
10
|
+
module Commands
|
|
11
|
+
module DB
|
|
12
|
+
class Rollback < Command
|
|
13
|
+
desc "Rollback database to a previous migration"
|
|
14
|
+
|
|
15
|
+
option :target, desc: "Target migration number", aliases: ["-t"]
|
|
16
|
+
|
|
17
|
+
def call(target: nil, **)
|
|
18
|
+
migration_code, migration_name = find_migration(target)
|
|
19
|
+
|
|
20
|
+
measure "database #{database.name} rolled back to #{migration_name}" do
|
|
21
|
+
database.gateway.run_migrations(target: Integer(migration_code))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
run_command Structure::Dump
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def database
|
|
30
|
+
@database ||= Utils::Database.for_application(application)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def find_migration(code)
|
|
34
|
+
migration = database.applied_migrations.yield_self { |migrations|
|
|
35
|
+
if code
|
|
36
|
+
migrations.detect { |m| m.split("_").first == code }
|
|
37
|
+
else
|
|
38
|
+
migrations.last
|
|
39
|
+
end
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
migration_code = code || migration.split("_").first
|
|
43
|
+
migration_name = File.basename(migration, ".*")
|
|
44
|
+
|
|
45
|
+
[migration_code, migration_name]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
register "db rollback", Commands::DB::Rollback
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "structure/dump"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Application
|
|
9
|
+
module Commands
|
|
10
|
+
module DB
|
|
11
|
+
class SampleData < Command
|
|
12
|
+
desc "Load sample data"
|
|
13
|
+
|
|
14
|
+
def call(**)
|
|
15
|
+
if has_file?
|
|
16
|
+
measure "Sample data loaded" do
|
|
17
|
+
application.boot!
|
|
18
|
+
load file_path
|
|
19
|
+
end
|
|
20
|
+
else
|
|
21
|
+
out.puts "=> no sample data available"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def file_path
|
|
28
|
+
File.join(application.root, "db/sample_data.rb")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def has_file?
|
|
32
|
+
File.exist?(file_path)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
register "db sample_data", DB::SampleData
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require_relative "structure/dump"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Application
|
|
9
|
+
module Commands
|
|
10
|
+
module DB
|
|
11
|
+
class Seed < Command
|
|
12
|
+
desc "Load database seeds"
|
|
13
|
+
|
|
14
|
+
def call(**)
|
|
15
|
+
if has_file?
|
|
16
|
+
measure "Database seeds loaded" do
|
|
17
|
+
application.boot
|
|
18
|
+
load file_path
|
|
19
|
+
end
|
|
20
|
+
else
|
|
21
|
+
out.puts "=> no database seeds available"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def file_path
|
|
28
|
+
File.join(application.root, "db/seed.rb")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def has_file?
|
|
32
|
+
File.exist?(seeds_path)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
register "db seed", DB::Seed
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
|
|
5
|
+
module Snowpack
|
|
6
|
+
module CLI
|
|
7
|
+
module Application
|
|
8
|
+
module Commands
|
|
9
|
+
module DB
|
|
10
|
+
module Structure
|
|
11
|
+
class Dump < Command
|
|
12
|
+
desc "Dumps database structure to db/structure.sql file"
|
|
13
|
+
|
|
14
|
+
def call(*)
|
|
15
|
+
measure("#{database_config.db_name} structure dumped to db/structure.sql") do
|
|
16
|
+
cmd = "pg_dump --schema-only --no-owner #{Shellwords.escape(database_config.db_name)} > #{output_file}"
|
|
17
|
+
system(database_config.cli_env_vars, cmd)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def database_config
|
|
24
|
+
@database_config ||= Utils::DatabaseConfig.for_application(application)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def output_file
|
|
28
|
+
"#{application.root}/db/structure.sql"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
register "db structure dump", DB::Structure::Dump
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami/cli"
|
|
4
|
+
require "snowpack/cli/command"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Application
|
|
9
|
+
module Commands
|
|
10
|
+
module DB
|
|
11
|
+
module Utils
|
|
12
|
+
class Database
|
|
13
|
+
def self.for_application(application)
|
|
14
|
+
application.init :persistence
|
|
15
|
+
|
|
16
|
+
new(
|
|
17
|
+
config: application["persistence.config"],
|
|
18
|
+
root_path: application.root,
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
attr_reader :config
|
|
23
|
+
attr_reader :root_path
|
|
24
|
+
|
|
25
|
+
def initialize(config:, root_path:)
|
|
26
|
+
@config = config
|
|
27
|
+
@root_path = root_path
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def url
|
|
31
|
+
gateway.connection.url
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def name
|
|
35
|
+
url.split("/").last
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def applied_migrations
|
|
39
|
+
sequel_migrator.applied_migrations
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def gateway
|
|
43
|
+
config.gateways[:default]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def connection
|
|
47
|
+
gateway.connection
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def migrator
|
|
51
|
+
@migrator ||= ROM::SQL::Migration::Migrator.new(
|
|
52
|
+
connection,
|
|
53
|
+
path: File.join(root_path, "db/migrate"),
|
|
54
|
+
)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def applied_migrations
|
|
58
|
+
sequel_migrator.applied_migrations
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def sequel_migrator
|
|
64
|
+
Sequel::TimestampMigrator.new(migrator.connection, migrations_path, {})
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def migrations_path
|
|
68
|
+
File.join(application.root, "db/migrate")
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami/cli"
|
|
4
|
+
require "uri"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Application
|
|
9
|
+
module Commands
|
|
10
|
+
module DB
|
|
11
|
+
module Utils
|
|
12
|
+
class DatabaseConfig
|
|
13
|
+
def self.for_application(application)
|
|
14
|
+
new(application[:settings].database_url)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
attr_reader :url
|
|
18
|
+
|
|
19
|
+
def initialize(database_url)
|
|
20
|
+
@url = database_url
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def uri
|
|
24
|
+
@uri ||= URI.parse(url)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def hostname
|
|
28
|
+
uri.hostname
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def db_name
|
|
32
|
+
@db_name ||= uri.path.gsub(/^\//, '')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def cli_env_vars
|
|
36
|
+
@cli_env_vars ||= {}.tap do |vars|
|
|
37
|
+
vars["PGHOST"] = uri.host.to_s
|
|
38
|
+
vars["PGPORT"] = uri.port.to_s if uri.port
|
|
39
|
+
vars["PGUSER"] = uri.user.to_s if uri.user
|
|
40
|
+
vars["PGPASSWORD"] = uri.password.to_s if uri.password
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami/cli"
|
|
4
|
+
require "snowpack/cli/application/command"
|
|
5
|
+
require_relative "structure/dump"
|
|
6
|
+
require_relative "utils/database"
|
|
7
|
+
|
|
8
|
+
module Snowpack
|
|
9
|
+
module CLI
|
|
10
|
+
module Application
|
|
11
|
+
module Commands
|
|
12
|
+
module DB
|
|
13
|
+
class Version < Command
|
|
14
|
+
desc "Print schema version"
|
|
15
|
+
|
|
16
|
+
option :target, desc: "Target migration number", aliases: ["-t"]
|
|
17
|
+
|
|
18
|
+
def call(target: nil, **)
|
|
19
|
+
migration = database.applied_migrations.last
|
|
20
|
+
version = migration ? File.basename(migration, ".*") : "not available"
|
|
21
|
+
|
|
22
|
+
out.puts "=> current schema version is #{version}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def database
|
|
28
|
+
@database ||= Utils::Database.for_application(application)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
register "db version", DB::Version
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
require "snowpack/generators/slice/generator"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Application
|
|
9
|
+
module Commands
|
|
10
|
+
module Generate
|
|
11
|
+
class Slice < Command
|
|
12
|
+
desc "Generate slice"
|
|
13
|
+
|
|
14
|
+
argument :name, desc: "Name for the slice"
|
|
15
|
+
option :web, type: :boolean, default: true, desc: "Include web routing and views support in generated slice"
|
|
16
|
+
|
|
17
|
+
def call(name:, web:, **)
|
|
18
|
+
name ||= path
|
|
19
|
+
|
|
20
|
+
# TODO raise ArgumentError, "invalid name blah blah"
|
|
21
|
+
|
|
22
|
+
generator = Generators::Slice::Generator.new
|
|
23
|
+
generator.(application: application, slice_name: name, web: web)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
register "generate slice", Generate::Slice
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/application/command"
|
|
4
|
+
|
|
5
|
+
module Snowpack
|
|
6
|
+
module CLI
|
|
7
|
+
module Application
|
|
8
|
+
module Commands
|
|
9
|
+
module Routes
|
|
10
|
+
class Update < Command
|
|
11
|
+
desc "Update Roda routes.json"
|
|
12
|
+
|
|
13
|
+
def call(**)
|
|
14
|
+
measure "routes.json updated" do
|
|
15
|
+
`bundle exec roda-parse_routes #{route_files} -f #{routes_json_file}`
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def route_files
|
|
22
|
+
Dir["#{application.root}/apps/**/web/routes/**/*.rb"].join(" ")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def routes_json_file
|
|
26
|
+
"#{application.root}/config/routes.json"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
register "routes update", Routes::Update
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Snowpack
|
|
4
|
+
module CLI
|
|
5
|
+
module Application
|
|
6
|
+
module Commands
|
|
7
|
+
extend Hanami::CLI::Registry
|
|
8
|
+
|
|
9
|
+
require_relative "commands/assets/clobber"
|
|
10
|
+
require_relative "commands/assets/compile"
|
|
11
|
+
require_relative "commands/console"
|
|
12
|
+
require_relative "commands/generate/slice"
|
|
13
|
+
require_relative "commands/db/create"
|
|
14
|
+
require_relative "commands/db/create_migration"
|
|
15
|
+
require_relative "commands/db/drop"
|
|
16
|
+
require_relative "commands/db/migrate"
|
|
17
|
+
require_relative "commands/db/reset"
|
|
18
|
+
require_relative "commands/db/rollback"
|
|
19
|
+
require_relative "commands/db/sample_data"
|
|
20
|
+
require_relative "commands/db/seed"
|
|
21
|
+
require_relative "commands/db/structure/dump"
|
|
22
|
+
require_relative "commands/db/version"
|
|
23
|
+
require_relative "commands/routes/update"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dry/inflector"
|
|
4
|
+
require "hanami/cli/command"
|
|
5
|
+
require "hanami/utils/files"
|
|
6
|
+
|
|
7
|
+
module Snowpack
|
|
8
|
+
module CLI
|
|
9
|
+
class Command < Hanami::CLI::Command
|
|
10
|
+
attr_reader :out
|
|
11
|
+
attr_reader :inflector
|
|
12
|
+
attr_reader :files
|
|
13
|
+
|
|
14
|
+
# TODO: consider injecting `out, files` from level of Snowpack::CLI?
|
|
15
|
+
def initialize(
|
|
16
|
+
command_name:,
|
|
17
|
+
out: $stdout,
|
|
18
|
+
inflector: Dry::Inflector.new,
|
|
19
|
+
files: Hanami::Utils::Files
|
|
20
|
+
)
|
|
21
|
+
super(command_name: command_name)
|
|
22
|
+
|
|
23
|
+
@out = out
|
|
24
|
+
@inflector = inflector
|
|
25
|
+
@files = files
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def run_command(klass, *args)
|
|
31
|
+
klass.new(
|
|
32
|
+
command_name: klass.name,
|
|
33
|
+
application: application,
|
|
34
|
+
out: out,
|
|
35
|
+
files: files,
|
|
36
|
+
).call(*args)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def measure(desc, &block)
|
|
40
|
+
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
41
|
+
block.call
|
|
42
|
+
stop = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
43
|
+
|
|
44
|
+
out.puts "=> #{desc} in #{(stop - start).round(1)}s"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "snowpack/cli/command"
|
|
4
|
+
require "snowpack/generators/application/generator"
|
|
5
|
+
|
|
6
|
+
module Snowpack
|
|
7
|
+
module CLI
|
|
8
|
+
module Standalone
|
|
9
|
+
module Commands
|
|
10
|
+
class New < Command
|
|
11
|
+
argument :path, desc: "Path for new application"
|
|
12
|
+
option :name, desc: "Name for the application"
|
|
13
|
+
|
|
14
|
+
def call(path:, name: nil, **)
|
|
15
|
+
name ||= path
|
|
16
|
+
|
|
17
|
+
# TODO raise ArgumentError, "invalid name application"
|
|
18
|
+
|
|
19
|
+
out.puts "Generating into #{path}..."
|
|
20
|
+
|
|
21
|
+
generator = Generators::Application::Generator.new
|
|
22
|
+
generator.(path, name)
|
|
23
|
+
|
|
24
|
+
out.puts "Bootstrapping..."
|
|
25
|
+
system "#{path}/script/bootstrap"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
register "new", New
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|