canvas-lms/gems
Cody Cutrer 63a05bc983 Revert "bundle update --bundler"
This reverts commit 698049fdf0.

Reason for revert: Passenger isn't loading the correct version of bundler, and the new version causes a conflict with the old version

Change-Id: I030f29872e6052c0af59ae8d7810725189261170
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/345745
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Andrea Cirulli <andrea.cirulli@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
2024-05-20 19:16:47 +00:00
..
activesupport-suspend_callbacks Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
acts_as_list Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
adheres_to_policy Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
attachment_fu rename `File.mime_type?` as `File.mime_type` 2024-04-24 19:24:46 +00:00
autoextend Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
bookmarked_collection Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
broadcast_policy Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_breach_mitigation Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_cache Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_cassandra Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_color Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_crummy Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_dynamodb Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_errors Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_ext Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_http Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_kaltura Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_mimetype_fu Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_panda_pub Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_partman Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_quiz_statistics Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_sanitize Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_security Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_slug Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_sort Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_stringex Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_text_helper Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_time Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
canvas_unzip Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
config_file Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
csv_diff Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
diigo Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
dr_diff Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
dynamic_settings Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
event_stream Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
google_drive Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
html_text_helper Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
i18n_extraction Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
i18n_tasks Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
incoming_mail_processor Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
json_token Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
legacy_multipart Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
live_events Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
lti-advantage Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
lti_outbound Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
paginated_collection Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
plugins remove course sis_source_id constraint for deleted section query 2024-05-13 18:53:21 +00:00
request_context Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
rubocop-canvas Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
stringify_ids Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
tatl_tael Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
turnitin_api Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
twitter Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
utf8_cleaner Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
workflow Revert "bundle update --bundler" 2024-05-20 19:16:47 +00:00
README.md Remove auditor cassandra support 2023-04-03 15:40:22 +00:00
gemfile_prefix.rb add Rails 7.1 lockfiles for embedded gems 2024-02-14 22:30:10 +00:00
test_all_gems.sh remove broken vendored gems html reports 2021-06-15 16:53:17 +00:00

README.md

Gems

This folder is a place to extract modular functionality from canvas. Canvas's Gemfile arrangement is enabled to read gems from this path locally without installing from a remote source. This is valuable for a few reasons:

  • it prevents circular dependencies (bundler won't allow it)
  • modularized code cannot bind to specific domain concepts on canvas models
  • gems can have their specs run independently, without needing to load all of canvas, saving iteration time
  • it allows for eventual build optimization via only running specs for the transitive closure of parents depending on a gem where a change is.

There are some tradeoffs:

  • spreads canvas over more subdirectories, giving some mental overhad to traversing the entire codebase.
  • modular tests necessarily don't test integration with canvas concepts, so solid integration tests in the app are still a requirement.
  • total SERIALIZED build time goes up because each gem loads it's specs in a new process rather than all running within an already booted canvas process.

[TODO] eventually write more on whether we feel like those tradeoffs are good ones, and what the best practices are to leverage this pattern for max-gain/min-pain.

Testing

To test all the gems:

cd gems
./test_all_gems.sh

To test an individual gem

Run ./test.sh inside the gem's folder. This is basically the same as:

cd gems/google_drive
bundle
rspec