layered_stack 0.0.5 → 0.0.6

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.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/lib/layered_stack/backend/create.rb +2 -2
  3. data/lib/layered_stack/frontend/create.rb +8 -8
  4. data/lib/layered_stack/root/create.rb +80 -0
  5. data/lib/layered_stack/version.rb +1 -1
  6. data/lib/layered_stack.rb +11 -4
  7. data/templates/backend/rails_template.rb +51 -0
  8. data/templates/root/Gemfile +11 -0
  9. data/templates/root/Procfile +2 -0
  10. data/templates/root/devcontainer/Dockerfile +9 -0
  11. data/templates/root/devcontainer/devcontainer.json +19 -0
  12. data/templates/root/devcontainer/docker-compose.yml +12 -0
  13. data/templates/root/devcontainer/layered-stack-0.0.1.vsix +0 -0
  14. data/templates/root/layered_stack/cli/LICENSE.md +21 -0
  15. data/templates/root/layered_stack/cli/bin/layered_stack +3 -0
  16. data/templates/root/layered_stack/cli/cli/LICENSE.md +21 -0
  17. data/templates/root/layered_stack/cli/cli/bin/layered_stack +3 -0
  18. data/templates/root/layered_stack/cli/cli/layered_stack-0.0.6.gem +0 -0
  19. data/templates/root/layered_stack/cli/cli/layered_stack.gemspec +30 -0
  20. data/templates/root/layered_stack/cli/cli/lib/layered_stack/backend/create.rb +42 -0
  21. data/templates/root/layered_stack/cli/cli/lib/layered_stack/backend/start.rb +30 -0
  22. data/templates/root/layered_stack/cli/cli/lib/layered_stack/frontend/create.rb +137 -0
  23. data/templates/root/layered_stack/cli/cli/lib/layered_stack/frontend/start.rb +33 -0
  24. data/templates/root/layered_stack/cli/cli/lib/layered_stack/root/create.rb +80 -0
  25. data/templates/root/layered_stack/cli/cli/lib/layered_stack/version.rb +5 -0
  26. data/templates/root/layered_stack/cli/cli/lib/layered_stack.rb +63 -0
  27. data/templates/root/layered_stack/cli/cli/templates/backend/rails_template.rb +51 -0
  28. data/templates/root/layered_stack/cli/cli/templates/frontend/images/logo_dark.svg +29 -0
  29. data/templates/root/layered_stack/cli/cli/templates/frontend/images/logo_light.svg +29 -0
  30. data/templates/root/layered_stack/cli/cli/templates/frontend/layout.js +21 -0
  31. data/templates/root/layered_stack/cli/cli/templates/frontend/page.js +35 -0
  32. data/templates/root/layered_stack/cli/cli/templates/frontend/tailwind.config.js +19 -0
  33. data/templates/root/layered_stack/cli/cli/templates/root/Gemfile +11 -0
  34. data/templates/root/layered_stack/cli/cli/templates/root/Procfile +2 -0
  35. data/templates/root/layered_stack/cli/cli/templates/root/devcontainer/Dockerfile +9 -0
  36. data/templates/root/layered_stack/cli/cli/templates/root/devcontainer/devcontainer.json +19 -0
  37. data/templates/root/layered_stack/cli/cli/templates/root/devcontainer/docker-compose.yml +12 -0
  38. data/templates/root/layered_stack/cli/cli/templates/root/devcontainer/layered-stack-0.0.1.vsix +0 -0
  39. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/LICENSE.md +21 -0
  40. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/bin/layered_stack +3 -0
  41. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/layered_stack-0.0.6.gem +0 -0
  42. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/layered_stack.gemspec +30 -0
  43. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack/backend/create.rb +42 -0
  44. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack/backend/start.rb +30 -0
  45. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack/frontend/create.rb +137 -0
  46. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack/frontend/start.rb +33 -0
  47. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack/root/create.rb +80 -0
  48. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack/version.rb +5 -0
  49. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/lib/layered_stack.rb +63 -0
  50. data/{assets/backend/template.rb → templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/backend/rails_template.rb} +15 -20
  51. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/frontend/images/logo_dark.svg +29 -0
  52. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/frontend/images/logo_light.svg +29 -0
  53. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/frontend/layout.js +21 -0
  54. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/frontend/page.js +35 -0
  55. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/frontend/tailwind.config.js +19 -0
  56. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/Gemfile +8 -0
  57. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/Procfile +2 -0
  58. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/devcontainer/Dockerfile +9 -0
  59. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/devcontainer/devcontainer.json +19 -0
  60. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/devcontainer/docker-compose.yml +11 -0
  61. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/devcontainer/layered-stack-0.0.1.vsix +0 -0
  62. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/LICENSE.md +21 -0
  63. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/bin/layered_stack-rails +3 -0
  64. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/layered_stack-rails.gemspec +29 -0
  65. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/scaffold_generator.rb +89 -0
  66. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/templates/active_record/model/model.erb +9 -0
  67. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/example.rb +97 -0
  68. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/generate.rb +34 -0
  69. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/generate_new.rb +34 -0
  70. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/version.rb +5 -0
  71. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails.rb +26 -0
  72. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/LICENSE.md +21 -0
  73. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/bin/layered_stack-rails +3 -0
  74. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/layered_stack-rails.gemspec +29 -0
  75. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/scaffold_generator.rb +89 -0
  76. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/templates/active_record/model/model.erb +9 -0
  77. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/example.rb +97 -0
  78. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/generate.rb +34 -0
  79. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/generate_new.rb +34 -0
  80. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/version.rb +5 -0
  81. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/lib/layered_stack_rails.rb +26 -0
  82. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/LICENSE.md +21 -0
  83. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/bin/layered_stack-rails +3 -0
  84. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/layered_stack-rails.gemspec +29 -0
  85. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/generators/layered_stack_rails/scaffold_generator.rb +89 -0
  86. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/generators/layered_stack_rails/templates/active_record/model/model.erb +9 -0
  87. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/example.rb +97 -0
  88. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/generate.rb +34 -0
  89. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/generate_new.rb +34 -0
  90. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/version.rb +5 -0
  91. data/templates/root/layered_stack/cli/cli/templates/root/layered_stack/rails/rails/lib/layered_stack_rails.rb +26 -0
  92. data/templates/root/layered_stack/cli/layered_stack-0.0.6.gem +0 -0
  93. data/templates/root/layered_stack/cli/layered_stack.gemspec +30 -0
  94. data/templates/root/layered_stack/cli/lib/layered_stack/backend/create.rb +42 -0
  95. data/templates/root/layered_stack/cli/lib/layered_stack/backend/start.rb +30 -0
  96. data/templates/root/layered_stack/cli/lib/layered_stack/frontend/create.rb +137 -0
  97. data/templates/root/layered_stack/cli/lib/layered_stack/frontend/start.rb +33 -0
  98. data/templates/root/layered_stack/cli/lib/layered_stack/root/create.rb +80 -0
  99. data/templates/root/layered_stack/cli/lib/layered_stack/version.rb +5 -0
  100. data/templates/root/layered_stack/cli/lib/layered_stack.rb +63 -0
  101. data/templates/root/layered_stack/cli/templates/backend/rails_template.rb +48 -0
  102. data/templates/root/layered_stack/cli/templates/frontend/images/logo_dark.svg +29 -0
  103. data/templates/root/layered_stack/cli/templates/frontend/images/logo_light.svg +29 -0
  104. data/templates/root/layered_stack/cli/templates/frontend/layout.js +21 -0
  105. data/templates/root/layered_stack/cli/templates/frontend/page.js +35 -0
  106. data/templates/root/layered_stack/cli/templates/frontend/tailwind.config.js +19 -0
  107. data/templates/root/layered_stack/cli/templates/root/Gemfile +8 -0
  108. data/templates/root/layered_stack/cli/templates/root/Procfile +2 -0
  109. data/templates/root/layered_stack/cli/templates/root/devcontainer/Dockerfile +9 -0
  110. data/templates/root/layered_stack/cli/templates/root/devcontainer/devcontainer.json +19 -0
  111. data/templates/root/layered_stack/cli/templates/root/devcontainer/docker-compose.yml +11 -0
  112. data/templates/root/layered_stack/cli/templates/root/devcontainer/layered-stack-0.0.1.vsix +0 -0
  113. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/LICENSE.md +21 -0
  114. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/bin/layered_stack-rails +3 -0
  115. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/layered_stack-rails.gemspec +29 -0
  116. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/scaffold_generator.rb +89 -0
  117. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/templates/active_record/model/model.erb +9 -0
  118. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/example.rb +97 -0
  119. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/generate.rb +34 -0
  120. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/generate_new.rb +34 -0
  121. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails/version.rb +5 -0
  122. data/templates/root/layered_stack/cli/templates/root/layered_stack/rails/lib/layered_stack_rails.rb +26 -0
  123. data/templates/root/layered_stack/rails/LICENSE.md +21 -0
  124. data/templates/root/layered_stack/rails/bin/layered_stack-rails +3 -0
  125. data/templates/root/layered_stack/rails/layered_stack-rails.gemspec +29 -0
  126. data/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/scaffold_generator.rb +89 -0
  127. data/templates/root/layered_stack/rails/lib/generators/layered_stack_rails/templates/active_record/model/model.erb +9 -0
  128. data/templates/root/layered_stack/rails/lib/layered_stack_rails/example.rb +97 -0
  129. data/templates/root/layered_stack/rails/lib/layered_stack_rails/generate.rb +34 -0
  130. data/templates/root/layered_stack/rails/lib/layered_stack_rails/generate_new.rb +34 -0
  131. data/templates/root/layered_stack/rails/lib/layered_stack_rails/version.rb +5 -0
  132. data/templates/root/layered_stack/rails/lib/layered_stack_rails.rb +26 -0
  133. data/templates/root/layered_stack/rails/rails/LICENSE.md +21 -0
  134. data/templates/root/layered_stack/rails/rails/bin/layered_stack-rails +3 -0
  135. data/templates/root/layered_stack/rails/rails/layered_stack-rails.gemspec +29 -0
  136. data/templates/root/layered_stack/rails/rails/lib/generators/layered_stack_rails/scaffold_generator.rb +89 -0
  137. data/templates/root/layered_stack/rails/rails/lib/generators/layered_stack_rails/templates/active_record/model/model.erb +9 -0
  138. data/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/example.rb +97 -0
  139. data/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/generate.rb +34 -0
  140. data/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/generate_new.rb +34 -0
  141. data/templates/root/layered_stack/rails/rails/lib/layered_stack_rails/version.rb +5 -0
  142. data/templates/root/layered_stack/rails/rails/lib/layered_stack_rails.rb +26 -0
  143. metadata +152 -16
  144. /data/{assets → templates/frontend}/images/logo_dark.svg +0 -0
  145. /data/{assets → templates/frontend}/images/logo_light.svg +0 -0
  146. /data/{assets → templates/frontend}/layout.js +0 -0
  147. /data/{assets → templates/frontend}/page.js +0 -0
  148. /data/{assets → templates/frontend}/tailwind.config.js +0 -0
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'thor'
5
+ require 'logger'
6
+
7
+ module LayeredStack
8
+ module Root
9
+ class Create < Thor
10
+ def self.execute(arg)
11
+ new.execute(arg)
12
+ end
13
+
14
+ no_commands do
15
+ def execute(arg)
16
+ logger.info("> layered_stack/create")
17
+
18
+ # Check if the folder exists
19
+ return if check_folder_exists?(arg)
20
+
21
+ # Create the folder
22
+ logger.info("Creating directory: #{arg}")
23
+ FileUtils.mkdir_p(arg)
24
+ logger.info("Directory created: #{arg}")
25
+
26
+ # Copy the templates
27
+ copy_template(arg)
28
+
29
+ # Rename the devcontainer directory to .devcontainer
30
+ rename_devcontainer(arg)
31
+
32
+ # Open the folder in VS Code
33
+ run_command("code #{arg}", "Opening #{arg} in VS Code")
34
+ end
35
+
36
+ private
37
+
38
+ def logger
39
+ @logger ||= Logger.new(STDOUT)
40
+ end
41
+
42
+ def run_command(command, message)
43
+ logger.info(message)
44
+ system(command)
45
+ end
46
+
47
+ def check_folder_exists?(folder)
48
+ if File.directory?(folder)
49
+ logger.info("Directory exists: #{folder}")
50
+ true
51
+ else
52
+ logger.info("Directory does not exist: #{folder}")
53
+ false
54
+ end
55
+ end
56
+
57
+ def copy_template(destination)
58
+ source = File.expand_path('../../../../templates/root', __FILE__)
59
+ logger.info("Copying templates from #{source} to #{destination}")
60
+ FileUtils.cp_r("#{source}/.", destination)
61
+ logger.info("Templates copied to #{destination}")
62
+ end
63
+
64
+
65
+ def rename_devcontainer(folder)
66
+ devcontainer_path = File.join(folder, 'devcontainer')
67
+ new_devcontainer_path = File.join(folder, '.devcontainer')
68
+
69
+ if File.directory?(devcontainer_path)
70
+ logger.info("Renaming #{devcontainer_path} to #{new_devcontainer_path}")
71
+ FileUtils.mv(devcontainer_path, new_devcontainer_path)
72
+ logger.info("Renamed to #{new_devcontainer_path}")
73
+ else
74
+ logger.info("No devcontainer directory to rename")
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LayeredStack
4
+ VERSION = '0.0.6'
5
+ end
@@ -0,0 +1,63 @@
1
+ require 'thor'
2
+
3
+ # Require all .rb files in the layered_stack folder recursively
4
+ Dir[File.join(__dir__, 'layered_stack/**/*.rb')].each { |file| require_relative file }
5
+
6
+ module LayeredStack
7
+ class Cli < Thor
8
+ # This is a Thor configuration that will exit the program if a command fails
9
+ def self.exit_on_failure?
10
+ true
11
+ end
12
+
13
+ # Create a new layered stack
14
+ desc "create", "Create a new layered stack"
15
+ def create(arg)
16
+ LayeredStack::Root::Create.execute(arg)
17
+ end
18
+
19
+ # Frontend commands
20
+ class Frontend < Thor
21
+ namespace :frontend
22
+
23
+ desc "create", "Create"
24
+ def create
25
+ LayeredStack::Frontend::Create.execute
26
+ end
27
+
28
+ desc "start", "Start"
29
+ def start
30
+ LayeredStack::Frontend::Start.execute
31
+ end
32
+
33
+ desc "create_and_start", "Create and start"
34
+ def create_and_start
35
+ create
36
+ start
37
+ end
38
+ end
39
+ register(Frontend, 'frontend', 'frontend [COMMAND]', 'Commands for the frontend')
40
+
41
+ # Backend commands
42
+ class Backend < Thor
43
+ namespace :backend
44
+
45
+ desc "create", "Create"
46
+ def create
47
+ LayeredStack::Backend::Create.execute
48
+ end
49
+
50
+ desc "start", "Start"
51
+ def start
52
+ LayeredStack::Backend::Start.execute
53
+ end
54
+
55
+ desc "create_and_start", "Create and start"
56
+ def create_and_start
57
+ create
58
+ start
59
+ end
60
+ end
61
+ register(Backend, 'backend', 'backend [COMMAND]', 'Commands for the backend')
62
+ end
63
+ end
@@ -0,0 +1,48 @@
1
+ gem "jbuilder", "~> 2.12.0"
2
+ gem "rack-cors", "~> 2.0.2"
3
+
4
+ # TODO: Switch this out depending on the environment
5
+ gem "layered_stack-rails", path: "../layered_stack/rails", groups: [:development, :test]
6
+ # gem "layered_stack", "~> 0.0.6", groups: [:development, :test]
7
+
8
+ after_bundle do
9
+ # rails_command "db:create"
10
+ # rails_command "db:migrate"
11
+
12
+ # Remove the line "allow_browser versions: :modern" in backend/app/controllers/application_controller.rb
13
+ gsub_file 'app/controllers/application_controller.rb', /^(\s*allow_browser versions: :modern)/, ''
14
+
15
+ # Create the cors.rb initializer with the rack-cors configuration
16
+ create_file 'config/initializers/cors.rb', <<-RUBY
17
+ Rails.application.config.middleware.insert_before 0, Rack::Cors do
18
+ allow do
19
+ origins '*'
20
+ resource '*',
21
+ headers: :any,
22
+ methods: [:get, :post, :put, :patch, :delete, :options, :head]
23
+ end
24
+ end
25
+ RUBY
26
+
27
+ # Create the example API controller file
28
+ create_file "app/controllers/api/v1/examples_controller.rb", <<-TEXT
29
+ module Api
30
+ module V1
31
+ class ExamplesController < ApplicationController
32
+ def index
33
+ render json: { message: "Hello from Rails #{Rails.version}" }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ TEXT
39
+
40
+ # Create the example API route
41
+ route <<-TEXT
42
+ namespace :api do
43
+ namespace :v1 do
44
+ resources 'examples', only: [:index]
45
+ end
46
+ end
47
+ TEXT
48
+ end
@@ -0,0 +1,29 @@
1
+ <svg width="189" height="34" viewBox="0 0 189 34" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <mask id="mask0_5_28" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="189" height="34">
3
+ <path d="M188.7 0H0V34H188.7V0Z" fill="white"/>
4
+ </mask>
5
+ <g mask="url(#mask0_5_28)">
6
+ <mask id="mask1_5_28" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="34" height="34">
7
+ <path d="M0 0.0177002H33.9646V33.9823H0V0.0177002Z" fill="white"/>
8
+ </mask>
9
+ <g mask="url(#mask1_5_28)">
10
+ <path d="M0 0.0177002H33.9646V33.9823H0V0.0177002Z" stroke="#F3F6FA" stroke-width="1.998"/>
11
+ </g>
12
+ <path d="M11.0079 13.148H11.5155C11.6159 13.148 11.669 13.2011 11.669 13.3015V19.5938H15.801C15.8393 19.5938 15.8718 19.6116 15.8954 19.6411C15.9249 19.6735 15.9426 19.7089 15.9426 19.7473V20.2431C15.9426 20.3464 15.8954 20.3966 15.801 20.3966H11.0079C10.9754 20.3966 10.943 20.3848 10.9135 20.3612C10.881 20.3317 10.8662 20.2904 10.8662 20.2431V13.3015C10.8662 13.2543 10.881 13.2188 10.9135 13.1952C10.943 13.1657 10.9754 13.148 11.0079 13.148Z" fill="white"/>
13
+ <path d="M17.9323 18.8501V18.3661C17.9323 18.3366 17.9471 18.3041 17.9795 18.2716C18.0179 18.2421 18.0533 18.2244 18.0858 18.2244H18.5934C18.6318 18.2244 18.6643 18.2421 18.6879 18.2716C18.7174 18.3041 18.7351 18.3366 18.7351 18.3661V18.8501C18.7351 19.0567 18.8059 19.2338 18.9476 19.3813C19.0952 19.523 19.2723 19.5938 19.4789 19.5938H21.84C22.0436 19.5938 22.2177 19.523 22.3594 19.3813C22.5011 19.2338 22.5719 19.0567 22.5719 18.8501V17.9175C22.5719 17.7138 22.5011 17.5397 22.3594 17.398C22.2177 17.2504 22.0436 17.1737 21.84 17.1737H19.4789C19.2664 17.1737 19.0657 17.1353 18.8768 17.0556C18.6938 16.9701 18.5344 16.8609 18.3927 16.7251C18.2511 16.5923 18.136 16.43 18.0504 16.2411C17.9707 16.0463 17.9323 15.8397 17.9323 15.6272V14.6945C17.9323 14.482 17.9707 14.2813 18.0504 14.0925C18.136 13.9036 18.2511 13.7442 18.3927 13.6084C18.5344 13.4668 18.6938 13.3576 18.8768 13.2779C19.0657 13.1923 19.2664 13.148 19.4789 13.148H21.84C22.0525 13.148 22.2473 13.1923 22.4302 13.2779C22.6191 13.3576 22.7844 13.4668 22.9261 13.6084C23.0677 13.7442 23.1769 13.9036 23.2566 14.0925C23.3334 14.2813 23.3747 14.482 23.3747 14.6945V15.1786C23.3747 15.273 23.3275 15.3202 23.233 15.3202H22.7254C22.6221 15.3202 22.5719 15.273 22.5719 15.1786V14.6945C22.5719 14.4909 22.5011 14.3168 22.3594 14.1751C22.2177 14.0275 22.0436 13.9508 21.84 13.9508H19.4789C19.2723 13.9508 19.0952 14.0275 18.9476 14.1751C18.8059 14.3168 18.7351 14.4909 18.7351 14.6945V15.6272C18.7351 15.8338 18.8059 16.0109 18.9476 16.1584C19.0952 16.3001 19.2723 16.3709 19.4789 16.3709H21.84C22.0525 16.3709 22.2473 16.4152 22.4302 16.5008C22.6191 16.5805 22.7844 16.6897 22.9261 16.8313C23.0677 16.9671 23.1769 17.1265 23.2566 17.3154C23.3334 17.5043 23.3747 17.705 23.3747 17.9175V18.8501C23.3747 19.0626 23.3334 19.2692 23.2566 19.464C23.1769 19.6529 23.0677 19.8152 22.9261 19.948C22.7844 20.0838 22.6191 20.193 22.4302 20.2786C22.2473 20.3583 22.0525 20.3966 21.84 20.3966H19.4789C19.2664 20.3966 19.0657 20.3583 18.8768 20.2786C18.6938 20.193 18.5344 20.0838 18.3927 19.948C18.2511 19.8152 18.136 19.6529 18.0504 19.464C17.9707 19.2692 17.9323 19.0626 17.9323 18.8501Z" fill="white"/>
14
+ <path d="M47.7713 11.7477H48.4914C48.6331 11.7477 48.7039 11.8186 48.7039 11.9602V20.9561H54.6067C54.6598 20.9561 54.7071 20.9797 54.7484 21.0269C54.7956 21.0682 54.8192 21.1154 54.8192 21.1686V21.8887C54.8192 22.0304 54.7484 22.1012 54.6067 22.1012H47.7713C47.7152 22.1012 47.6651 22.0835 47.6178 22.0422C47.5765 22.0038 47.5588 21.9536 47.5588 21.8887V11.9602C47.5588 11.9071 47.5765 11.8599 47.6178 11.8186C47.6651 11.7714 47.7152 11.7477 47.7713 11.7477Z" fill="#F3F6FA"/>
15
+ <path d="M63.0244 11.7477C63.0864 11.7477 63.1455 11.7714 63.2015 11.8186C63.2547 11.8599 63.2901 11.9012 63.3078 11.9484L65.4092 17.2019C65.4239 17.2491 65.4387 17.3141 65.4564 17.3908C65.4712 17.4705 65.48 17.5413 65.48 17.6033V21.8887C65.48 22.0304 65.4092 22.1012 65.2675 22.1012H64.5592C64.4175 22.1012 64.3467 22.0304 64.3467 21.8887V19.1026H58.8689V21.8887C58.8689 22.0304 58.801 22.1012 58.6682 22.1012H57.9363C57.7946 22.1012 57.7238 22.0304 57.7238 21.8887V17.6033C57.7238 17.5413 57.7297 17.4705 57.7474 17.3908C57.7621 17.3141 57.7828 17.2491 57.8064 17.2019L59.896 11.9484C59.9196 11.9012 59.958 11.8599 60.014 11.8186C60.076 11.7714 60.135 11.7477 60.1911 11.7477H63.0244ZM64.3467 17.9693V17.6033L62.4696 12.8929H60.7578L58.8689 17.6033V17.9693H64.3467Z" fill="#F3F6FA"/>
16
+ <path d="M68.4554 14.7109C68.4141 14.6578 68.3786 14.5988 68.3491 14.5339C68.3167 14.4719 68.3019 14.4099 68.3019 14.345V11.9602C68.3019 11.913 68.3255 11.8658 68.3727 11.8186C68.42 11.7714 68.4672 11.7477 68.5144 11.7477H69.2464C69.2995 11.7477 69.3467 11.7714 69.388 11.8186C69.4264 11.8658 69.447 11.913 69.447 11.9602V13.8964C69.447 13.9436 69.4618 14.0026 69.4943 14.0734C69.5238 14.1443 69.5592 14.2033 69.6005 14.2505L72.1977 16.7887L74.7832 14.2505C74.8304 14.2033 74.8658 14.1443 74.8894 14.0734C74.913 14.0026 74.9248 13.9436 74.9248 13.8964V11.9602C74.9248 11.913 74.9425 11.8658 74.9839 11.8186C75.0311 11.7714 75.0813 11.7477 75.1373 11.7477H75.8693C75.9224 11.7477 75.9696 11.7714 76.0109 11.8186C76.0493 11.8658 76.07 11.913 76.07 11.9602V14.345C76.07 14.4099 76.0523 14.4719 76.0227 14.5339C75.9991 14.5988 75.9667 14.6578 75.9283 14.7109L72.7762 17.8512V21.8887C72.7762 21.9536 72.7526 22.0038 72.7054 22.0422C72.6582 22.0835 72.6109 22.1012 72.5637 22.1012H71.8318C71.6901 22.1012 71.6193 22.0304 71.6193 21.8887V17.8512L68.4554 14.7109Z" fill="#F3F6FA"/>
17
+ <path d="M79.1129 21.8887V11.9602C79.1129 11.8186 79.1837 11.7477 79.3254 11.7477H86.3497C86.4914 11.7477 86.5622 11.8186 86.5622 11.9602V12.6922C86.5622 12.8279 86.4914 12.8929 86.3497 12.8929H80.2462V16.3519H85.5351C85.5882 16.3519 85.6355 16.3755 85.6768 16.4227C85.724 16.47 85.7476 16.5172 85.7476 16.5644V17.2845C85.7476 17.3495 85.724 17.3997 85.6768 17.438C85.6355 17.4793 85.5882 17.497 85.5351 17.497H80.2462V20.9561H86.3497C86.4117 20.9561 86.4618 20.9797 86.5032 21.0269C86.5415 21.0682 86.5622 21.1154 86.5622 21.1686V21.8887C86.5622 22.0304 86.4914 22.1012 86.3497 22.1012H79.3254C79.1837 22.1012 79.1129 22.0304 79.1129 21.8887Z" fill="#F3F6FA"/>
18
+ <path d="M95.7676 21.9005L93.8079 17.497H90.5732V21.8887C90.5732 22.0304 90.5053 22.1012 90.3725 22.1012H89.6523C89.5166 22.1012 89.4516 22.0304 89.4516 21.8887V11.9602C89.4516 11.8186 89.5166 11.7477 89.6523 11.7477H95.0002C95.2983 11.7477 95.5817 11.8068 95.8502 11.9248C96.1159 12.0429 96.349 12.2052 96.5468 12.4089C96.7504 12.6066 96.9068 12.8398 97.019 13.1054C97.137 13.374 97.1961 13.6573 97.1961 13.9554V15.3012C97.1961 15.7911 97.0456 16.2309 96.7475 16.6234C96.4553 17.0101 96.0745 17.2727 95.6023 17.4144L95.0947 17.5561L97.019 21.9005C97.0485 21.9566 97.0544 22.0038 97.0308 22.0422C97.0072 22.0835 96.9629 22.1012 96.9009 22.1012H96.0745C96.0096 22.1012 95.9476 22.0835 95.8857 22.0422C95.8296 22.0038 95.7912 21.9566 95.7676 21.9005ZM90.5732 16.3519H95.0002C95.2895 16.3519 95.5374 16.2516 95.744 16.045C95.9476 15.8413 96.0509 15.5934 96.0509 15.3012V13.9554C96.0509 13.6661 95.9476 13.4182 95.744 13.2116C95.5374 12.9991 95.2895 12.8929 95.0002 12.8929H90.5732V16.3519Z" fill="#F3F6FA"/>
19
+ <path d="M100.254 21.8887V11.9602C100.254 11.8186 100.325 11.7477 100.467 11.7477H107.491C107.633 11.7477 107.703 11.8186 107.703 11.9602V12.6922C107.703 12.8279 107.633 12.8929 107.491 12.8929H101.387V16.3519H106.676C106.729 16.3519 106.777 16.3755 106.818 16.4227C106.865 16.47 106.889 16.5172 106.889 16.5644V17.2845C106.889 17.3495 106.865 17.3997 106.818 17.438C106.777 17.4793 106.729 17.497 106.676 17.497H101.387V20.9561H107.491C107.553 20.9561 107.603 20.9797 107.644 21.0269C107.683 21.0682 107.703 21.1154 107.703 21.1686V21.8887C107.703 22.0304 107.633 22.1012 107.491 22.1012H100.467C100.325 22.1012 100.254 22.0304 100.254 21.8887Z" fill="#F3F6FA"/>
20
+ <path d="M110.569 21.8887V11.9602C110.569 11.913 110.593 11.8658 110.64 11.8186C110.687 11.7714 110.735 11.7477 110.782 11.7477H116.141C116.44 11.7477 116.723 11.8068 116.991 11.9248C117.257 12.0429 117.49 12.2052 117.688 12.4089C117.892 12.6066 118.048 12.8398 118.16 13.1054C118.278 13.374 118.337 13.6573 118.337 13.9554V19.8936C118.337 20.2005 118.278 20.4927 118.16 20.7672C118.048 21.0358 117.892 21.2689 117.688 21.4637C117.49 21.6615 117.257 21.8179 116.991 21.9359C116.723 22.0481 116.44 22.1012 116.141 22.1012H110.782C110.735 22.1012 110.687 22.0835 110.64 22.0422C110.593 22.0038 110.569 21.9536 110.569 21.8887ZM111.714 20.9561H116.141C116.431 20.9561 116.679 20.8557 116.885 20.6491C117.089 20.4366 117.192 20.1858 117.192 19.8936V13.9554C117.192 13.6661 117.089 13.4182 116.885 13.2116C116.679 12.9991 116.431 12.8929 116.141 12.8929H111.714V20.9561Z" fill="#F3F6FA"/>
21
+ <path d="M131.71 19.8936V19.2089C131.71 19.1557 131.734 19.1085 131.781 19.0672C131.828 19.02 131.876 18.9964 131.923 18.9964H132.655C132.708 18.9964 132.755 19.02 132.797 19.0672C132.835 19.1085 132.856 19.1557 132.856 19.2089V19.8936C132.856 20.1858 132.956 20.4366 133.163 20.6491C133.375 20.8557 133.626 20.9561 133.918 20.9561H137.283C137.572 20.9561 137.82 20.8557 138.026 20.6491C138.23 20.4366 138.333 20.1858 138.333 19.8936V18.5595C138.333 18.2703 138.23 18.0224 138.026 17.8158C137.82 17.6033 137.572 17.497 137.283 17.497H133.918C133.617 17.497 133.334 17.4439 133.068 17.3318C132.799 17.2137 132.563 17.0573 132.36 16.8595C132.162 16.6648 132.006 16.4316 131.888 16.163C131.769 15.8885 131.71 15.6023 131.71 15.3012V13.9554C131.71 13.6573 131.769 13.374 131.888 13.1054C132.006 12.8398 132.162 12.6066 132.36 12.4089C132.563 12.2052 132.799 12.0429 133.068 11.9248C133.334 11.8068 133.617 11.7477 133.918 11.7477H137.283C137.581 11.7477 137.864 11.8068 138.133 11.9248C138.398 12.0429 138.631 12.2052 138.829 12.4089C139.033 12.6066 139.189 12.8398 139.301 13.1054C139.419 13.374 139.478 13.6573 139.478 13.9554V14.6519C139.478 14.7936 139.411 14.8644 139.278 14.8644H138.546C138.404 14.8644 138.333 14.7936 138.333 14.6519V13.9554C138.333 13.6661 138.23 13.4182 138.026 13.2116C137.82 12.9991 137.572 12.8929 137.283 12.8929H133.918C133.626 12.8929 133.375 12.9991 133.163 13.2116C132.956 13.4182 132.856 13.6661 132.856 13.9554V15.3012C132.856 15.5934 132.956 15.8413 133.163 16.045C133.375 16.2516 133.626 16.3519 133.918 16.3519H137.283C137.581 16.3519 137.864 16.4109 138.133 16.529C138.398 16.6411 138.631 16.7976 138.829 17.0012C139.033 17.2078 139.189 17.4439 139.301 17.7095C139.419 17.9693 139.478 18.2526 139.478 18.5595V19.8936C139.478 20.2005 139.419 20.4927 139.301 20.7672C139.189 21.0358 139.033 21.2689 138.829 21.4637C138.631 21.6615 138.398 21.8179 138.133 21.9359C137.864 22.0481 137.581 22.1012 137.283 22.1012H133.918C133.617 22.1012 133.334 22.0481 133.068 21.9359C132.799 21.8179 132.563 21.6615 132.36 21.4637C132.162 21.2689 132.006 21.0358 131.888 20.7672C131.769 20.4927 131.71 20.2005 131.71 19.8936Z" fill="#F3F6FA"/>
22
+ <path d="M145.606 21.8887V12.8929H142.513C142.377 12.8929 142.312 12.8279 142.312 12.6922V11.9602C142.312 11.8186 142.377 11.7477 142.513 11.7477H149.856C149.989 11.7477 150.057 11.8186 150.057 11.9602V12.6922C150.057 12.8279 149.989 12.8929 149.856 12.8929H146.763V21.8887C146.763 21.9536 146.739 22.0038 146.692 22.0422C146.645 22.0835 146.598 22.1012 146.55 22.1012H145.818C145.677 22.1012 145.606 22.0304 145.606 21.8887Z" fill="#F3F6FA"/>
23
+ <path d="M158.167 11.7477C158.229 11.7477 158.288 11.7714 158.345 11.8186C158.398 11.8599 158.433 11.9012 158.451 11.9484L160.552 17.2019C160.567 17.2491 160.582 17.3141 160.599 17.3908C160.614 17.4705 160.623 17.5413 160.623 17.6033V21.8887C160.623 22.0304 160.552 22.1012 160.41 22.1012H159.702C159.56 22.1012 159.49 22.0304 159.49 21.8887V19.1026H154.012V21.8887C154.012 22.0304 153.944 22.1012 153.811 22.1012H153.079C152.938 22.1012 152.867 22.0304 152.867 21.8887V17.6033C152.867 17.5413 152.873 17.4705 152.89 17.3908C152.905 17.3141 152.926 17.2491 152.949 17.2019L155.039 11.9484C155.063 11.9012 155.101 11.8599 155.157 11.8186C155.219 11.7714 155.278 11.7477 155.334 11.7477H158.167ZM159.49 17.9693V17.6033L157.613 12.8929H155.901L154.012 17.6033V17.9693H159.49Z" fill="#F3F6FA"/>
24
+ <path d="M171.213 14.6519C171.213 14.7936 171.145 14.8644 171.012 14.8644H170.28C170.139 14.8644 170.068 14.7936 170.068 14.6519V13.9436C170.059 13.6543 169.953 13.4064 169.749 13.1998C169.551 12.9962 169.306 12.8929 169.017 12.8929H165.653C165.36 12.8929 165.109 12.9991 164.897 13.2116C164.69 13.4182 164.59 13.6661 164.59 13.9554V19.8936C164.59 20.1858 164.69 20.4366 164.897 20.6491C165.109 20.8557 165.36 20.9561 165.653 20.9561H169.017C169.306 20.9561 169.551 20.8587 169.749 20.6609C169.953 20.4661 170.059 20.2212 170.068 19.929V19.2089C170.068 19.1557 170.086 19.1085 170.127 19.0672C170.174 19.02 170.224 18.9964 170.28 18.9964H171.012C171.065 18.9964 171.113 19.02 171.154 19.0672C171.192 19.1085 171.213 19.1557 171.213 19.2089V19.929C171.213 20.23 171.154 20.5134 171.036 20.779C170.918 21.0387 170.758 21.2689 170.564 21.4637C170.366 21.6615 170.133 21.8179 169.867 21.9359C169.599 22.0481 169.315 22.1012 169.017 22.1012H165.653C165.351 22.1012 165.068 22.0481 164.803 21.9359C164.534 21.8179 164.301 21.6615 164.106 21.4637C163.908 21.2689 163.752 21.0358 163.634 20.7672C163.522 20.4927 163.468 20.2005 163.468 19.8936V13.9554C163.468 13.6573 163.522 13.374 163.634 13.1054C163.752 12.8398 163.908 12.6066 164.106 12.4089C164.301 12.2052 164.534 12.0429 164.803 11.9248C165.068 11.8068 165.351 11.7477 165.653 11.7477H169.017C169.315 11.7477 169.599 11.8068 169.867 11.9248C170.133 12.0429 170.366 12.2023 170.564 12.397C170.758 12.5948 170.918 12.8279 171.036 13.0936C171.154 13.3533 171.213 13.6366 171.213 13.9436V14.6519Z" fill="#F3F6FA"/>
25
+ <path d="M180.363 21.9241L177.872 17.497H175.263V21.8887C175.263 22.0304 175.192 22.1012 175.05 22.1012H174.33C174.274 22.1012 174.224 22.0835 174.177 22.0422C174.135 22.0038 174.117 21.9536 174.117 21.8887V11.9602C174.117 11.9071 174.135 11.8599 174.177 11.8186C174.224 11.7714 174.274 11.7477 174.33 11.7477H175.05C175.192 11.7477 175.263 11.8186 175.263 11.9602V16.3519H177.872L180.363 11.9366C180.392 11.8835 180.436 11.8392 180.492 11.8068C180.554 11.7684 180.616 11.7477 180.681 11.7477H181.567C181.629 11.7477 181.667 11.7684 181.685 11.8068C181.708 11.8392 181.703 11.8835 181.673 11.9366L178.875 16.9304L181.673 21.9241C181.744 22.0422 181.708 22.1012 181.567 22.1012H180.681C180.54 22.1012 180.433 22.0422 180.363 21.9241Z" fill="#F3F6FA"/>
26
+ <path d="M183.808 10.276H183.56V8.33985H182.876V8.11554H184.481V8.33985H183.808V10.276Z" fill="white"/>
27
+ <path d="M185.966 10.276L185.246 8.36346H185.234C185.24 8.40478 185.246 8.45495 185.246 8.51693C185.246 8.573 185.246 8.63498 185.246 8.70582C185.252 8.77075 185.258 8.83568 185.258 8.90651V10.276H185.021V8.11554H185.399L186.072 9.90998H186.084L186.781 8.11554H187.146V10.276H186.899V8.89471C186.899 8.83273 186.899 8.77075 186.899 8.70582C186.904 8.63498 186.91 8.573 186.91 8.51693C186.916 8.4638 186.922 8.41068 186.922 8.36346H186.91L186.178 10.276H185.966Z" fill="white"/>
28
+ </g>
29
+ </svg>
@@ -0,0 +1,29 @@
1
+ <svg width="189" height="34" viewBox="0 0 189 34" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <mask id="mask0_5_2" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="189" height="34">
3
+ <path d="M188.7 0H0V34H188.7V0Z" fill="white"/>
4
+ </mask>
5
+ <g mask="url(#mask0_5_2)">
6
+ <mask id="mask1_5_2" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="34" height="34">
7
+ <path d="M0 0.0177002H33.9646V33.9823H0V0.0177002Z" fill="white"/>
8
+ </mask>
9
+ <g mask="url(#mask1_5_2)">
10
+ <path d="M0 0.0177002H33.9646V33.9823H0V0.0177002Z" stroke="black" stroke-width="1.998"/>
11
+ </g>
12
+ <path d="M11.0079 13.148H11.5155C11.6159 13.148 11.669 13.2011 11.669 13.3015V19.5938H15.801C15.8393 19.5938 15.8718 19.6116 15.8954 19.6411C15.9249 19.6735 15.9426 19.7089 15.9426 19.7473V20.2431C15.9426 20.3464 15.8954 20.3966 15.801 20.3966H11.0079C10.9754 20.3966 10.943 20.3848 10.9135 20.3612C10.881 20.3317 10.8662 20.2904 10.8662 20.2431V13.3015C10.8662 13.2543 10.881 13.2188 10.9135 13.1952C10.943 13.1657 10.9754 13.148 11.0079 13.148Z" fill="black"/>
13
+ <path d="M17.9323 18.8501V18.3661C17.9323 18.3366 17.9471 18.3041 17.9795 18.2716C18.0179 18.2421 18.0533 18.2244 18.0858 18.2244H18.5934C18.6318 18.2244 18.6643 18.2421 18.6879 18.2716C18.7174 18.3041 18.7351 18.3366 18.7351 18.3661V18.8501C18.7351 19.0567 18.8059 19.2338 18.9476 19.3813C19.0952 19.523 19.2723 19.5938 19.4789 19.5938H21.84C22.0436 19.5938 22.2177 19.523 22.3594 19.3813C22.5011 19.2338 22.5719 19.0567 22.5719 18.8501V17.9175C22.5719 17.7138 22.5011 17.5397 22.3594 17.398C22.2177 17.2504 22.0436 17.1737 21.84 17.1737H19.4789C19.2664 17.1737 19.0657 17.1353 18.8768 17.0556C18.6938 16.9701 18.5344 16.8609 18.3927 16.7251C18.2511 16.5923 18.136 16.43 18.0504 16.2411C17.9707 16.0463 17.9323 15.8397 17.9323 15.6272V14.6945C17.9323 14.482 17.9707 14.2813 18.0504 14.0925C18.136 13.9036 18.2511 13.7442 18.3927 13.6084C18.5344 13.4668 18.6938 13.3576 18.8768 13.2779C19.0657 13.1923 19.2664 13.148 19.4789 13.148H21.84C22.0525 13.148 22.2473 13.1923 22.4302 13.2779C22.6191 13.3576 22.7844 13.4668 22.9261 13.6084C23.0677 13.7442 23.1769 13.9036 23.2566 14.0925C23.3334 14.2813 23.3747 14.482 23.3747 14.6945V15.1786C23.3747 15.273 23.3275 15.3202 23.233 15.3202H22.7254C22.6221 15.3202 22.5719 15.273 22.5719 15.1786V14.6945C22.5719 14.4909 22.5011 14.3168 22.3594 14.1751C22.2177 14.0275 22.0436 13.9508 21.84 13.9508H19.4789C19.2723 13.9508 19.0952 14.0275 18.9476 14.1751C18.8059 14.3168 18.7351 14.4909 18.7351 14.6945V15.6272C18.7351 15.8338 18.8059 16.0109 18.9476 16.1584C19.0952 16.3001 19.2723 16.3709 19.4789 16.3709H21.84C22.0525 16.3709 22.2473 16.4152 22.4302 16.5008C22.6191 16.5805 22.7844 16.6897 22.9261 16.8313C23.0677 16.9671 23.1769 17.1265 23.2566 17.3154C23.3334 17.5043 23.3747 17.705 23.3747 17.9175V18.8501C23.3747 19.0626 23.3334 19.2692 23.2566 19.464C23.1769 19.6529 23.0677 19.8152 22.9261 19.948C22.7844 20.0838 22.6191 20.193 22.4302 20.2786C22.2473 20.3583 22.0525 20.3966 21.84 20.3966H19.4789C19.2664 20.3966 19.0657 20.3583 18.8768 20.2786C18.6938 20.193 18.5344 20.0838 18.3927 19.948C18.2511 19.8152 18.136 19.6529 18.0504 19.464C17.9707 19.2692 17.9323 19.0626 17.9323 18.8501Z" fill="black"/>
14
+ <path d="M47.7713 11.7477H48.4914C48.6331 11.7477 48.7039 11.8186 48.7039 11.9602V20.9561H54.6067C54.6598 20.9561 54.7071 20.9797 54.7484 21.0269C54.7956 21.0682 54.8192 21.1154 54.8192 21.1686V21.8887C54.8192 22.0304 54.7484 22.1012 54.6067 22.1012H47.7713C47.7152 22.1012 47.6651 22.0835 47.6178 22.0422C47.5765 22.0038 47.5588 21.9536 47.5588 21.8887V11.9602C47.5588 11.9071 47.5765 11.8599 47.6178 11.8186C47.6651 11.7714 47.7152 11.7477 47.7713 11.7477Z" fill="black"/>
15
+ <path d="M63.0244 11.7477C63.0864 11.7477 63.1455 11.7714 63.2015 11.8186C63.2547 11.8599 63.2901 11.9012 63.3078 11.9484L65.4092 17.2019C65.4239 17.2491 65.4387 17.3141 65.4564 17.3908C65.4712 17.4705 65.48 17.5413 65.48 17.6033V21.8887C65.48 22.0304 65.4092 22.1012 65.2675 22.1012H64.5592C64.4175 22.1012 64.3467 22.0304 64.3467 21.8887V19.1026H58.8689V21.8887C58.8689 22.0304 58.801 22.1012 58.6682 22.1012H57.9363C57.7946 22.1012 57.7238 22.0304 57.7238 21.8887V17.6033C57.7238 17.5413 57.7297 17.4705 57.7474 17.3908C57.7621 17.3141 57.7828 17.2491 57.8064 17.2019L59.896 11.9484C59.9196 11.9012 59.958 11.8599 60.014 11.8186C60.076 11.7714 60.135 11.7477 60.1911 11.7477H63.0244ZM64.3467 17.9693V17.6033L62.4696 12.8929H60.7578L58.8689 17.6033V17.9693H64.3467Z" fill="black"/>
16
+ <path d="M68.4554 14.7109C68.4141 14.6578 68.3786 14.5988 68.3491 14.5339C68.3167 14.4719 68.3019 14.4099 68.3019 14.345V11.9602C68.3019 11.913 68.3255 11.8658 68.3727 11.8186C68.42 11.7714 68.4672 11.7477 68.5144 11.7477H69.2464C69.2995 11.7477 69.3467 11.7714 69.388 11.8186C69.4264 11.8658 69.447 11.913 69.447 11.9602V13.8964C69.447 13.9436 69.4618 14.0026 69.4943 14.0734C69.5238 14.1443 69.5592 14.2033 69.6005 14.2505L72.1977 16.7887L74.7832 14.2505C74.8304 14.2033 74.8658 14.1443 74.8894 14.0734C74.913 14.0026 74.9248 13.9436 74.9248 13.8964V11.9602C74.9248 11.913 74.9425 11.8658 74.9839 11.8186C75.0311 11.7714 75.0813 11.7477 75.1373 11.7477H75.8693C75.9224 11.7477 75.9696 11.7714 76.0109 11.8186C76.0493 11.8658 76.07 11.913 76.07 11.9602V14.345C76.07 14.4099 76.0523 14.4719 76.0227 14.5339C75.9991 14.5988 75.9667 14.6578 75.9283 14.7109L72.7762 17.8512V21.8887C72.7762 21.9536 72.7526 22.0038 72.7054 22.0422C72.6582 22.0835 72.6109 22.1012 72.5637 22.1012H71.8318C71.6901 22.1012 71.6193 22.0304 71.6193 21.8887V17.8512L68.4554 14.7109Z" fill="black"/>
17
+ <path d="M79.1129 21.8887V11.9602C79.1129 11.8186 79.1837 11.7477 79.3254 11.7477H86.3497C86.4914 11.7477 86.5622 11.8186 86.5622 11.9602V12.6922C86.5622 12.8279 86.4914 12.8929 86.3497 12.8929H80.2462V16.3519H85.5351C85.5882 16.3519 85.6355 16.3755 85.6768 16.4227C85.724 16.47 85.7476 16.5172 85.7476 16.5644V17.2845C85.7476 17.3495 85.724 17.3997 85.6768 17.438C85.6355 17.4793 85.5882 17.497 85.5351 17.497H80.2462V20.9561H86.3497C86.4117 20.9561 86.4618 20.9797 86.5032 21.0269C86.5415 21.0682 86.5622 21.1154 86.5622 21.1686V21.8887C86.5622 22.0304 86.4914 22.1012 86.3497 22.1012H79.3254C79.1837 22.1012 79.1129 22.0304 79.1129 21.8887Z" fill="black"/>
18
+ <path d="M95.7676 21.9005L93.8079 17.497H90.5732V21.8887C90.5732 22.0304 90.5053 22.1012 90.3725 22.1012H89.6523C89.5166 22.1012 89.4516 22.0304 89.4516 21.8887V11.9602C89.4516 11.8186 89.5166 11.7477 89.6523 11.7477H95.0002C95.2983 11.7477 95.5817 11.8068 95.8502 11.9248C96.1159 12.0429 96.349 12.2052 96.5468 12.4089C96.7504 12.6066 96.9068 12.8398 97.019 13.1054C97.137 13.374 97.1961 13.6573 97.1961 13.9554V15.3012C97.1961 15.7911 97.0456 16.2309 96.7475 16.6234C96.4553 17.0101 96.0745 17.2727 95.6023 17.4144L95.0947 17.5561L97.019 21.9005C97.0485 21.9566 97.0544 22.0038 97.0308 22.0422C97.0072 22.0835 96.9629 22.1012 96.9009 22.1012H96.0745C96.0096 22.1012 95.9476 22.0835 95.8857 22.0422C95.8296 22.0038 95.7912 21.9566 95.7676 21.9005ZM90.5732 16.3519H95.0002C95.2895 16.3519 95.5374 16.2516 95.744 16.045C95.9476 15.8413 96.0509 15.5934 96.0509 15.3012V13.9554C96.0509 13.6661 95.9476 13.4182 95.744 13.2116C95.5374 12.9991 95.2895 12.8929 95.0002 12.8929H90.5732V16.3519Z" fill="black"/>
19
+ <path d="M100.254 21.8887V11.9602C100.254 11.8186 100.325 11.7477 100.467 11.7477H107.491C107.633 11.7477 107.703 11.8186 107.703 11.9602V12.6922C107.703 12.8279 107.633 12.8929 107.491 12.8929H101.387V16.3519H106.676C106.729 16.3519 106.777 16.3755 106.818 16.4227C106.865 16.47 106.889 16.5172 106.889 16.5644V17.2845C106.889 17.3495 106.865 17.3997 106.818 17.438C106.777 17.4793 106.729 17.497 106.676 17.497H101.387V20.9561H107.491C107.553 20.9561 107.603 20.9797 107.644 21.0269C107.683 21.0682 107.703 21.1154 107.703 21.1686V21.8887C107.703 22.0304 107.633 22.1012 107.491 22.1012H100.467C100.325 22.1012 100.254 22.0304 100.254 21.8887Z" fill="black"/>
20
+ <path d="M110.569 21.8887V11.9602C110.569 11.913 110.593 11.8658 110.64 11.8186C110.687 11.7714 110.734 11.7477 110.782 11.7477H116.141C116.44 11.7477 116.723 11.8068 116.991 11.9248C117.257 12.0429 117.49 12.2052 117.688 12.4089C117.892 12.6066 118.048 12.8398 118.16 13.1054C118.278 13.374 118.337 13.6573 118.337 13.9554V19.8936C118.337 20.2005 118.278 20.4927 118.16 20.7672C118.048 21.0358 117.892 21.2689 117.688 21.4637C117.49 21.6615 117.257 21.8179 116.991 21.9359C116.723 22.0481 116.44 22.1012 116.141 22.1012H110.782C110.734 22.1012 110.687 22.0835 110.64 22.0422C110.593 22.0038 110.569 21.9536 110.569 21.8887ZM111.714 20.9561H116.141C116.431 20.9561 116.679 20.8557 116.885 20.6491C117.089 20.4366 117.192 20.1858 117.192 19.8936V13.9554C117.192 13.6661 117.089 13.4182 116.885 13.2116C116.679 12.9991 116.431 12.8929 116.141 12.8929H111.714V20.9561Z" fill="black"/>
21
+ <path d="M131.71 19.8936V19.2089C131.71 19.1557 131.734 19.1085 131.781 19.0672C131.829 19.02 131.876 18.9964 131.923 18.9964H132.655C132.708 18.9964 132.755 19.02 132.797 19.0672C132.835 19.1085 132.856 19.1557 132.856 19.2089V19.8936C132.856 20.1858 132.956 20.4366 133.163 20.6491C133.375 20.8557 133.626 20.9561 133.918 20.9561H137.283C137.572 20.9561 137.82 20.8557 138.026 20.6491C138.23 20.4366 138.333 20.1858 138.333 19.8936V18.5595C138.333 18.2703 138.23 18.0224 138.026 17.8158C137.82 17.6033 137.572 17.497 137.283 17.497H133.918C133.617 17.497 133.334 17.4439 133.068 17.3318C132.8 17.2137 132.563 17.0573 132.36 16.8595C132.162 16.6648 132.006 16.4316 131.888 16.163C131.769 15.8885 131.71 15.6023 131.71 15.3012V13.9554C131.71 13.6573 131.769 13.374 131.888 13.1054C132.006 12.8398 132.162 12.6066 132.36 12.4089C132.563 12.2052 132.8 12.0429 133.068 11.9248C133.334 11.8068 133.617 11.7477 133.918 11.7477H137.283C137.581 11.7477 137.864 11.8068 138.133 11.9248C138.398 12.0429 138.631 12.2052 138.829 12.4089C139.033 12.6066 139.189 12.8398 139.301 13.1054C139.419 13.374 139.479 13.6573 139.479 13.9554V14.6519C139.479 14.7936 139.411 14.8644 139.278 14.8644H138.546C138.404 14.8644 138.333 14.7936 138.333 14.6519V13.9554C138.333 13.6661 138.23 13.4182 138.026 13.2116C137.82 12.9991 137.572 12.8929 137.283 12.8929H133.918C133.626 12.8929 133.375 12.9991 133.163 13.2116C132.956 13.4182 132.856 13.6661 132.856 13.9554V15.3012C132.856 15.5934 132.956 15.8413 133.163 16.045C133.375 16.2516 133.626 16.3519 133.918 16.3519H137.283C137.581 16.3519 137.864 16.4109 138.133 16.529C138.398 16.6411 138.631 16.7976 138.829 17.0012C139.033 17.2078 139.189 17.4439 139.301 17.7095C139.419 17.9693 139.479 18.2526 139.479 18.5595V19.8936C139.479 20.2005 139.419 20.4927 139.301 20.7672C139.189 21.0358 139.033 21.2689 138.829 21.4637C138.631 21.6615 138.398 21.8179 138.133 21.9359C137.864 22.0481 137.581 22.1012 137.283 22.1012H133.918C133.617 22.1012 133.334 22.0481 133.068 21.9359C132.8 21.8179 132.563 21.6615 132.36 21.4637C132.162 21.2689 132.006 21.0358 131.888 20.7672C131.769 20.4927 131.71 20.2005 131.71 19.8936Z" fill="black"/>
22
+ <path d="M145.606 21.8887V12.8929H142.513C142.377 12.8929 142.312 12.8279 142.312 12.6922V11.9602C142.312 11.8186 142.377 11.7477 142.513 11.7477H149.856C149.989 11.7477 150.057 11.8186 150.057 11.9602V12.6922C150.057 12.8279 149.989 12.8929 149.856 12.8929H146.763V21.8887C146.763 21.9536 146.739 22.0038 146.692 22.0422C146.645 22.0835 146.598 22.1012 146.55 22.1012H145.818C145.677 22.1012 145.606 22.0304 145.606 21.8887Z" fill="black"/>
23
+ <path d="M158.167 11.7477C158.229 11.7477 158.288 11.7714 158.345 11.8186C158.398 11.8599 158.433 11.9012 158.451 11.9484L160.552 17.2019C160.567 17.2491 160.582 17.3141 160.599 17.3908C160.614 17.4705 160.623 17.5413 160.623 17.6033V21.8887C160.623 22.0304 160.552 22.1012 160.41 22.1012H159.702C159.56 22.1012 159.49 22.0304 159.49 21.8887V19.1026H154.012V21.8887C154.012 22.0304 153.944 22.1012 153.811 22.1012H153.079C152.938 22.1012 152.867 22.0304 152.867 21.8887V17.6033C152.867 17.5413 152.873 17.4705 152.89 17.3908C152.905 17.3141 152.926 17.2491 152.949 17.2019L155.039 11.9484C155.063 11.9012 155.101 11.8599 155.157 11.8186C155.219 11.7714 155.278 11.7477 155.334 11.7477H158.167ZM159.49 17.9693V17.6033L157.613 12.8929H155.901L154.012 17.6033V17.9693H159.49Z" fill="black"/>
24
+ <path d="M171.213 14.6519C171.213 14.7936 171.145 14.8644 171.012 14.8644H170.28C170.139 14.8644 170.068 14.7936 170.068 14.6519V13.9436C170.059 13.6543 169.953 13.4064 169.749 13.1998C169.551 12.9962 169.306 12.8929 169.017 12.8929H165.653C165.36 12.8929 165.109 12.9991 164.897 13.2116C164.69 13.4182 164.59 13.6661 164.59 13.9554V19.8936C164.59 20.1858 164.69 20.4366 164.897 20.6491C165.109 20.8557 165.36 20.9561 165.653 20.9561H169.017C169.306 20.9561 169.551 20.8587 169.749 20.6609C169.953 20.4661 170.059 20.2212 170.068 19.929V19.2089C170.068 19.1557 170.086 19.1085 170.127 19.0672C170.174 19.02 170.224 18.9964 170.28 18.9964H171.012C171.065 18.9964 171.113 19.02 171.154 19.0672C171.192 19.1085 171.213 19.1557 171.213 19.2089V19.929C171.213 20.23 171.154 20.5134 171.036 20.779C170.918 21.0387 170.758 21.2689 170.564 21.4637C170.366 21.6615 170.133 21.8179 169.867 21.9359C169.599 22.0481 169.315 22.1012 169.017 22.1012H165.653C165.351 22.1012 165.068 22.0481 164.803 21.9359C164.534 21.8179 164.301 21.6615 164.106 21.4637C163.908 21.2689 163.752 21.0358 163.634 20.7672C163.522 20.4927 163.469 20.2005 163.469 19.8936V13.9554C163.469 13.6573 163.522 13.374 163.634 13.1054C163.752 12.8398 163.908 12.6066 164.106 12.4089C164.301 12.2052 164.534 12.0429 164.803 11.9248C165.068 11.8068 165.351 11.7477 165.653 11.7477H169.017C169.315 11.7477 169.599 11.8068 169.867 11.9248C170.133 12.0429 170.366 12.2023 170.564 12.397C170.758 12.5948 170.918 12.8279 171.036 13.0936C171.154 13.3533 171.213 13.6366 171.213 13.9436V14.6519Z" fill="black"/>
25
+ <path d="M180.363 21.9241L177.872 17.497H175.263V21.8887C175.263 22.0304 175.192 22.1012 175.05 22.1012H174.33C174.274 22.1012 174.224 22.0835 174.177 22.0422C174.135 22.0038 174.117 21.9536 174.117 21.8887V11.9602C174.117 11.9071 174.135 11.8599 174.177 11.8186C174.224 11.7714 174.274 11.7477 174.33 11.7477H175.05C175.192 11.7477 175.263 11.8186 175.263 11.9602V16.3519H177.872L180.363 11.9366C180.392 11.8835 180.436 11.8392 180.492 11.8068C180.554 11.7684 180.616 11.7477 180.681 11.7477H181.567C181.629 11.7477 181.667 11.7684 181.685 11.8068C181.708 11.8392 181.703 11.8835 181.673 11.9366L178.875 16.9304L181.673 21.9241C181.744 22.0422 181.708 22.1012 181.567 22.1012H180.681C180.54 22.1012 180.433 22.0422 180.363 21.9241Z" fill="black"/>
26
+ <path d="M183.808 10.276H183.56V8.33985H182.876V8.11554H184.481V8.33985H183.808V10.276Z" fill="black"/>
27
+ <path d="M185.966 10.276L185.246 8.36346H185.234C185.24 8.40478 185.246 8.45495 185.246 8.51693C185.246 8.573 185.246 8.63498 185.246 8.70582C185.252 8.77075 185.258 8.83568 185.258 8.90651V10.276H185.021V8.11554H185.399L186.072 9.90998H186.084L186.781 8.11554H187.146V10.276H186.899V8.89471C186.899 8.83273 186.899 8.77075 186.899 8.70582C186.904 8.63498 186.91 8.573 186.91 8.51693C186.916 8.4638 186.922 8.41068 186.922 8.36346H186.91L186.178 10.276H185.966Z" fill="black"/>
28
+ </g>
29
+ </svg>
@@ -0,0 +1,21 @@
1
+ import { ThemeProvider } from 'next-themes'
2
+
3
+ import '@layeredstack/ui/styles/ls_ui.css'
4
+
5
+ export const metadata = {
6
+ initials: 'LS',
7
+ title: 'Layered Stack - UI (Example)',
8
+ description: 'Example of the Layered Stack - UI interface components',
9
+ }
10
+
11
+ export default function RootLayout({ children }) {
12
+ return (
13
+ <html lang="en" suppressHydrationWarning>
14
+ <body>
15
+ <ThemeProvider attribute='class'>
16
+ {children}
17
+ </ThemeProvider>
18
+ </body>
19
+ </html>
20
+ )
21
+ }
@@ -0,0 +1,35 @@
1
+ // Next
2
+ import { useTheme } from 'next-themes'
3
+
4
+ // Packages
5
+ import { Bars3Icon } from '@heroicons/react/24/solid'
6
+ import { Page } from '@layeredstack/ui'
7
+
8
+ // Local
9
+ import { metadata } from './layout.js'
10
+
11
+ // Logo
12
+ import logoDark from './logo_dark.svg'
13
+ import logoLight from './logo_light.svg'
14
+
15
+ // Home
16
+ export default function Home() {
17
+ const mobileMenuIcon = <Bars3Icon className="h-6 w-6" />
18
+
19
+ return (
20
+ <Page
21
+ backendUrl="http://localhost:3000"
22
+ logoDark={logoDark}
23
+ logoLight={logoLight}
24
+ metadata={metadata}
25
+ // mobileMenuIcon={mobileMenuIcon}
26
+ useTheme={useTheme}
27
+ user={{
28
+ initials: 'TG'
29
+ }}
30
+ >
31
+ <h1>Hello world!</h1>
32
+ <p>This is a simple page.</p>
33
+ </Page>
34
+ )
35
+ }
@@ -0,0 +1,19 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ content: [
4
+ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
5
+ "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
6
+ "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
7
+ ],
8
+ darkMode: 'class',
9
+ theme: {
10
+ extend: {
11
+ backgroundImage: {
12
+ "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
13
+ "gradient-conic":
14
+ "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
15
+ },
16
+ },
17
+ },
18
+ plugins: [],
19
+ };
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "foreman", "0.88.1"
4
+ gem "rails", ">= 7.2.1"
5
+
6
+ # TODO: Switch this out if dev or prod
7
+ gem "layered_stack", path: "layered_stack/cli"
8
+ # gem "layered_stack", "~> 0.0.6"
@@ -0,0 +1,2 @@
1
+ backend: cd backend && bin/rails s -p 3000
2
+ frontend: cd frontend && npm run dev
@@ -0,0 +1,9 @@
1
+ # Make sure RUBY_VERSION matches the Ruby version in .ruby-version
2
+ ARG RUBY_VERSION=3.3.4
3
+ FROM ghcr.io/rails/devcontainer/images/ruby:$RUBY_VERSION
4
+
5
+ # Install Node.js
6
+ RUN apt-get update -qq && apt-get install -y nodejs npm
7
+
8
+ # Copy the Visual Studio Code Extension
9
+ COPY layered-stack-0.0.1.vsix /tmp/
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "Layered Stack Devcontainer",
3
+ "dockerComposeFile": "docker-compose.yml",
4
+ "service": "app",
5
+ "workspaceFolder": "/workspace",
6
+ "features": {
7
+ "ghcr.io/devcontainers/features/github-cli:1": {},
8
+ "ghcr.io/rails/devcontainer/features/sqlite3": {}
9
+ },
10
+ "forwardPorts": [3000, 3001],
11
+ "postCreateCommand": "bundle install",
12
+ "settings": {
13
+ "terminal.integrated.shell.linux": "/bin/bash"
14
+ },
15
+ "extensions": [
16
+ "dbaeumer.vscode-eslint",
17
+ "/tmp/layered-stack-0.0.1.vsix"
18
+ ]
19
+ }
@@ -0,0 +1,11 @@
1
+ services:
2
+ app:
3
+ build:
4
+ context: .
5
+ dockerfile: Dockerfile
6
+ volumes:
7
+ - ..:/workspace:cached
8
+ command: sleep infinity
9
+ environment:
10
+ NODE_ENV: development
11
+ RAILS_ENV: development
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Layered Stack
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby -wU
2
+ require 'layered_stack_rails'
3
+ LayeredStackRails::Cli.start(ARGV)
@@ -0,0 +1,29 @@
1
+ require_relative 'lib/layered_stack_rails/version'
2
+
3
+ Gem::Specification.new do |s|
4
+ # General
5
+ s.name = 'layered_stack-rails'
6
+ s.version = LayeredStackRails::VERSION
7
+ s.authors = ['Layered Stack']
8
+ s.email = ['support@layeredstack.org']
9
+
10
+ # About
11
+ s.summary = 'Layered Stack Rails'
12
+ s.description = 'Rails tools for Layered Stack'
13
+ s.homepage = 'https://www.layeredstack.org/'
14
+ s.license = 'MIT'
15
+
16
+ # Metadata
17
+ s.metadata['homepage_uri'] = s.homepage
18
+ s.metadata['source_code_uri'] = 'https://github.com/LayeredStack/rails'
19
+
20
+ # Ruby
21
+ s.required_ruby_version = '>=3.3.0'
22
+
23
+ # Files and executables
24
+ s.files = Dir.glob('lib/**/*.rb') + Dir.glob('assets/**/*')
25
+ s.executables = ['layered_stack-rails']
26
+
27
+ # Dependencies
28
+ s.add_dependency "thor", "~> 1.3.2"
29
+ end
@@ -0,0 +1,89 @@
1
+ require "rails"
2
+ require "rails/generators"
3
+ require "yaml"
4
+
5
+ class LayeredStackRails::ScaffoldGenerator < Rails::Generators::Base
6
+ source_root File.expand_path("templates", __dir__)
7
+ argument :model_name, type: :string
8
+
9
+ def execute
10
+ yaml_content = YAML.load_file(File.join("layered_stack", "resources.yml"))
11
+
12
+ model_data = yaml_content["resources"][model_name]
13
+ if model_data
14
+ puts "Generating model #{model_name} with attributes: #{model_data["attributes"]}"
15
+ generate_scaffold(model_name, model_data["attributes"], model_data["associations"])
16
+ else
17
+ puts "Model #{model_name} not found in resources.yml"
18
+ end
19
+ end
20
+
21
+ def create_model_file
22
+ template "active_record/model/model.erb", File.join("app/models", "#{model_name}.rb")
23
+ end
24
+
25
+ private
26
+
27
+ def generate_scaffold(model_name, attributes, associations)
28
+ @attributes = attributes.map do |name, details|
29
+ if details['password_digest']
30
+ "#{name}:digest"
31
+ elsif details['token']
32
+ "#{name}:token"
33
+ else
34
+ attribute_string = if details['type'] == 'decimal'
35
+ precision = details['precision']
36
+ scale = details['scale']
37
+ "#{name}:decimal{#{precision}.#{scale}}"
38
+ else
39
+ type = details['type']
40
+ limit = details['limit']
41
+ limit_string = limit ? "{#{limit}}" : ""
42
+ "#{name}:#{type}#{limit_string}"
43
+ end
44
+
45
+ attribute_string += ":index" if details['index'] == true
46
+ attribute_string += ":uniq" if details['index'] == 'uniq'
47
+
48
+ attribute_string
49
+ end
50
+ end.join(" ")
51
+
52
+ @class_name = model_name.classify
53
+
54
+ @validations = []
55
+ attributes.each do |name, details|
56
+ if details['required']
57
+ @validations << "validates :#{name}, presence: true"
58
+ end
59
+ if details['type'] == 'integer'
60
+ @validations << "validates :#{name}, numericality: { only_integer: true }"
61
+ end
62
+ if details['precision'] && details['scale']
63
+ @validations << "validates :#{name}, numericality: true"
64
+ end
65
+ end
66
+
67
+ @associations = []
68
+ associations.each do |name, details|
69
+ case details['type']
70
+ when 'has_many'
71
+ if details['through']
72
+ @associations << "has_many :#{name}, through: :#{details['through']}"
73
+ else
74
+ @associations << "has_many :#{name}"
75
+ end
76
+ when 'belongs_to'
77
+ @associations << "belongs_to :#{name}"
78
+ end
79
+ end if associations
80
+
81
+ # Generate the scaffold command
82
+ invoke "rails:scaffold", [model_name.camelize, *@attributes.split(" "), "--api"], force: true
83
+
84
+ # ToDo: Write a custom generator that avoids this workaround
85
+ # Delete the model file after scaffolding to avoid duplicate model files
86
+ model_file_path = File.join("app/models", "#{model_name}.rb")
87
+ File.delete(model_file_path) if File.exist?(model_file_path)
88
+ end
89
+ end
@@ -0,0 +1,9 @@
1
+ class <%= @class_name %> < ApplicationRecord
2
+ <%= "# <associations>" %>
3
+ <%= @associations.map { |association| association }.join("\n ") %>
4
+ <%= "# </associations>" %>
5
+
6
+ <%= "# <validations>" %>
7
+ <%= @validations.map { |validation| validation }.join("\n ") %>
8
+ <%= "# </validations>" %>
9
+ end