webamm_to_rails 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +3 -0
- data/lib/webamm_to_rails/features/definitions.rb +19 -0
- data/lib/webamm_to_rails/features/devise_onlineable/definition.rb +44 -0
- data/lib/webamm_to_rails/features/devise_onlineable/definitions/connection/presenter.rb +29 -0
- data/lib/webamm_to_rails/features/devise_onlineable/definitions/connection/template.erb +17 -0
- data/lib/webamm_to_rails/features/devise_onlineable/templates/app/channels/online_channel.rb.erb +13 -0
- data/lib/webamm_to_rails/features/devise_onlineable/templates/app/javascript/channels/consumer.js.erb +6 -0
- data/lib/webamm_to_rails/features/devise_onlineable/templates/app/javascript/channels/index.js.erb +5 -0
- data/lib/webamm_to_rails/features/devise_onlineable/templates/app/javascript/channels/online_channel.js.erb +48 -0
- data/lib/webamm_to_rails/features/devise_onlineable/templates/app/models/concerns/devise_onlineable.rb.erb +39 -0
- data/lib/webamm_to_rails/rails_boilerplate/builder.rb +318 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/Dockerfile.erb +83 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/Procfile.dev.erb +3 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/README.md.erb +24 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/Rakefile.erb +6 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/assets/config/manifest.js.erb +2 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/assets/stylesheets/application.tailwind.css.erb +3 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/channels/application_cable/channel.rb.erb +4 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/channels/application_cable/connection.rb.erb +4 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/helpers/application_helper.rb.erb +2 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/javascript/application.js.erb +3 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/javascript/controllers/application.js.erb +9 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/javascript/controllers/hello_controller.js.erb +7 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/javascript/controllers/index.js.erb +8 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/jobs/application_job.rb.erb +7 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/mailers/application_mailer.rb.erb +4 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/models/application_record.rb.erb +3 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/views/layouts/application.html.erb +44 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/views/layouts/mailer.html.erb +13 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/views/layouts/mailer.text.erb +1 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/views/pwa/manifest.json.erb +22 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/app/views/pwa/service-worker.js.erb +26 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/brakeman.erb +7 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/bundle.erb +109 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/dev.erb +11 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/docker-entrypoint.erb +13 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/rails.erb +4 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/rake.erb +4 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/rubocop.erb +8 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/bin/setup.erb +40 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/application.rb.erb +42 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/boot.rb.erb +4 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/cable.yml.erb +11 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/credentials.yml.enc.erb +1 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/database.yml.erb +85 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/environment.rb.erb +5 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/environments/development.rb.erb +84 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/environments/production.rb.erb +102 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/environments/test.rb.erb +67 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/initializers/assets.rb.erb +12 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/initializers/content_security_policy.rb.erb +25 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/initializers/filter_parameter_logging.rb.erb +8 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/initializers/inflections.rb.erb +16 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/initializers/permissions_policy.rb.erb +13 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/locales/en.yml.erb +31 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/master.key.erb +1 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/puma.rb.erb +33 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config/storage.yml.erb +34 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/config.ru.erb +6 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/db/seeds.rb.erb +9 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/dockerignore.erb +48 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/gitattributes.erb +9 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/github/dependabot.yml.erb +0 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/github/workflows/ci.yml.erb +38 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/gitignore.erb +40 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/node-version.erb +1 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/404.html.erb +67 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/406-unsupported-browser.html.erb +66 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/422.html.erb +67 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/500.html.erb +66 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/icon.png.erb +0 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/icon.svg.erb +3 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/public/robots.txt.erb +1 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/rubocop.yml.erb +8 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/ruby-version.erb +1 -0
- data/lib/webamm_to_rails/rails_boilerplate/templates/tailwind.config.js.erb +8 -0
- data/lib/webamm_to_rails/sources/controllers/actions/create_definition/presenter.rb +50 -0
- data/lib/webamm_to_rails/sources/controllers/actions/create_definition/template.erb +9 -0
- data/lib/webamm_to_rails/sources/controllers/actions/definition.rb +66 -0
- data/lib/webamm_to_rails/sources/controllers/actions/destroy_definition/presenter.rb +52 -0
- data/lib/webamm_to_rails/sources/controllers/actions/destroy_definition/template.erb +6 -0
- data/lib/webamm_to_rails/sources/controllers/actions/edit_definition/presenter.rb +40 -0
- data/lib/webamm_to_rails/sources/controllers/actions/edit_definition/template.erb +3 -0
- data/lib/webamm_to_rails/sources/controllers/actions/index_definition/presenter.rb +40 -0
- data/lib/webamm_to_rails/sources/controllers/actions/index_definition/template.erb +3 -0
- data/lib/webamm_to_rails/sources/controllers/actions/new_definition/presenter.rb +40 -0
- data/lib/webamm_to_rails/sources/controllers/actions/new_definition/template.erb +3 -0
- data/lib/webamm_to_rails/sources/controllers/actions/show_definition/presenter.rb +40 -0
- data/lib/webamm_to_rails/sources/controllers/actions/show_definition/template.erb +3 -0
- data/lib/webamm_to_rails/sources/controllers/actions/strong_parameters_definition/presenter.rb +50 -0
- data/lib/webamm_to_rails/sources/controllers/actions/strong_parameters_definition/template.erb +3 -0
- data/lib/webamm_to_rails/sources/controllers/actions/update_definition/presenter.rb +54 -0
- data/lib/webamm_to_rails/sources/controllers/actions/update_definition/template.erb +9 -0
- data/lib/webamm_to_rails/sources/controllers/application_controller/authentication/devise_groups/presenter.rb +49 -0
- data/lib/webamm_to_rails/sources/controllers/application_controller/authentication/devise_groups_definition/presenter.rb +30 -0
- data/lib/webamm_to_rails/sources/controllers/application_controller/definition.rb +36 -0
- data/lib/webamm_to_rails/sources/controllers/application_controller/template.erb +5 -0
- data/lib/webamm_to_rails/sources/controllers/class_definition/presenter.rb +17 -0
- data/lib/webamm_to_rails/sources/controllers/definition.rb +44 -0
- data/lib/webamm_to_rails/sources/controllers/filters/definition.rb +32 -0
- data/lib/webamm_to_rails/sources/controllers/filters/devise_definition/presenter.rb +55 -0
- data/lib/webamm_to_rails/sources/controllers/template.erb +17 -0
- data/lib/webamm_to_rails/sources/gemfile/default_set.rb +27 -0
- data/lib/webamm_to_rails/sources/gemfile/definition.rb +31 -0
- data/lib/webamm_to_rails/sources/gemfile/gem.rb +8 -0
- data/lib/webamm_to_rails/sources/gemfile/gem_definition/presenter.rb +22 -0
- data/lib/webamm_to_rails/sources/gemfile/project_set.rb +21 -0
- data/lib/webamm_to_rails/sources/gemfile/sets/authentication.rb +34 -0
- data/lib/webamm_to_rails/sources/gemfile/template.erb +17 -0
- data/lib/webamm_to_rails/sources/helpers/definitions.rb +21 -0
- data/lib/webamm_to_rails/sources/helpers/devise/presenter.rb +27 -0
- data/lib/webamm_to_rails/sources/helpers/devise/qr_code_helper/presenter.rb +19 -0
- data/lib/webamm_to_rails/sources/helpers/devise/qr_code_helper/template.erb +22 -0
- data/lib/webamm_to_rails/sources/initializers/definitions.rb +26 -0
- data/lib/webamm_to_rails/sources/initializers/devise_definition/presenter.rb +27 -0
- data/lib/webamm_to_rails/sources/initializers/devise_definition/template.erb +397 -0
- data/lib/webamm_to_rails/sources/migrations/active_storage_definition/presenter.rb +29 -0
- data/lib/webamm_to_rails/sources/migrations/active_storage_definition/template.erb +57 -0
- data/lib/webamm_to_rails/sources/migrations/associations.rb +49 -0
- data/lib/webamm_to_rails/sources/migrations/class_definition/presenter.rb +17 -0
- data/lib/webamm_to_rails/sources/migrations/column_definition/presenter.rb +38 -0
- data/lib/webamm_to_rails/sources/migrations/columns.rb +33 -0
- data/lib/webamm_to_rails/sources/migrations/definition.rb +52 -0
- data/lib/webamm_to_rails/sources/migrations/devise/definition.rb +278 -0
- data/lib/webamm_to_rails/sources/migrations/files_list.rb +98 -0
- data/lib/webamm_to_rails/sources/migrations/index_definition/presenter.rb +34 -0
- data/lib/webamm_to_rails/sources/migrations/indices.rb +33 -0
- data/lib/webamm_to_rails/sources/migrations/table_definition/presenter.rb +21 -0
- data/lib/webamm_to_rails/sources/migrations/template.erb +12 -0
- data/lib/webamm_to_rails/sources/migrations/uuid_definition/presenter.rb +29 -0
- data/lib/webamm_to_rails/sources/migrations/uuid_definition/template.erb +5 -0
- data/lib/webamm_to_rails/sources/models/association_definition/presenter.rb +49 -0
- data/lib/webamm_to_rails/sources/models/associations.rb +113 -0
- data/lib/webamm_to_rails/sources/models/attachment_definition/presenter.rb +21 -0
- data/lib/webamm_to_rails/sources/models/attachments.rb +25 -0
- data/lib/webamm_to_rails/sources/models/class_definition/presenter.rb +17 -0
- data/lib/webamm_to_rails/sources/models/concerns.rb +27 -0
- data/lib/webamm_to_rails/sources/models/definition.rb +57 -0
- data/lib/webamm_to_rails/sources/models/devise_definition/presenter.rb +49 -0
- data/lib/webamm_to_rails/sources/models/enum_definition/presenter.rb +19 -0
- data/lib/webamm_to_rails/sources/models/enums.rb +25 -0
- data/lib/webamm_to_rails/sources/models/template.erb +7 -0
- data/lib/webamm_to_rails/sources/package_json/definition.rb +27 -0
- data/lib/webamm_to_rails/sources/package_json/template.erb +21 -0
- data/lib/webamm_to_rails/sources/routes/authentication_definition/presenter.rb +21 -0
- data/lib/webamm_to_rails/sources/routes/definition.rb +38 -0
- data/lib/webamm_to_rails/sources/routes/resource_definition/presenter.rb +25 -0
- data/lib/webamm_to_rails/sources/routes/template.erb +14 -0
- data/lib/webamm_to_rails/sources/views/definition.rb +28 -0
- data/lib/webamm_to_rails/sources/views/devise/invitable/presenter.rb +31 -0
- data/lib/webamm_to_rails/sources/views/devise/invitable/templates/invitations/edit.html.erb +38 -0
- data/lib/webamm_to_rails/sources/views/devise/invitable/templates/invitations/new.html.erb +31 -0
- data/lib/webamm_to_rails/sources/views/devise/invitable/templates/mailer/invitation_instructions.html.erb +23 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/presenter.rb +32 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_credentials/refresh.html.erb +19 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_credentials/show.html.erb +70 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_tokens/_token_secret.html.erb +21 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_tokens/_trusted_devices.html.erb +12 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_tokens/edit.html.erb +48 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_tokens/recovery.html.erb +21 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_tokens/recovery_codes.html.erb +3 -0
- data/lib/webamm_to_rails/sources/views/devise/otp/templates/otp_tokens/show.html.erb +21 -0
- data/lib/webamm_to_rails/sources/views/devise/presenter.rb +37 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/presenter.rb +39 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/confirmations/new.html.erb +31 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/mailer/confirmation_instructions.html.erb +17 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/mailer/email_changed.html.erb +7 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/mailer/password_change.html.erb +3 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/mailer/reset_password_instructions.html.erb +22 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/passwords/edit.html.erb +36 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/passwords/new.html.erb +31 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/registrations/edit.html.erb +43 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/registrations/new.html.erb +39 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/sessions/new.html.erb +23 -0
- data/lib/webamm_to_rails/sources/views/devise/standard/templates/shared/_links.html.erb +27 -0
- data/lib/webamm_to_rails/sources/views/resource/edit_definition/presenter.rb +41 -0
- data/lib/webamm_to_rails/sources/views/resource/edit_definition/template.erb +1 -0
- data/lib/webamm_to_rails/sources/views/resource/form_definition/presenter.rb +50 -0
- data/lib/webamm_to_rails/sources/views/resource/form_definition/template.erb +82 -0
- data/lib/webamm_to_rails/sources/views/resource/index_definition/presenter.rb +69 -0
- data/lib/webamm_to_rails/sources/views/resource/index_definition/template.erb +78 -0
- data/lib/webamm_to_rails/sources/views/resource/new_definition/presenter.rb +41 -0
- data/lib/webamm_to_rails/sources/views/resource/new_definition/template.erb +1 -0
- data/lib/webamm_to_rails/sources/views/resource/presenter.rb +41 -0
- data/lib/webamm_to_rails/sources/views/resource/show_definition/presenter.rb +61 -0
- data/lib/webamm_to_rails/sources/views/resource/show_definition/template.erb +34 -0
- data/lib/webamm_to_rails/utils/format_code.rb +11 -0
- data/lib/webamm_to_rails/utils/format_template.rb +11 -0
- data/lib/webamm_to_rails/version.rb +5 -0
- data/lib/webamm_to_rails.rb +112 -0
- data/webamm_to_rails.gemspec +28 -0
- metadata +332 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Models
|
4
|
+
class AttachmentDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(column:)
|
7
|
+
@column = column
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
if @column.name == @column.name.pluralize
|
12
|
+
"has_many_attached :#{@column.name}"
|
13
|
+
else
|
14
|
+
"has_one_attached :#{@column.name}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'attachment_definition/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Models
|
6
|
+
class Attachments
|
7
|
+
def initialize(table_definition:)
|
8
|
+
@table_definition = table_definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def collection
|
12
|
+
attachment_columns.map do |column|
|
13
|
+
::WebammToRails::Sources::Models::AttachmentDefinition::Presenter.new(column: column).render
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def attachment_columns
|
20
|
+
@table_definition.columns.select { |col| col.type == 'file' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Models
|
4
|
+
class ClassDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(table_name:)
|
7
|
+
@table_name = table_name
|
8
|
+
end
|
9
|
+
|
10
|
+
def render(base_class: 'ApplicationRecord')
|
11
|
+
"class #{@table_name.classify} < #{base_class}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Models
|
4
|
+
class Concerns
|
5
|
+
def initialize(table_definition:, waml_definition:)
|
6
|
+
@table_definition = table_definition
|
7
|
+
@waml_definition = waml_definition
|
8
|
+
end
|
9
|
+
|
10
|
+
def collection
|
11
|
+
return [] if table_authentication.blank?
|
12
|
+
return [] if table_authentication.features.blank? || !table_authentication.features.include?('online_indication')
|
13
|
+
|
14
|
+
['include DeviseOnlineable']
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def table_authentication
|
20
|
+
return if @waml_definition.authentication.blank?
|
21
|
+
|
22
|
+
@waml_definition.authentication.find { |auth| auth.table == @table_definition.table }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative 'class_definition/presenter'
|
2
|
+
require_relative 'devise_definition/presenter'
|
3
|
+
require_relative 'enums'
|
4
|
+
require_relative 'associations'
|
5
|
+
require_relative 'concerns'
|
6
|
+
require_relative 'attachments'
|
7
|
+
|
8
|
+
module WebammToRails
|
9
|
+
module Sources
|
10
|
+
module Models
|
11
|
+
class Definition
|
12
|
+
def initialize(table_definition:, waml_definition:)
|
13
|
+
@table_definition = table_definition
|
14
|
+
@waml_definition = waml_definition
|
15
|
+
end
|
16
|
+
|
17
|
+
def render
|
18
|
+
template_path = File.expand_path('template.erb', __dir__)
|
19
|
+
template_content = File.read(template_path)
|
20
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
21
|
+
|
22
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def class_definition
|
28
|
+
::WebammToRails::Sources::Models::ClassDefinition::Presenter.new(table_name: table_name).render
|
29
|
+
end
|
30
|
+
|
31
|
+
def associations
|
32
|
+
::WebammToRails::Sources::Models::Associations.new(table_definition: @table_definition, waml_definition: @waml_definition).collection
|
33
|
+
end
|
34
|
+
|
35
|
+
def enums
|
36
|
+
::WebammToRails::Sources::Models::Enums.new(table_definition: @table_definition).collection
|
37
|
+
end
|
38
|
+
|
39
|
+
def concerns
|
40
|
+
::WebammToRails::Sources::Models::Concerns.new(table_definition: @table_definition, waml_definition: @waml_definition).collection
|
41
|
+
end
|
42
|
+
|
43
|
+
def table_name
|
44
|
+
@table_definition.table
|
45
|
+
end
|
46
|
+
|
47
|
+
def devise_definition
|
48
|
+
::WebammToRails::Sources::Models::DeviseDefinition::Presenter.new(table_name: table_name, waml_definition: @waml_definition).render
|
49
|
+
end
|
50
|
+
|
51
|
+
def attachments
|
52
|
+
::WebammToRails::Sources::Models::Attachments.new(table_definition: @table_definition).collection
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Models
|
4
|
+
class DeviseDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(table_name:, waml_definition:)
|
7
|
+
@table_name = table_name
|
8
|
+
@waml_definition = waml_definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def render
|
12
|
+
return unless authenticated?
|
13
|
+
|
14
|
+
base_strategies = [
|
15
|
+
'database_authenticatable', 'validatable', 'rememberable', 'recoverable', 'trackable'
|
16
|
+
]
|
17
|
+
|
18
|
+
if auth_features.include?('allow_sign_up')
|
19
|
+
base_strategies << 'registerable'
|
20
|
+
base_strategies << 'confirmable'
|
21
|
+
end
|
22
|
+
|
23
|
+
if auth_features.include?('invitations')
|
24
|
+
base_strategies << 'invitable'
|
25
|
+
end
|
26
|
+
|
27
|
+
if auth_features.include?('two_factor_authentication')
|
28
|
+
base_strategies << 'otp_authenticatable'
|
29
|
+
end
|
30
|
+
|
31
|
+
"devise #{base_strategies.map { |strategy| ":#{strategy}" }.join(', ')}"
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def authenticated?
|
37
|
+
return false if @waml_definition.authentication.blank?
|
38
|
+
|
39
|
+
@waml_definition.authentication.map(&:table).include?(@table_name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def auth_features
|
43
|
+
@waml_definition.authentication.find { |auth| auth.table == @table_name }.features
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Models
|
4
|
+
class EnumDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(column:)
|
7
|
+
@column = column
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
base_def = "enum :#{@column.name}, { #{@column.values.map(&:underscore).map.with_index { |val, i| "#{val}: #{i}" }.join(', ')} }"
|
12
|
+
base_def += ", default: :#{@column.default}" if @column.default.present?
|
13
|
+
base_def
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'enum_definition/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Models
|
6
|
+
class Enums
|
7
|
+
def initialize(table_definition:)
|
8
|
+
@table_definition = table_definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def collection
|
12
|
+
enum_columns.map do |column|
|
13
|
+
::WebammToRails::Sources::Models::EnumDefinition::Presenter.new(column: column).render
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def enum_columns
|
20
|
+
@table_definition.columns.select { |col| col.type == 'enum_column' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module PackageJson
|
6
|
+
class Definition
|
7
|
+
def initialize(waml_definition:)
|
8
|
+
@waml_definition = waml_definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def render
|
12
|
+
template_path = File.expand_path('template.erb', __dir__)
|
13
|
+
template_content = File.read(template_path)
|
14
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
15
|
+
|
16
|
+
JSON.parse(raw_content).to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def use_actioncable?
|
22
|
+
@waml_definition.authentication.present? && @waml_definition.authentication.any? { |auth| auth.features.include?('online_indication') }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"name": "app",
|
3
|
+
"private": true,
|
4
|
+
"devDependencies": {
|
5
|
+
"esbuild": "^0.23.0"
|
6
|
+
},
|
7
|
+
"scripts": {
|
8
|
+
"build": "esbuild app/javascript/*.* --bundle --sourcemap --format=esm --outdir=app/assets/builds --public-path=/assets",
|
9
|
+
"build:css": "tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --minify"
|
10
|
+
},
|
11
|
+
"dependencies": {
|
12
|
+
"@hotwired/stimulus": "^3.2.2",
|
13
|
+
"@hotwired/turbo-rails": "^8.0.5",
|
14
|
+
"autoprefixer": "^10.4.20",
|
15
|
+
"postcss": "^8.4.41",
|
16
|
+
"tailwindcss": "^3.4.9"
|
17
|
+
<% if use_actioncable? -%>
|
18
|
+
,"@rails/actioncable": "7.1.3-4"
|
19
|
+
<% end -%>
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Routes
|
4
|
+
module AuthenticationDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(waml_definition:)
|
7
|
+
@waml_definition = waml_definition
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
return if @waml_definition.authentication.blank?
|
12
|
+
|
13
|
+
@waml_definition.authentication.map do |authentication|
|
14
|
+
"devise_for :#{authentication.table}"
|
15
|
+
end.join("\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative 'authentication_definition/presenter'
|
2
|
+
require_relative 'resource_definition/presenter'
|
3
|
+
|
4
|
+
module WebammToRails
|
5
|
+
module Sources
|
6
|
+
module Routes
|
7
|
+
class Definition
|
8
|
+
def initialize(waml_definition:)
|
9
|
+
@waml_definition = waml_definition
|
10
|
+
end
|
11
|
+
|
12
|
+
def render
|
13
|
+
template_path = File.expand_path('template.erb', __dir__)
|
14
|
+
template_content = File.read(template_path)
|
15
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
16
|
+
|
17
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def authentication_definition
|
23
|
+
::WebammToRails::Sources::Routes::AuthenticationDefinition::Presenter.new(
|
24
|
+
waml_definition: @waml_definition
|
25
|
+
).render
|
26
|
+
end
|
27
|
+
|
28
|
+
def resources
|
29
|
+
@waml_definition.database.crud.map do |resource|
|
30
|
+
::WebammToRails::Sources::Routes::ResourceDefinition::Presenter.new(
|
31
|
+
crud_definition: resource
|
32
|
+
).render
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Routes
|
4
|
+
module ResourceDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(crud_definition:)
|
7
|
+
@crud_definition = crud_definition
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
base_def = "resources :#{@crud_definition.table}"
|
12
|
+
|
13
|
+
return base_def if @crud_definition.actions.size == 7
|
14
|
+
|
15
|
+
base_actions = @crud_definition.actions.map(&:name)
|
16
|
+
base_actions << 'edit' if base_actions.include?('update')
|
17
|
+
base_actions << 'new' if base_actions.include?('create')
|
18
|
+
|
19
|
+
base_def + ", only: %i[#{base_actions.join(' ')}]"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
|
3
|
+
|
4
|
+
get "up" => "rails/health#show", as: :rails_health_check
|
5
|
+
|
6
|
+
# Render dynamic PWA files from app/views/pwa/*
|
7
|
+
get "service-worker" => "rails/pwa#service_worker", as: :pwa_service_worker
|
8
|
+
get "manifest" => "rails/pwa#manifest", as: :pwa_manifest
|
9
|
+
|
10
|
+
<%= authentication_definition if authentication_definition.present? %>
|
11
|
+
<% resources.each do |resource| %>
|
12
|
+
<%= resource %>
|
13
|
+
<% end %>
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative 'devise/presenter'
|
2
|
+
require_relative 'resource/presenter'
|
3
|
+
|
4
|
+
module WebammToRails
|
5
|
+
module Sources
|
6
|
+
module Views
|
7
|
+
class Definition
|
8
|
+
def initialize(waml_definition:)
|
9
|
+
@waml_definition = waml_definition
|
10
|
+
end
|
11
|
+
|
12
|
+
def collection
|
13
|
+
views = []
|
14
|
+
views |= ::WebammToRails::Sources::Views::Devise::Presenter.new(waml_definition: @waml_definition).collection
|
15
|
+
|
16
|
+
@waml_definition.database.crud.each do |crud_definition|
|
17
|
+
views |= ::WebammToRails::Sources::Views::Resource::Presenter.new(
|
18
|
+
crud_definition: crud_definition,
|
19
|
+
waml_definition: @waml_definition
|
20
|
+
).collection
|
21
|
+
end
|
22
|
+
|
23
|
+
views
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Views
|
4
|
+
module Devise
|
5
|
+
module Invitable
|
6
|
+
class Presenter
|
7
|
+
def initialize(table_name:)
|
8
|
+
@table_name = table_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def collection
|
12
|
+
base_path = "app/views/#{@table_name}/"
|
13
|
+
templates = [
|
14
|
+
'mailer/invitation_instructions.html.erb',
|
15
|
+
'invitations/edit.html.erb',
|
16
|
+
'invitations/new.html.erb'
|
17
|
+
]
|
18
|
+
|
19
|
+
templates.map do |template|
|
20
|
+
{
|
21
|
+
path: base_path + template,
|
22
|
+
content: File.read(File.expand_path("templates/#{template}", __dir__))
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<%= form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :put, class: "max-w-4xl mx-auto" }) do |form| %>
|
2
|
+
<%= form.hidden_field :invitation_token, readonly: true %>
|
3
|
+
<% if resource.errors.any? %>
|
4
|
+
<div class="rounded-md bg-red-50 p-4 mb-4">
|
5
|
+
<div class="flex">
|
6
|
+
<div class="flex-shrink-0">
|
7
|
+
<svg class="h-5 w-5 text-red-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
8
|
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z" clip-rule="evenodd" />
|
9
|
+
</svg>
|
10
|
+
</div>
|
11
|
+
<div class="ml-3">
|
12
|
+
<h3 class="text-sm font-medium text-red-800"><%= pluralize(resource.errors.count, "error") %> prohibited this record from being saved:</h3>
|
13
|
+
<div class="mt-2 text-sm text-red-700">
|
14
|
+
<ul role="list" class="list-disc space-y-1 pl-5">
|
15
|
+
<% resource.errors.each do |error| %>
|
16
|
+
<li><%= error.full_message %></li>
|
17
|
+
<% end %>
|
18
|
+
</ul>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
24
|
+
|
25
|
+
<% if form.object.class.require_password_on_accepting %>
|
26
|
+
<div class="my-5">
|
27
|
+
<label class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Password:</label>
|
28
|
+
<%= form.password_field :password, class: 'shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500 dark:shadow-sm-light' %>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="my-5">
|
32
|
+
<label class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Password confirmation:</label>
|
33
|
+
<%= form.password_field :password_confirmation, class: 'shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500 dark:shadow-sm-light' %>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
36
|
+
|
37
|
+
<%= form.submit t("devise.invitations.edit.submit_button"), class: 'text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800' %>
|
38
|
+
<% end %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<%= form_for(resource, as: resource_name, url: invitation_path(resource_name), html: { method: :post, class: "max-w-4xl mx-auto" }) do |form| %>
|
2
|
+
<% if resource.errors.any? %>
|
3
|
+
<div class="rounded-md bg-red-50 p-4 mb-4">
|
4
|
+
<div class="flex">
|
5
|
+
<div class="flex-shrink-0">
|
6
|
+
<svg class="h-5 w-5 text-red-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
7
|
+
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z" clip-rule="evenodd" />
|
8
|
+
</svg>
|
9
|
+
</div>
|
10
|
+
<div class="ml-3">
|
11
|
+
<h3 class="text-sm font-medium text-red-800"><%= pluralize(resource.errors.count, "error") %> prohibited this record from being saved:</h3>
|
12
|
+
<div class="mt-2 text-sm text-red-700">
|
13
|
+
<ul role="list" class="list-disc space-y-1 pl-5">
|
14
|
+
<% resource.errors.each do |error| %>
|
15
|
+
<li><%= error.full_message %></li>
|
16
|
+
<% end %>
|
17
|
+
</ul>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
<% resource.class.invite_key_fields.each do |field| -%>
|
24
|
+
<div class="my-5">
|
25
|
+
<label class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"><%= field %></label>
|
26
|
+
<%= form.text_field field, class: 'shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500 dark:shadow-sm-light' %>
|
27
|
+
</div>
|
28
|
+
<% end -%>
|
29
|
+
|
30
|
+
<%= form.submit t("devise.invitations.new.submit_button"), class: 'text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800' %>
|
31
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<p><%= t("devise.mailer.invitation_instructions.hello", email: @resource.email) %></p>
|
2
|
+
<p><%= t("devise.mailer.invitation_instructions.someone_invited_you", url: root_url) %></p>
|
3
|
+
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="btn btn-primary">
|
4
|
+
<tbody>
|
5
|
+
<tr>
|
6
|
+
<td align="left">
|
7
|
+
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
8
|
+
<tbody>
|
9
|
+
<tr>
|
10
|
+
<td><%= link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, invitation_token: @token) %></td>
|
11
|
+
</tr>
|
12
|
+
</tbody>
|
13
|
+
</table>
|
14
|
+
</td>
|
15
|
+
</tr>
|
16
|
+
</tbody>
|
17
|
+
</table>
|
18
|
+
|
19
|
+
<% if @resource.invitation_due_at %>
|
20
|
+
<p><%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :'devise.mailer.invitation_instructions.accept_until_format')) %></p>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<p><%= t("devise.mailer.invitation_instructions.ignore") %></p>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Views
|
4
|
+
module Devise
|
5
|
+
module Otp
|
6
|
+
class Presenter
|
7
|
+
def collection
|
8
|
+
base_path = "app/views/devise/"
|
9
|
+
templates = [
|
10
|
+
'otp_credentials/show.html.erb',
|
11
|
+
'otp_credentials/refresh.html.erb',
|
12
|
+
'otp_tokens/_token_secret.html.erb',
|
13
|
+
'otp_tokens/_trusted_devices.html.erb',
|
14
|
+
'otp_tokens/edit.html.erb',
|
15
|
+
'otp_tokens/recovery_codes.html.erb',
|
16
|
+
'otp_tokens/recovery.html.erb',
|
17
|
+
'otp_tokens/show.html.erb'
|
18
|
+
]
|
19
|
+
|
20
|
+
templates.map do |template|
|
21
|
+
{
|
22
|
+
path: base_path + template,
|
23
|
+
content: File.read(File.expand_path("templates/#{template}", __dir__))
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<h2><%= I18n.t('title', :scope => 'devise.otp.credentials_refresh') %></h2>
|
2
|
+
<p><%= I18n.t('explain', :scope => 'devise.otp.credentials_refresh') %></p>
|
3
|
+
|
4
|
+
<%= form_for(resource, :as => resource_name, :url => [:refresh, resource_name, :otp_credential], :html => { :method => :put, "data-turbo" => false }) do |f| %>
|
5
|
+
|
6
|
+
<%= render "devise/shared/error_messages", resource: resource %>
|
7
|
+
|
8
|
+
<div>
|
9
|
+
<%= f.label :email %><br />
|
10
|
+
<%= f.text_field :email, :disabled => :true%>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div>
|
14
|
+
<%= f.label :password %><br />
|
15
|
+
<%= f.password_field :refresh_password, :autocomplete => :off, :autofocus => true %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div><%= f.submit I18n.t(:go_on, :scope => 'devise.otp.credentials_refresh') %></div>
|
19
|
+
<% end %>
|