hephaestus 0.0.1

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 (91) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +13 -0
  4. data/LICENSE.txt +9 -0
  5. data/README.md +19 -0
  6. data/bin/hephaestus +55 -0
  7. data/lib/hephaestus/actions/strip_comments_action.rb +263 -0
  8. data/lib/hephaestus/actions.rb +116 -0
  9. data/lib/hephaestus/app_builder.rb +168 -0
  10. data/lib/hephaestus/exit_on_failure.rb +22 -0
  11. data/lib/hephaestus/generators/app_generator.rb +158 -0
  12. data/lib/hephaestus/generators/base.rb +65 -0
  13. data/lib/hephaestus/generators/config_generator.rb +102 -0
  14. data/lib/hephaestus/generators/core_generator.rb +50 -0
  15. data/lib/hephaestus/generators/deployment_generator.rb +18 -0
  16. data/lib/hephaestus/generators/lib_generator.rb +16 -0
  17. data/lib/hephaestus/generators/license_generator.rb +16 -0
  18. data/lib/hephaestus/generators/rubocop_generator.rb +18 -0
  19. data/lib/hephaestus/generators/sorbet_generator.rb +16 -0
  20. data/lib/hephaestus/version.rb +11 -0
  21. data/lib/hephaestus.rb +21 -0
  22. data/templates/Gemfile.erb +121 -0
  23. data/templates/Procfile.debug +2 -0
  24. data/templates/Procfile.dev +2 -0
  25. data/templates/README.md.erb +1 -0
  26. data/templates/app/controllers/application_controller.rb +107 -0
  27. data/templates/app/controllers/concerns/authable.rb +32 -0
  28. data/templates/app/controllers/root_controller.rb +11 -0
  29. data/templates/app/controllers/settings_controller.rb +7 -0
  30. data/templates/app/controllers/staff_controller.rb +15 -0
  31. data/templates/app/controllers/yetto_controller.rb +30 -0
  32. data/templates/app/jobs/application_job.rb +10 -0
  33. data/templates/app/jobs/update_yetto_job.rb +27 -0
  34. data/templates/app/lib/body_parameter/yetto_parameters.rb +8 -0
  35. data/templates/app/lib/body_parameter.rb +6 -0
  36. data/templates/app/lib/constants/app.rb +8 -0
  37. data/templates/app/lib/headers/yetto.rb +17 -0
  38. data/templates/app/lib/headers.rb +5 -0
  39. data/templates/app/lib/path_parameter/yetto_parameters.rb +25 -0
  40. data/templates/app/lib/path_parameter.rb +8 -0
  41. data/templates/app/lib/plug_app/http.rb +34 -0
  42. data/templates/app/lib/plug_app/middleware/malformed_request.rb +110 -0
  43. data/templates/app/lib/plug_app/middleware/not_found.rb +41 -0
  44. data/templates/app/lib/plug_app/middleware/openapi_validation.rb +54 -0
  45. data/templates/app/lib/plug_app/middleware/tracing_attributes.rb +42 -0
  46. data/templates/app/lib/query_parameter.rb +6 -0
  47. data/templates/app/serializers/error_serializer.rb +16 -0
  48. data/templates/app/services/yetto_service.rb +61 -0
  49. data/templates/app/views/settings/index.json.jbuilder +15 -0
  50. data/templates/config/initializers/cors.rb +18 -0
  51. data/templates/config/initializers/environment.rb +30 -0
  52. data/templates/config/initializers/filter_parameter_logging.rb +22 -0
  53. data/templates/config/initializers/inflections.rb +20 -0
  54. data/templates/config/initializers/lograge.rb +25 -0
  55. data/templates/config/initializers/open_telemetry.rb +27 -0
  56. data/templates/config/initializers/sidekiq.rb +11 -0
  57. data/templates/config/initializers/slack_webhook_logger.rb +17 -0
  58. data/templates/config/sidekiq.yml +18 -0
  59. data/templates/hephaestus_gitignore +296 -0
  60. data/templates/lib/plug_app/schemas/api/2023-03-06/components/parameters/headers/yetto.json +42 -0
  61. data/templates/lib/plug_app/schemas/api/2023-03-06/components/parameters/plugInstallation.json +12 -0
  62. data/templates/lib/plug_app/schemas/api/2023-03-06/components/schemas/plug.json +9 -0
  63. data/templates/lib/plug_app/schemas/api/2023-03-06/components/schemas/responses.json +64 -0
  64. data/templates/lib/plug_app/schemas/api/2023-03-06/components/schemas/yetto.json +1 -0
  65. data/templates/lib/plug_app/schemas/api/2023-03-06/openapi.json +27 -0
  66. data/templates/lib/plug_app/schemas/api/2023-03-06/paths/plug.json +91 -0
  67. data/templates/lib/plug_app/schemas/api/2023-03-06/paths/yetto/after_create_message.json +41 -0
  68. data/templates/lib/plug_app/schemas/api/2023-03-06/paths/yetto/after_create_plug_installation.json +41 -0
  69. data/templates/lib/tasks/test_tasks.rake +10 -0
  70. data/templates/script/ci +7 -0
  71. data/templates/script/hmac_text +22 -0
  72. data/templates/script/licenses +51 -0
  73. data/templates/script/ngrok +5 -0
  74. data/templates/script/security_checks/brakeman +5 -0
  75. data/templates/script/security_checks/bundle-audit +5 -0
  76. data/templates/script/server +5 -0
  77. data/templates/script/server-debug +5 -0
  78. data/templates/script/test +5 -0
  79. data/templates/script/typecheck +42 -0
  80. data/templates/sorbet/custom.rbi +14 -0
  81. data/templates/test/controllers/root_controller_test.rb +12 -0
  82. data/templates/test/controllers/settings_controller_test.rb +27 -0
  83. data/templates/test/controllers/yetto_controller_test.rb +130 -0
  84. data/templates/test/jobs/update_yetto_job_test.rb +41 -0
  85. data/templates/test/support/api.rb +74 -0
  86. data/templates/test/support/rails.rb +39 -0
  87. data/templates/test/support/webmocks/slack_webmock.rb +24 -0
  88. data/templates/test/support/webmocks/yetto.rb +94 -0
  89. data/templates/test/support/webmocks.rb +5 -0
  90. data/templates/test/test_helper.rb +24 -0
  91. metadata +209 -0
