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,49 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Controllers
|
4
|
+
module ApplicationController
|
5
|
+
module Authentication
|
6
|
+
module DeviseGroups
|
7
|
+
class Presenter
|
8
|
+
def initialize(waml_definition:)
|
9
|
+
@waml_definition = waml_definition
|
10
|
+
end
|
11
|
+
|
12
|
+
def mappings
|
13
|
+
group_count = 1
|
14
|
+
devise_mappings = {}
|
15
|
+
|
16
|
+
groups.each do |group|
|
17
|
+
if group.size == 1
|
18
|
+
devise_mappings[group] = group.first
|
19
|
+
else
|
20
|
+
devise_mappings[group] = "group#{group_count}"
|
21
|
+
group_count += 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
devise_mappings
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def groups
|
31
|
+
@groups ||= begin
|
32
|
+
_groups = Set.new
|
33
|
+
|
34
|
+
@waml_definition.database.crud.each do |crud|
|
35
|
+
crud.actions.each do |action|
|
36
|
+
_groups.add(action.options.authentication)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
_groups.compact_blank
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Controllers
|
4
|
+
module ApplicationController
|
5
|
+
module Authentication
|
6
|
+
module DeviseGroupsDefinition
|
7
|
+
class Presenter
|
8
|
+
def initialize(devise_mappings:)
|
9
|
+
@devise_mappings = devise_mappings
|
10
|
+
end
|
11
|
+
|
12
|
+
def collection
|
13
|
+
base_collection = []
|
14
|
+
|
15
|
+
@devise_mappings.each_pair do |group, group_name|
|
16
|
+
next if group.size == 1
|
17
|
+
|
18
|
+
contains_def = group.map { |group_el| ":#{group_el.singularize}" }.join(', ')
|
19
|
+
base_collection << "devise_group :#{group_name}, contains: [#{contains_def}]"
|
20
|
+
end
|
21
|
+
|
22
|
+
base_collection
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'authentication/devise_groups/presenter'
|
2
|
+
require_relative 'authentication/devise_groups_definition/presenter'
|
3
|
+
|
4
|
+
module WebammToRails
|
5
|
+
module Sources
|
6
|
+
module Controllers
|
7
|
+
module ApplicationController
|
8
|
+
class Definition
|
9
|
+
def initialize(waml_definition:)
|
10
|
+
@waml_definition = waml_definition
|
11
|
+
end
|
12
|
+
|
13
|
+
def render
|
14
|
+
template_path = File.expand_path('template.erb', __dir__)
|
15
|
+
template_content = File.read(template_path)
|
16
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
17
|
+
|
18
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def devise_groups
|
24
|
+
devise_mappings = ::WebammToRails::Sources::Controllers::ApplicationController::Authentication::DeviseGroups::Presenter.new(
|
25
|
+
waml_definition: @waml_definition
|
26
|
+
).mappings
|
27
|
+
|
28
|
+
::WebammToRails::Sources::Controllers::ApplicationController::Authentication::DeviseGroupsDefinition::Presenter.new(
|
29
|
+
devise_mappings: devise_mappings
|
30
|
+
).collection
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Controllers
|
4
|
+
class ClassDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(table_name:)
|
7
|
+
@table_name = table_name
|
8
|
+
end
|
9
|
+
|
10
|
+
def render(base_class: 'ApplicationController')
|
11
|
+
"class #{@table_name.classify.pluralize}Controller < #{base_class}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative 'class_definition/presenter'
|
2
|
+
require_relative 'actions/definition'
|
3
|
+
require_relative 'filters/definition'
|
4
|
+
|
5
|
+
module WebammToRails
|
6
|
+
module Sources
|
7
|
+
module Controllers
|
8
|
+
class Definition
|
9
|
+
def initialize(crud_definition:, waml_definition:)
|
10
|
+
@crud_definition = crud_definition
|
11
|
+
@waml_definition = waml_definition
|
12
|
+
end
|
13
|
+
|
14
|
+
def render
|
15
|
+
template_path = File.expand_path('template.erb', __dir__)
|
16
|
+
template_content = File.read(template_path)
|
17
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
18
|
+
|
19
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def class_definition
|
25
|
+
::WebammToRails::Sources::Controllers::ClassDefinition::Presenter.new(table_name: @crud_definition.table).render
|
26
|
+
end
|
27
|
+
|
28
|
+
def actions
|
29
|
+
::WebammToRails::Sources::Controllers::Actions::Definition.new(
|
30
|
+
crud_definition: @crud_definition,
|
31
|
+
waml_definition: @waml_definition
|
32
|
+
).collection
|
33
|
+
end
|
34
|
+
|
35
|
+
def filters
|
36
|
+
::WebammToRails::Sources::Controllers::Filters::Definition.new(
|
37
|
+
crud_definition: @crud_definition,
|
38
|
+
waml_definition: @waml_definition
|
39
|
+
).collection
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'devise_definition/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Controllers
|
6
|
+
module Filters
|
7
|
+
class Definition
|
8
|
+
def initialize(crud_definition:, waml_definition:)
|
9
|
+
@crud_definition = crud_definition
|
10
|
+
@waml_definition = waml_definition
|
11
|
+
end
|
12
|
+
|
13
|
+
def collection
|
14
|
+
base_collection = []
|
15
|
+
|
16
|
+
base_collection |= devise_collection
|
17
|
+
|
18
|
+
base_collection
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def devise_collection
|
24
|
+
::WebammToRails::Sources::Controllers::Filters::DeviseDefinition::Presenter.new(
|
25
|
+
crud_definition: @crud_definition, waml_definition: @waml_definition
|
26
|
+
).collection
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative '../../application_controller/authentication/devise_groups/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Controllers
|
6
|
+
module Filters
|
7
|
+
module DeviseDefinition
|
8
|
+
class Presenter
|
9
|
+
def initialize(crud_definition:, waml_definition:)
|
10
|
+
@crud_definition = crud_definition
|
11
|
+
@waml_definition = waml_definition
|
12
|
+
end
|
13
|
+
|
14
|
+
def collection
|
15
|
+
base_collection = []
|
16
|
+
action_mappings = {}
|
17
|
+
|
18
|
+
@crud_definition.actions.each do |action|
|
19
|
+
next if action.options.authentication.blank?
|
20
|
+
|
21
|
+
action_mappings[action.options.authentication] ||= []
|
22
|
+
action_mappings[action.options.authentication] << action.name
|
23
|
+
|
24
|
+
if action.name == 'create'
|
25
|
+
action_mappings[action.options.authentication] << 'new'
|
26
|
+
end
|
27
|
+
|
28
|
+
if action.name == 'update'
|
29
|
+
action_mappings[action.options.authentication] << 'edit'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
action_mappings.each_pair do |group, actions|
|
34
|
+
devise_resource = mappings[group]
|
35
|
+
|
36
|
+
actions_def = actions.map { |action| ":#{action}" }.join(', ')
|
37
|
+
base_collection << "before_action :authenticate_#{devise_resource.singularize}!, only: [#{actions_def}]"
|
38
|
+
end
|
39
|
+
|
40
|
+
base_collection
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def mappings
|
46
|
+
@mappings ||= ::WebammToRails::Sources::Controllers::ApplicationController::Authentication::DeviseGroups::Presenter.new(
|
47
|
+
waml_definition: @waml_definition
|
48
|
+
).mappings
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%= class_definition %>
|
2
|
+
<% filters.each do |filter| %>
|
3
|
+
<%= filter -%>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<% actions.fetch(:public, []).each do |action_def| %>
|
7
|
+
<%= action_def.render %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<% if actions.fetch(:private, []).any? %>
|
11
|
+
private
|
12
|
+
|
13
|
+
<% actions.fetch(:private, []).each do |action_def| %>
|
14
|
+
<%= action_def.render %>
|
15
|
+
<% end %>
|
16
|
+
<% end %>
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Gemfile
|
4
|
+
class DefaultSet
|
5
|
+
GEMS = [
|
6
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "rails", version: "7.1.0", required: true, group: :default, platforms: []),
|
7
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "sprockets-rails", version: nil, required: true, group: :default, platforms: []),
|
8
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "pg", version: "~> 1.1", required: true, group: :default, platforms: []),
|
9
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "puma", version: ">= 5.0", required: true, group: :default, platforms: []),
|
10
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "jsbundling-rails", version: nil, required: true, group: :default, platforms: []),
|
11
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "turbo-rails", version: nil, required: true, group: :default, platforms: []),
|
12
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "stimulus-rails", version: nil, required: true, group: :default, platforms: []),
|
13
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "cssbundling-rails", version: nil, required: true, group: :default, platforms: []),
|
14
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "jbuilder", version: nil, required: true, group: :default, platforms: []),
|
15
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "redis", version: ">= 4.0.1", required: true, group: :default, platforms: []),
|
16
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "tzinfo-data", version: nil, required: true, group: :default, platforms: %i[ windows jruby ]),
|
17
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "bootsnap", version: nil, required: false, group: :default, platforms: []),
|
18
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "debug", version: nil, required: false, group: %i[development test], platforms: %i[ mri windows ]),
|
19
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "brakeman", version: nil, required: false, group: %i[development test], platforms: []),
|
20
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "rubocop-rails-omakase", version: nil, required: false, group: %i[development test], platforms: []),
|
21
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "web-console", version: nil, required: false, group: :development, platforms: []),
|
22
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "letter_opener_web", version: '~> 3.0', required: true, group: :development, platforms: [])
|
23
|
+
]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative 'gem'
|
2
|
+
require_relative 'project_set'
|
3
|
+
require_relative 'gem_definition/presenter'
|
4
|
+
|
5
|
+
module WebammToRails
|
6
|
+
module Sources
|
7
|
+
module Gemfile
|
8
|
+
class Definition
|
9
|
+
def initialize(waml_definition:)
|
10
|
+
@waml_definition = waml_definition
|
11
|
+
end
|
12
|
+
|
13
|
+
def render
|
14
|
+
template_path = File.expand_path('template.erb', __dir__)
|
15
|
+
template_content = File.read(template_path)
|
16
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
17
|
+
|
18
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def gems
|
24
|
+
::WebammToRails::Sources::Gemfile::ProjectSet.new(waml_definition: @waml_definition).collection.map do |gem|
|
25
|
+
::WebammToRails::Sources::Gemfile::GemDefinition::Presenter.new(gem: gem).render
|
26
|
+
end.inject({}) { |hash, gem| hash[gem.first] ||= []; hash[gem.first] << gem.last; hash }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Gemfile
|
4
|
+
module GemDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(gem:)
|
7
|
+
@gem = gem
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
base_definition = "gem '#{@gem.name}'"
|
12
|
+
base_definition += ", '#{@gem.version}'" if @gem.version.present?
|
13
|
+
base_definition += ", require: false" unless @gem.required
|
14
|
+
base_definition += ", platforms: %i[#{@gem.platforms.map { |val| "#{val}" }.join(' ')}]" if @gem.platforms.present?
|
15
|
+
|
16
|
+
[@gem.group, base_definition]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'sets/authentication'
|
2
|
+
require_relative 'default_set'
|
3
|
+
|
4
|
+
module WebammToRails
|
5
|
+
module Sources
|
6
|
+
module Gemfile
|
7
|
+
class ProjectSet
|
8
|
+
def initialize(waml_definition:)
|
9
|
+
@waml_definition = waml_definition
|
10
|
+
end
|
11
|
+
|
12
|
+
def collection
|
13
|
+
gems = ::WebammToRails::Sources::Gemfile::DefaultSet::GEMS
|
14
|
+
gems |= ::WebammToRails::Sources::Gemfile::Sets::Authentication.new(waml_definition: @waml_definition).collection
|
15
|
+
|
16
|
+
gems
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Gemfile
|
4
|
+
module Sets
|
5
|
+
class Authentication
|
6
|
+
def initialize(waml_definition:)
|
7
|
+
@waml_definition = waml_definition
|
8
|
+
end
|
9
|
+
|
10
|
+
def collection
|
11
|
+
return [] if @waml_definition.authentication.blank?
|
12
|
+
|
13
|
+
base_collection = [
|
14
|
+
::WebammToRails::Sources::Gemfile::Gem.new(name: "devise", version: "4.9.4", required: true, group: :default, platforms: [])
|
15
|
+
]
|
16
|
+
|
17
|
+
return base_collection if @waml_definition.authentication.all? { |auth| auth.features.blank? }
|
18
|
+
|
19
|
+
if @waml_definition.authentication.any? { |auth| auth.features.include?('invitations') }
|
20
|
+
base_collection << ::WebammToRails::Sources::Gemfile::Gem.new(name: "devise_invitable", version: "2.0.9", required: true, group: :default, platforms: [])
|
21
|
+
end
|
22
|
+
|
23
|
+
if @waml_definition.authentication.any? { |auth| auth.features.include?('two_factor_authentication') }
|
24
|
+
base_collection << ::WebammToRails::Sources::Gemfile::Gem.new(name: "devise-otp", version: "0.7.1", required: true, group: :default, platforms: [])
|
25
|
+
base_collection << ::WebammToRails::Sources::Gemfile::Gem.new(name: "rqrcode", version: "2.2.0", required: true, group: :default, platforms: [])
|
26
|
+
end
|
27
|
+
|
28
|
+
base_collection
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
<% gems[:default].each do |gem_def| %>
|
4
|
+
<%= gem_def -%>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
<% gems[:development].each do |gem_def| %>
|
9
|
+
<%= gem_def -%>
|
10
|
+
<% end %>
|
11
|
+
end
|
12
|
+
|
13
|
+
group :development, :test do
|
14
|
+
<% gems[[:development, :test]].each do |gem_def| %>
|
15
|
+
<%= gem_def -%>
|
16
|
+
<% end %>
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'devise/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Helpers
|
6
|
+
class Definitions
|
7
|
+
def initialize(waml_definition:)
|
8
|
+
@waml_definition = waml_definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def collection
|
12
|
+
base_collection = []
|
13
|
+
|
14
|
+
base_collection |= ::WebammToRails::Sources::Helpers::Devise::Presenter.new(waml_definition: @waml_definition).collection
|
15
|
+
|
16
|
+
base_collection
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'qr_code_helper/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Helpers
|
6
|
+
module Devise
|
7
|
+
class Presenter
|
8
|
+
def initialize(waml_definition:)
|
9
|
+
@waml_definition = waml_definition
|
10
|
+
end
|
11
|
+
|
12
|
+
def collection
|
13
|
+
return [] if @waml_definition.authentication.blank?
|
14
|
+
return [] unless @waml_definition.authentication.any? { |auth| auth.features.include?('two_factor_authentication') }
|
15
|
+
|
16
|
+
[
|
17
|
+
{
|
18
|
+
path: 'app/helpers/devise_qr_code_helper.rb',
|
19
|
+
content: ::WebammToRails::Sources::Helpers::Devise::QrCodeHelper::Presenter.new.render
|
20
|
+
}
|
21
|
+
]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Helpers
|
4
|
+
module Devise
|
5
|
+
module QrCodeHelper
|
6
|
+
class Presenter
|
7
|
+
def render
|
8
|
+
template_path = File.expand_path('template.erb', __dir__)
|
9
|
+
template_content = File.read(template_path)
|
10
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
11
|
+
|
12
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module DeviseQrCodeHelper
|
2
|
+
def qr_code_for_devise(resource)
|
3
|
+
token = "otpauth://totp/#{resource.email}?secret=#{resource.otp_auth_secret}&issuer=MyApp"
|
4
|
+
|
5
|
+
qrcode = ::RQRCode::QRCode.new(token)
|
6
|
+
|
7
|
+
png = qrcode.as_png(
|
8
|
+
bit_depth: 1,
|
9
|
+
border_modules: 4,
|
10
|
+
color_mode: ::ChunkyPNG::COLOR_GRAYSCALE,
|
11
|
+
color: "black",
|
12
|
+
file: nil,
|
13
|
+
fill: "white",
|
14
|
+
module_px_size: 6,
|
15
|
+
resize_exactly_to: false,
|
16
|
+
resize_gte_to: false,
|
17
|
+
size: 250
|
18
|
+
)
|
19
|
+
|
20
|
+
"data:image/png;base64,#{Base64.strict_encode64(png.to_blob)}"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'devise_definition/presenter'
|
2
|
+
|
3
|
+
module WebammToRails
|
4
|
+
module Sources
|
5
|
+
module Initializers
|
6
|
+
class Definitions
|
7
|
+
def initialize(waml_definition:)
|
8
|
+
@waml_definition = waml_definition
|
9
|
+
end
|
10
|
+
|
11
|
+
def collection
|
12
|
+
base_collection = []
|
13
|
+
|
14
|
+
if @waml_definition.authentication.present?
|
15
|
+
base_collection << {
|
16
|
+
path: 'config/initializers/devise.rb',
|
17
|
+
content: DeviseDefinition::Presenter.new(waml_definition: @waml_definition).render
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
base_collection
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module WebammToRails
|
2
|
+
module Sources
|
3
|
+
module Initializers
|
4
|
+
module DeviseDefinition
|
5
|
+
class Presenter
|
6
|
+
def initialize(waml_definition:)
|
7
|
+
@waml_definition = waml_definition
|
8
|
+
end
|
9
|
+
|
10
|
+
def render
|
11
|
+
template_path = File.expand_path('template.erb', __dir__)
|
12
|
+
template_content = File.read(template_path)
|
13
|
+
raw_content = ERB.new(template_content, trim_mode: '-').result(instance_eval { binding })
|
14
|
+
|
15
|
+
::WebammToRails::Utils::FormatCode.call(raw_content)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def features
|
21
|
+
@waml_definition.authentication.map(&:features).flatten.uniq
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|