@@ -0,0 +1,61 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ class YettoService
5
+ cattr_reader :yetto_client, instance_accessor: false do
6
+ HTTPX.plugin(:persistent).with_headers({
7
+ "Content-Type" => "application/json",
8
+ "Accept" => "application/json",
9
+ "User-Agent" => "PlugApp/#{PlugApp::Application::GIT_SHA}",
10
+ })
11
+ end
12
+
13
+ PROTOCOL = Rails.env.development? ? "http" : "https"
14
+ YETTO_API_VERSION_TLD = "#{PROTOCOL}://#{YETTO_API_TLD}/#{YETTO_API_VERSION}"
15
+
16
+ class << self
17
+ def get_plug_installation(organization_id, inbox_id, plug_installation_id)
18
+ yetto_client.get("#{YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/plug_installations/#{plug_installation_id}")
19
+ end
20
+
21
+ def update_installation(organization_id, inbox_id, plug_installation_id, params)
22
+ plug_installation = {}
23
+ plug_installation[:settings] = params[:plug_installation].fetch(:settings, {})
24
+ plug_installation[:credentials] = params[:plug_installation].fetch(:credentials, {})
25
+ body = {
26
+ plug_installation: plug_installation,
27
+ }
28
+
29
+ yetto_client.patch("#{YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/plug_installations/#{plug_installation_id}", json: body)
30
+ end
31
+
32
+ def create_switch(organization_id, inbox_id, plug_id, params)
33
+ inbox_id = params.fetch(:inbox).fetch(:id)
34
+ creator_id = params.fetch(:plug).fetch(:id)
35
+ payload = {
36
+ name: "After install",
37
+ creator: { id: creator_id },
38
+ }
39
+ yetto_client.post("#{YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/switches", json: payload)
40
+ end
41
+
42
+ def create_message(organization_id, inbox_id, params)
43
+ payload = params[:payload]
44
+ yetto_client.post("#{YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/messages", json: payload)
45
+ end
46
+
47
+ def parse_body(response)
48
+ JSON.parse(response.body.read)
49
+ end
50
+
51
+ def unavailable?(response)
52
+ return true unless (200..299).cover?(response.status)
53
+
54
+ response.body.blank? || response.body == "{}"
55
+ end
56
+
57
+ def available?(response)
58
+ !unavailable?(response)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ json.version("2023-03-06")
4
+ json.settings do
5
+ json.array!([
6
+ {
7
+ component: "text_field",
8
+
9
+ },
10
+ {
11
+ component: "email_field",
12
+
13
+ },
14
+ ])
15
+ end
@@ -0,0 +1,18 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+ # Be sure to restart your server when you modify this file.
4
+
5
+ # Avoid CORS issues when API is called from the frontend app.
6
+ # Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.
7
+
8
+ # Read more: https://github.com/cyu/rack-cors
9
+
10
+ # Rails.application.config.middleware.insert_before 0, Rack::Cors do
11
+ # allow do
12
+ # origins "example.com"
13
+ #
14
+ # resource "*",
15
+ # headers: :any,
16
+ # methods: [:get, :post, :put, :patch, :delete, :options, :head]
17
+ # end
18
+ # end
@@ -0,0 +1,30 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ PLUG_APP_URL = ENV.fetch("PLUG_APP_URL", "yetto.email")
5
+
6
+ YETTO_URL = if Rails.env.production?
7
+ "yetto.app"
8
+ elsif Rails.env.staging?
9
+ "yetto-staging.onrender.com"
10
+ elsif Rails.env.development?
11
+ "localhost:3000"
12
+ elsif Rails.env.test?
13
+ "test.yetto.app"
14
+ end
15
+
16
+ YETTO_API_TLD = ENV.fetch("YETTO_API_TLD", "#{YETTO_URL}/api")
17
+ YETTO_API_VERSION = ENV.fetch("YETTO_API_VERSION", "v1")
18
+
19
+ SLACK_LOG_URL = ENV.fetch("SLACK_LOG_URL", nil)
20
+
21
+ YETTO_PLUG_APP_TOKEN = ENV.fetch("YETTO_PLUG_APP_TOKEN", "super-secret")
22
+
23
+ # For Honeycomb.io
24
+ OTEL_EXPORTER_OTLP_ENDPOINT = ENV.fetch("OTEL_EXPORTER_OTLP_ENDPOINT", "https://api.honeycomb.io")
25
+ OTEL_EXPORTER_OTLP_HEADERS = ENV.fetch("OTEL_EXPORTER_OTLP_HEADERS", "x-honeycomb-team=your-api-key")
26
+ OTEL_SERVICE_NAME = ENV.fetch("OTEL_SERVICE_NAME", "your-service-name")
27
+
28
+ def productionish?
29
+ Rails.env.production? || Rails.env.staging?
30
+ end
@@ -0,0 +1,22 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ # Be sure to restart your server when you modify this file.
5
+
6
+ # Configure parameters to be filtered from the log file. Use this to limit dissemination of
7
+ # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
8
+ # notations and behaviors.
9
+ Rails.application.config.filter_parameters += [
10
+ :passw,
11
+ :secret,
12
+ :token,
13
+ :_key,
14
+ :crypt,
15
+ :salt,
16
+ :certificate,
17
+ :otp,
18
+ :ssn,
19
+ :credentials,
20
+ :html_content,
21
+ :text_content,
22
+ ]
@@ -0,0 +1,20 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ # Be sure to restart your server when you modify this file.
5
+
6
+ # Add new inflection rules using the following format. Inflections
7
+ # are locale specific, and you may define rules for as many different
8
+ # locales as you wish. All of these examples are active by default:
9
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
10
+ # inflect.plural /^(ox)$/i, "\\1en"
11
+ # inflect.singular /^(ox)en/i, "\\1"
12
+ # inflect.irregular "person", "people"
13
+ # inflect.uncountable %w( fish sheep )
14
+ # end
15
+
16
+ # These inflection rules are supported but not enabled by default:
17
+ ActiveSupport::Inflector.inflections(:en) do |inflect|
18
+ inflect.acronym("API")
19
+ inflect.acronym("HTTP")
20
+ end
@@ -0,0 +1,25 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ Rails.application.configure do
5
+ config.lograge.enabled = true
6
+ config.lograge.custom_options = lambda do |event|
7
+ span = OpenTelemetry::Trace.current_span
8
+ {
9
+ time: event.time,
10
+ trace_id: span.context.hex_trace_id,
11
+ span_id: span.context.hex_span_id,
12
+ }
13
+ end
14
+
15
+ config.lograge.custom_payload do |controller|
16
+ payload = {
17
+ host: controller.request.host,
18
+ }
19
+
20
+ payload
21
+ end
22
+
23
+ config.lograge.keep_original_rails_log = true
24
+ config.lograge.logger = ActiveSupport::Logger.new(Rails.root.join("log", "lograge_#{Rails.env}.log"))
25
+ end
@@ -0,0 +1,27 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ require "opentelemetry/sdk"
5
+ require "opentelemetry/semantic_conventions"
6
+
7
+ if Rails.env.staging? || Rails.env.production?
8
+ OpenTelemetry::SDK.configure do |c|
9
+ c.logger = Rails.logger
10
+
11
+ c.use_all
12
+
13
+ if productionish?
14
+ c.add_span_processor(
15
+ OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
16
+ OpenTelemetry::Exporter::OTLP::Exporter.new,
17
+ ),
18
+ )
19
+ else
20
+ c.add_span_processor(
21
+ OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessornew(
22
+ OpenTelemetry::SDK::Trace::Export::SpanExporter.new,
23
+ ),
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ Sidekiq.configure_server do |config|
5
+ config.logger = Sidekiq::Logger.new($stdout)
6
+ config.redis = { url: ENV.fetch("REDIS_URL", "redis://localhost:6379/1") }
7
+ end
8
+ Sidekiq.configure_client do |config|
9
+ config.logger = Sidekiq::Logger.new($stdout)
10
+ config.redis = { url: ENV.fetch("REDIS_URL", "redis://localhost:6379/1") }
11
+ end
@@ -0,0 +1,17 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ SlackWebhookLogger.setup do |config|
5
+ # Webhook URL
6
+ #
7
+ # The URL where messages will be sent.
8
+ config.webhook_url = SLACK_LOG_URL
9
+
10
+ # The minimum error level to see in Slack.
11
+ #
12
+ # All log levels are supported, but don't do anything less then :warn since Slack only allows one message
13
+ # per minute.
14
+ config.level = :WARN
15
+
16
+ config.ignore_patterns = [/Can't verify CSRF token authenticity/, /is not a valid MIME type/]
17
+ end
@@ -0,0 +1,18 @@
1
+ # Sample configuration file for Sidekiq.
2
+ # Options here can still be overridden by cmd line args.
3
+ # Place this file at config/sidekiq.yml and Sidekiq will
4
+ # pick it up automatically.
5
+ ---
6
+ :verbose: false
7
+ :logfile: ./log/sidekiq.log
8
+ :concurrency: <%= ENV.fetch("SIDEKIQ_CONCURRENCY", 10) %>
9
+ :timeout: 25
10
+ :max_retries: 3
11
+
12
+ # https://phil.tech/2016/tips-on-sidekiq-queues/
13
+ :queues:
14
+ - [default, 5]
15
+ - [mailers, 3]
16
+
17
+ - [active_storage_analysis, 1]
18
+ - [active_storage_purge, 1]
@@ -0,0 +1,296 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore keys for decrypting credentials and more.
8
+ /config/master.key
9
+ /config/credentials/development.key
10
+ /config/credentials/staging.key
11
+ /config/credentials/production.key
12
+ /config/credentials/test.key
13
+
14
+ /app/assets/builds/*
15
+ !/app/assets/builds/.keep
16
+
17
+ # Created by https://www.toptal.com/developers/gitignore/api/macos,windows,linux,rails,dotenv,database,visualstudiocode,rubymine+all,nodejs
18
+ # Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,linux,rails,dotenv,database,visualstudiocode,rubymine+all,nodejs
19
+
20
+ ### Database ###
21
+ *.accdb
22
+ *.db
23
+ *.dbf
24
+ *.mdb
25
+ *.pdb
26
+ *.sqlite3
27
+
28
+ ### dotenv ###
29
+ .env
30
+
31
+ ### Linux ###
32
+ *~
33
+
34
+ # temporary files which can be created if a process still has a handle open of a deleted file
35
+ .fuse_hidden*
36
+
37
+ # KDE directory preferences
38
+ .directory
39
+
40
+ # Linux trash folder which might appear on any partition or disk
41
+ .Trash-*
42
+
43
+ # .nfs files are created when an open file is removed but is still being accessed
44
+ .nfs*
45
+
46
+ ### macOS ###
47
+ # General
48
+ .DS_Store
49
+ .AppleDouble
50
+ .LSOverride
51
+
52
+ # Icon must end with two \r
53
+ Icon
54
+
55
+
56
+ # Thumbnails
57
+ ._*
58
+
59
+ # Files that might appear in the root of a volume
60
+ .DocumentRevisions-V100
61
+ .fseventsd
62
+ .Spotlight-V100
63
+ .TemporaryItems
64
+ .Trashes
65
+ .VolumeIcon.icns
66
+ .com.apple.timemachine.donotpresent
67
+
68
+ # Directories potentially created on remote AFP share
69
+ .AppleDB
70
+ .AppleDesktop
71
+ Network Trash Folder
72
+ Temporary Items
73
+ .apdisk
74
+
75
+ ### macOS Patch ###
76
+ # iCloud generated files
77
+ *.icloud
78
+
79
+ #!! ERROR: nodejs is undefined. Use list command to see defined gitignore types !!#
80
+
81
+ ### Rails ###
82
+ *.rbc
83
+ capybara-*.html
84
+ .rspec
85
+ /db/*.sqlite3
86
+ /db/*.sqlite3-journal
87
+ /db/*.sqlite3-[0-9]*
88
+ /public/system
89
+ /coverage/
90
+ /spec/tmp
91
+ *.orig
92
+ rerun.txt
93
+ pickle-email-*.html
94
+
95
+ # Ignore all logfiles and tempfiles.
96
+ /log/*
97
+ /tmp/*
98
+ !/log/.keep
99
+ !/tmp/.keep
100
+
101
+ # Comment out this rule if you are OK with secrets being uploaded to the repo
102
+ config/initializers/secret_token.rb
103
+ config/master.key
104
+
105
+ # Only include if you have production secrets in this file, which is no longer a Rails default
106
+ # config/secrets.yml
107
+
108
+ # dotenv, dotenv-rails
109
+ # Comment out these rules if environment variables can be committed
110
+ .env*.local
111
+
112
+ ## Environment normalization:
113
+ /.bundle
114
+ /vendor/bundle
115
+
116
+ # these should all be checked in to normalize the environment:
117
+ # Gemfile.lock, .ruby-version, .ruby-gemset
118
+
119
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
120
+ .rvmrc
121
+
122
+ # if using bower-rails ignore default bower_components path bower.json files
123
+ /vendor/assets/bower_components
124
+ *.bowerrc
125
+ bower.json
126
+
127
+ # Ignore pow environment settings
128
+ .powenv
129
+
130
+ # Ignore Byebug command history file.
131
+ .byebug_history
132
+
133
+ # Ignore node_modules
134
+ node_modules/
135
+
136
+ # Ignore precompiled javascript packs
137
+ /public/packs
138
+ /public/packs-test
139
+ /public/assets
140
+
141
+ # Ignore yarn files
142
+ /yarn-error.log
143
+ yarn-debug.log*
144
+ .yarn-integrity
145
+
146
+ # Ignore uploaded files in development
147
+ /storage/*
148
+ !/storage/.keep
149
+ /public/uploads
150
+
151
+ ### RubyMine+all ###
152
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
153
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
154
+
155
+ # User-specific stuff
156
+ .idea/**/workspace.xml
157
+ .idea/**/tasks.xml
158
+ .idea/**/usage.statistics.xml
159
+ .idea/**/dictionaries
160
+ .idea/**/shelf
161
+
162
+ # AWS User-specific
163
+ .idea/**/aws.xml
164
+
165
+ # Generated files
166
+ .idea/**/contentModel.xml
167
+
168
+ # Sensitive or high-churn files
169
+ .idea/**/dataSources/
170
+ .idea/**/dataSources.ids
171
+ .idea/**/dataSources.local.xml
172
+ .idea/**/sqlDataSources.xml
173
+ .idea/**/dynamic.xml
174
+ .idea/**/uiDesigner.xml
175
+ .idea/**/dbnavigator.xml
176
+
177
+ # Gradle
178
+ .idea/**/gradle.xml
179
+ .idea/**/libraries
180
+
181
+ # Gradle and Maven with auto-import
182
+ # When using Gradle or Maven with auto-import, you should exclude module files,
183
+ # since they will be recreated, and may cause churn. Uncomment if using
184
+ # auto-import.
185
+ # .idea/artifacts
186
+ # .idea/compiler.xml
187
+ # .idea/jarRepositories.xml
188
+ # .idea/modules.xml
189
+ # .idea/*.iml
190
+ # .idea/modules
191
+ # *.iml
192
+ # *.ipr
193
+
194
+ # CMake
195
+ cmake-build-*/
196
+
197
+ # Mongo Explorer plugin
198
+ .idea/**/mongoSettings.xml
199
+
200
+ # File-based project format
201
+ *.iws
202
+
203
+ # IntelliJ
204
+ out/
205
+
206
+ # mpeltonen/sbt-idea plugin
207
+ .idea_modules/
208
+
209
+ # JIRA plugin
210
+ atlassian-ide-plugin.xml
211
+
212
+ # Cursive Clojure plugin
213
+ .idea/replstate.xml
214
+
215
+ # SonarLint plugin
216
+ .idea/sonarlint/
217
+
218
+ # Crashlytics plugin (for Android Studio and IntelliJ)
219
+ com_crashlytics_export_strings.xml
220
+ crashlytics.properties
221
+ crashlytics-build.properties
222
+ fabric.properties
223
+
224
+ # Editor-based Rest Client
225
+ .idea/httpRequests
226
+
227
+ # Android studio 3.1+ serialized cache file
228
+ .idea/caches/build_file_checksums.ser
229
+
230
+ ### RubyMine+all Patch ###
231
+ # Ignore everything but code style settings and run configurations
232
+ # that are supposed to be shared within teams.
233
+
234
+ .idea/*
235
+
236
+ !.idea/codeStyles
237
+ !.idea/runConfigurations
238
+
239
+ ### VisualStudioCode ###
240
+ .vscode/*
241
+ !.vscode/settings.json
242
+ !.vscode/tasks.json
243
+ !.vscode/launch.json
244
+ !.vscode/extensions.json
245
+ !.vscode/*.code-snippets
246
+
247
+ # Local History for Visual Studio Code
248
+ .history/
249
+
250
+ # Built Visual Studio Code Extensions
251
+ *.vsix
252
+
253
+ ### VisualStudioCode Patch ###
254
+ # Ignore all local history of files
255
+ .history
256
+ .ionide
257
+
258
+ # Support for Project snippet scope
259
+ .vscode/*.code-snippets
260
+
261
+ # Ignore code-workspaces
262
+ *.code-workspace
263
+
264
+ ### Windows ###
265
+ # Windows thumbnail cache files
266
+ Thumbs.db
267
+ Thumbs.db:encryptable
268
+ ehthumbs.db
269
+ ehthumbs_vista.db
270
+
271
+ # Dump file
272
+ *.stackdump
273
+
274
+ # Folder config file
275
+ [Dd]esktop.ini
276
+
277
+ # Recycle Bin used on file shares
278
+ $RECYCLE.BIN/
279
+
280
+ # Windows Installer files
281
+ *.cab
282
+ *.msi
283
+ *.msix
284
+ *.msm
285
+ *.msp
286
+
287
+ # Windows shortcuts
288
+ *.lnk
289
+
290
+ # End of https://www.toptal.com/developers/gitignore/api/macos,windows,linux,rails,dotenv,database,visualstudiocode,rubymine+all,nodejs
291
+
292
+ app/javascript/controllers/*.js
293
+ !app/javascript/controllers/application.js
294
+ !app/javascript/controllers/index.js
295
+
296
+ security_results.json
@@ -0,0 +1,42 @@
1
+ {
2
+ "Event": {
3
+ "name": "X-Yetto-Event",
4
+ "in": "header",
5
+ "description": "The event from Yetto",
6
+ "required": true,
7
+ "schema": {
8
+ "type": "string",
9
+ "pattern": "^after_{create|update|destroy}$"
10
+ }
11
+ },
12
+ "RecordType": {
13
+ "name": "X-Yetto-RecordType",
14
+ "in": "header",
15
+ "description": "The record type from Yetto",
16
+ "required": true,
17
+ "schema": {
18
+ "type": "string",
19
+ "pattern": "^[a-z_]+$"
20
+ }
21
+ },
22
+ "DeliveryID": {
23
+ "name": "X-Yetto-DeliveryID",
24
+ "in": "header",
25
+ "description": "The delivery ID from Yetto",
26
+ "required": true,
27
+ "schema": {
28
+ "type": "string",
29
+ "pattern": "^[a-z0-9-]+$"
30
+ }
31
+ },
32
+ "Signature": {
33
+ "name": "X-Yetto-Signature",
34
+ "in": "header",
35
+ "description": "The signature from Yetto",
36
+ "required": true,
37
+ "schema": {
38
+ "type": "string",
39
+ "pattern": "^sha256=[a-f0-9]{64}$"
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "plugInstallationId": {
3
+ "name": "plugInstallationId",
4
+ "in": "path",
5
+ "description": "The plug installation's unique ID",
6
+ "required": true,
7
+ "schema": {
8
+ "type": "string",
9
+ "pattern": "^pli_[A-Z0-9]{26}$"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "InboundWebhook": {
3
+ "type": "object",
4
+ "required": [
5
+ "From"
6
+ ],
7
+ "properties": {}
8
+ }
9
+ }