panda_pal 5.10.1 → 5.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +0 -0
  3. data/README.md +31 -21
  4. data/Rakefile +0 -0
  5. data/app/assets/config/panda_pal_manifest.js +0 -0
  6. data/app/assets/javascripts/panda_pal/application.js +0 -0
  7. data/app/assets/javascripts/panda_pal/lti.js +0 -0
  8. data/app/assets/stylesheets/panda_pal/application.css +0 -0
  9. data/app/assets/stylesheets/panda_pal/lti.css +0 -0
  10. data/app/controllers/panda_pal/api_call_controller.rb +0 -0
  11. data/app/controllers/panda_pal/application_controller.rb +0 -0
  12. data/app/controllers/panda_pal/lti_controller.rb +0 -0
  13. data/app/controllers/panda_pal/lti_v1_p0_controller.rb +0 -0
  14. data/app/controllers/panda_pal/lti_v1_p3_controller.rb +14 -0
  15. data/app/helpers/panda_pal/application_helper.rb +0 -0
  16. data/app/jobs/panda_pal/jobs/grade_passback_job.rb +0 -0
  17. data/app/lib/lti_xml/base_platform.rb +0 -0
  18. data/app/lib/lti_xml/bridge_platform.rb +0 -0
  19. data/app/lib/lti_xml/canvas_platform.rb +0 -0
  20. data/app/lib/panda_pal/launch_url_helpers.rb +0 -0
  21. data/app/lib/panda_pal/lti_jwt_validator.rb +0 -0
  22. data/app/models/panda_pal/api_call.rb +0 -0
  23. data/app/models/panda_pal/organization.rb +3 -39
  24. data/app/models/panda_pal/organization_concerns/multi_database_sharding.rb +22 -0
  25. data/app/models/panda_pal/organization_concerns/organization_builder.rb +0 -0
  26. data/app/models/panda_pal/organization_concerns/settings_validation.rb +0 -0
  27. data/app/models/panda_pal/organization_concerns/task_scheduling.rb +0 -0
  28. data/app/models/panda_pal/organization_concerns/tenant_handling.rb +54 -0
  29. data/app/models/panda_pal/panda_pal_record.rb +0 -0
  30. data/app/models/panda_pal/platform/canvas.rb +0 -0
  31. data/app/models/panda_pal/platform.rb +0 -0
  32. data/app/models/panda_pal/session.rb +28 -13
  33. data/app/views/layouts/panda_pal/application.html.erb +0 -0
  34. data/app/views/panda_pal/lti/launch.html.erb +0 -0
  35. data/app/views/panda_pal/lti_v1_p3/login.html.erb +0 -0
  36. data/app/views/panda_pal/partials/_auto_submit_form.html.erb +0 -0
  37. data/config/dev_lti_key.key +0 -0
  38. data/config/initializers/apartment.rb +202 -3
  39. data/config/routes.rb +0 -0
  40. data/db/migrate/20160412205931_create_panda_pal_organizations.rb +0 -0
  41. data/db/migrate/20160413135653_create_panda_pal_sessions.rb +0 -0
  42. data/db/migrate/20160425130344_add_panda_pal_organization_to_session.rb +0 -0
  43. data/db/migrate/20170106165533_add_salesforce_id_to_organizations.rb +0 -0
  44. data/db/migrate/20171205183457_encrypt_organization_settings.rb +0 -0
  45. data/db/migrate/20171205194657_remove_old_organization_settings.rb +0 -0
  46. data/db/migrate/20220721095653_create_panda_pal_api_calls.rb +0 -0
  47. data/lib/panda_pal/concerns/ability_helper.rb +0 -0
  48. data/lib/panda_pal/engine.rb +0 -2
  49. data/lib/panda_pal/helpers/console_helpers.rb +0 -0
  50. data/lib/panda_pal/helpers/controller_helper.rb +0 -0
  51. data/lib/panda_pal/helpers/misc_helper.rb +0 -0
  52. data/lib/panda_pal/helpers/route_helper.rb +0 -0
  53. data/lib/panda_pal/helpers/secure_headers.rb +0 -0
  54. data/lib/panda_pal/helpers/session_replacement.rb +0 -0
  55. data/lib/panda_pal/helpers.rb +0 -0
  56. data/lib/panda_pal/plugins.rb +0 -0
  57. data/lib/panda_pal/spec_helper.rb +82 -0
  58. data/lib/panda_pal/version.rb +1 -1
  59. data/lib/panda_pal.rb +1 -1
  60. data/lib/tasks/panda_pal_tasks.rake +0 -0
  61. data/panda_pal.gemspec +3 -3
  62. data/spec/controllers/panda_pal/api_call_controller_spec.rb +0 -0
  63. data/spec/core/apartment_multidb_spec.rb +48 -0
  64. data/spec/dummy/README.rdoc +0 -0
  65. data/spec/dummy/Rakefile +0 -0
  66. data/spec/dummy/app/assets/javascripts/application.js +0 -0
  67. data/spec/dummy/app/assets/stylesheets/application.css +0 -0
  68. data/spec/dummy/app/controllers/application_controller.rb +0 -0
  69. data/spec/dummy/app/helpers/application_helper.rb +0 -0
  70. data/spec/dummy/app/views/layouts/application.html.erb +0 -0
  71. data/spec/dummy/config/application.rb +0 -0
  72. data/spec/dummy/config/boot.rb +0 -0
  73. data/spec/dummy/config/database.yml +6 -2
  74. data/spec/dummy/config/environment.rb +0 -0
  75. data/spec/dummy/config/environments/development.rb +0 -0
  76. data/spec/dummy/config/environments/production.rb +0 -0
  77. data/spec/dummy/config/environments/test.rb +5 -0
  78. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -0
  79. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -0
  80. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -0
  81. data/spec/dummy/config/initializers/inflections.rb +0 -0
  82. data/spec/dummy/config/initializers/mime_types.rb +0 -0
  83. data/spec/dummy/config/initializers/session_store.rb +0 -0
  84. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -0
  85. data/spec/dummy/config/locales/en.yml +0 -0
  86. data/spec/dummy/config/routes.rb +0 -0
  87. data/spec/dummy/config/secrets.yml +0 -0
  88. data/spec/dummy/config.ru +0 -0
  89. data/spec/dummy/db/schema.rb +0 -0
  90. data/spec/dummy/db/test2_schema.rb +18 -0
  91. data/spec/dummy/public/404.html +0 -0
  92. data/spec/dummy/public/422.html +0 -0
  93. data/spec/dummy/public/500.html +0 -0
  94. data/spec/dummy/public/favicon.ico +0 -0
  95. data/spec/factories/panda_pal_organizations.rb +0 -0
  96. data/spec/factories/panda_pal_sessions.rb +0 -0
  97. data/spec/models/panda_pal/api_call_spec.rb +1 -1
  98. data/spec/models/panda_pal/organization/settings_validation_spec.rb +4 -0
  99. data/spec/models/panda_pal/organization_spec.rb +0 -0
  100. data/spec/models/panda_pal/session_spec.rb +0 -0
  101. data/spec/rails_helper.rb +4 -0
  102. data/spec/spec_helper.rb +0 -1
  103. metadata +57 -50
  104. /data/spec/dummy/{bin → app/bin}/bundle +0 -0
  105. /data/spec/dummy/{bin → app/bin}/rails +0 -0
  106. /data/spec/dummy/{bin → app/bin}/rake +0 -0
  107. /data/spec/dummy/{bin → app/bin}/setup +0 -0
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,82 @@
1
+ module PandaPal::SpecHelper
2
+ extend ActiveSupport::Concern
3
+
4
+ class_methods do
5
+ def with_multiple_shards(shards:, preclean_schemas: [], determine_shard: nil, transactional: true)
6
+ self.use_transactional_tests = transactional
7
+
8
+ original_settings = {}
9
+
10
+ before :all do
11
+ if defined?(DatabaseCleaner)
12
+ original_settings[:cleaner_strategy] = DatabaseCleaner.strategy
13
+ DatabaseCleaner.strategy = :truncation
14
+ end
15
+
16
+ Apartment.configure do |config|
17
+ original_settings[:with_multi_server_setup] = config.with_multi_server_setup
18
+ config.with_multi_server_setup = true
19
+ end
20
+
21
+ shards.each do |k, v|
22
+ Apartment.shard_configurations[k.to_s] = Apartment.connection_config.merge(database: v)
23
+ end
24
+
25
+ @existing_org_ids = PandaPal::Organization.pluck(:id)
26
+
27
+ Apartment::Tenant.reload!
28
+
29
+ clean_schemas(preclean_schemas)
30
+ end
31
+
32
+ after :all do
33
+ Apartment::Tenant.reset
34
+
35
+ Apartment.configure do |config|
36
+ config.with_multi_server_setup = false
37
+ end
38
+
39
+ shards.each do |k, _|
40
+ Apartment.shard_configurations.delete(k.to_s)
41
+ end
42
+
43
+ PandaPal::Organization.where.not(id: @existing_org_ids).delete_all
44
+
45
+ if defined?(DatabaseCleaner)
46
+ DatabaseCleaner.strategy = original_settings[:cleaner_strategy]
47
+ end
48
+ end
49
+
50
+ before :each do
51
+ clean_schemas(preclean_schemas) unless transactional
52
+
53
+ @each_existing_org_ids = PandaPal::Organization.pluck(:id)
54
+
55
+ if determine_shard
56
+ allow_any_instance_of(PandaPal::Organization).to receive(:tenant_name) do |org|
57
+ shard = determine_shard.call(org)
58
+ tenant = org.name
59
+ tenant = "#{shard}:#{tenant}" if shard.present?
60
+ tenant
61
+ end
62
+ end
63
+ end
64
+
65
+ after :each do
66
+ Apartment::Tenant.reset
67
+ PandaPal::Organization.where.not(id: @each_existing_org_ids).destroy_all
68
+ end
69
+
70
+ define_method :clean_schemas do |schemas|
71
+ PandaPal::Organization.where(name: schemas).delete_all
72
+
73
+ schemas.each do |schema|
74
+ Apartment::Tenant.drop(schema) rescue nil
75
+ shards.each do |k, v|
76
+ Apartment::Tenant.drop("#{k}:#{schema}") rescue nil
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,3 +1,3 @@
1
1
  module PandaPal
2
- VERSION = "5.10.1"
2
+ VERSION = "5.12.0"
3
3
  end
data/lib/panda_pal.rb CHANGED
@@ -43,7 +43,7 @@ module PandaPal
43
43
  end
44
44
 
45
45
  def self.lti_custom_params=(custom_params)
46
- @@lti_custom_params = custom_params
46
+ @@lti_custom_params = custom_params.with_indifferent_access
47
47
  end
48
48
 
49
49
  def self.lti_custom_params
File without changes
data/panda_pal.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.test_files = Dir["spec/**/*"].reject{|f| f =~ /\/log\//}
22
22
 
23
23
  s.add_dependency "rails", ">= 4.2"
24
- s.add_dependency 'ros-apartment', '~> 2.2'
24
+ s.add_dependency 'ros-apartment', '~> 3.0'
25
25
  s.add_dependency 'ims-lti', '~> 1.2.4'
26
26
  s.add_dependency 'browser', '2.5.0'
27
27
  s.add_dependency 'attr_encrypted', '~> 4.0.0'
@@ -30,11 +30,11 @@ Gem::Specification.new do |s|
30
30
  s.add_dependency 'jwt'
31
31
  s.add_dependency 'httparty'
32
32
 
33
- s.add_development_dependency "rails", "~> 5.2"
33
+ s.add_development_dependency "rails", "~> 7.0"
34
34
  s.add_development_dependency 'pg'
35
35
  s.add_development_dependency 'sidekiq', "< 7.0"
36
36
  s.add_development_dependency 'sidekiq-scheduler'
37
- s.add_development_dependency 'ros-apartment', '~> 2.11'
37
+ s.add_development_dependency 'ros-apartment', '~> 3.0'
38
38
  s.add_development_dependency 'ros-apartment-sidekiq', '~> 1.2'
39
39
  s.add_development_dependency 'rspec-rails'
40
40
  s.add_development_dependency 'factory_girl_rails'
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe PandaPal::Organization, type: :model do
6
+ context "across multiple DBs" do
7
+ with_multiple_shards(
8
+ shards: { alt: "panda_pal_test2" },
9
+ preclean_schemas: %w[on_primary on_alt],
10
+ transactional: false,
11
+ determine_shard: ->(org) { org.name.include?("alt") ? "alt" : nil }
12
+ )
13
+
14
+ let!(:org1) { create(:panda_pal_organization, name: "on_primary") }
15
+ let!(:org2) { create(:panda_pal_organization, name: "on_alt") }
16
+
17
+ it "successfully creates tenants on multiple shards" do
18
+ expect(1).to eql(1)
19
+ end
20
+
21
+ it "only creates schemas on the target shard" do
22
+ org1.switch_tenant do
23
+ schemas = PandaPal::ApiCall.connection.exec_query("SELECT schema_name FROM information_schema.schemata").pluck("schema_name")
24
+ expect(schemas).to include("on_primary")
25
+ expect(schemas).to_not include("on_alt")
26
+ end
27
+ org2.switch_tenant do
28
+ schemas = PandaPal::ApiCall.connection.exec_query("SELECT schema_name FROM information_schema.schemata").pluck("schema_name")
29
+ expect(schemas).to include("on_alt")
30
+ expect(schemas).to_not include("on_primary")
31
+ end
32
+ end
33
+
34
+ context "load_async" do
35
+ it "works across shards" do
36
+ qs = []
37
+ PandaPal::Organization.all.each do |org|
38
+ org.switch_tenant do
39
+ PandaPal::ApiCall.create!(logic: org.name)
40
+ qs << PandaPal::ApiCall.select("logic, pg_sleep(0.5)").load_async
41
+ end
42
+ end
43
+ calls = qs.map(&:to_a).flatten
44
+ expect(calls.pluck(:logic)).to match_array(["on_primary", "on_alt"])
45
+ end
46
+ end
47
+ end
48
+ end
File without changes
data/spec/dummy/Rakefile CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -14,8 +14,12 @@ development:
14
14
  database: panda_pal_development
15
15
 
16
16
  test:
17
- <<: *default
18
- database: panda_pal_test
17
+ test1:
18
+ <<: *default
19
+ database: panda_pal_test1
20
+ test2:
21
+ <<: *default
22
+ database: panda_pal_test2
19
23
 
20
24
  production:
21
25
  <<: *default
File without changes
File without changes
File without changes
@@ -37,6 +37,11 @@ Rails.application.configure do
37
37
  # Print deprecation notices to the stderr.
38
38
  config.active_support.deprecation = :stderr
39
39
 
40
+ config.log_level = :debug
41
+ config.active_record.verbose_query_logs = true
42
+ config.active_record.async_query_executor = :multi_thread_pool
43
+ # config.active_record.global_executor_concurrency = 4
44
+
40
45
  # Raises error for missing translations
41
46
  # config.action_view.raise_on_missing_translations = true
42
47
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/spec/dummy/config.ru CHANGED
File without changes
File without changes
@@ -0,0 +1,18 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your
6
+ # database schema. If you need to create the application database on another
7
+ # system, you should be using db:schema:load, not running all the migrations
8
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
10
+ #
11
+ # It's strongly recommended that you check this file into your version control system.
12
+
13
+ ActiveRecord::Schema.define(version: 2022_07_21_095653) do
14
+
15
+ # These are extensions that must be enabled in order to support this database
16
+ enable_extension "plpgsql"
17
+
18
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -17,7 +17,7 @@ module PandaPal
17
17
 
18
18
  describe "#call" do
19
19
  it "calls the function with parameters" do
20
- expect(subject.call(foo: 'FOO')).to eq 'FOO_bar'
20
+ expect(subject.call({ foo: 'FOO' })).to eq 'FOO_bar'
21
21
  end
22
22
  end
23
23
 
@@ -5,6 +5,10 @@ module PandaPal
5
5
  RSpec.describe OrganizationConcerns::SettingsValidation, type: :model do
6
6
  let!(:org) { create :panda_pal_organization }
7
7
 
8
+ after :all do
9
+ PandaPal.lti_options[:settings_structure] = nil
10
+ end
11
+
8
12
  def set_test_settings_structure
9
13
  PandaPal.lti_options = {
10
14
  title: 'Test App',
File without changes
File without changes
data/spec/rails_helper.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  ActiveRecord::Migration.maintain_test_schema!
2
2
 
3
+ require "panda_pal/spec_helper"
4
+
3
5
  RSpec.configure do |config|
6
+ config.include PandaPal::SpecHelper
7
+
4
8
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
5
9
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
6
10
 
data/spec/spec_helper.rb CHANGED
@@ -11,7 +11,6 @@ require 'factory_girl_rails'
11
11
 
12
12
  ActiveRecord::Migration.maintain_test_schema!
13
13
  ActiveRecord::Schema.verbose = false
14
- load 'dummy/db/schema.rb' # db agnostic
15
14
 
16
15
  RSpec.configure do |config|
17
16
  config.include FactoryGirl::Syntax::Methods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda_pal
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.10.1
4
+ version: 5.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Instructure CustomDev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-07 00:00:00.000000000 Z
11
+ date: 2024-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.2'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.2'
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ims-lti
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '5.2'
145
+ version: '7.0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '5.2'
152
+ version: '7.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: pg
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +198,14 @@ dependencies:
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '2.11'
201
+ version: '3.0'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '2.11'
208
+ version: '3.0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: ros-apartment-sidekiq
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -282,7 +282,7 @@ dependencies:
282
282
  - - '='
283
283
  - !ruby/object:Gem::Version
284
284
  version: 2.7.1
285
- description:
285
+ description:
286
286
  email:
287
287
  - pseng@instructure.com
288
288
  executables: []
@@ -311,9 +311,11 @@ files:
311
311
  - app/lib/panda_pal/lti_jwt_validator.rb
312
312
  - app/models/panda_pal/api_call.rb
313
313
  - app/models/panda_pal/organization.rb
314
+ - app/models/panda_pal/organization_concerns/multi_database_sharding.rb
314
315
  - app/models/panda_pal/organization_concerns/organization_builder.rb
315
316
  - app/models/panda_pal/organization_concerns/settings_validation.rb
316
317
  - app/models/panda_pal/organization_concerns/task_scheduling.rb
318
+ - app/models/panda_pal/organization_concerns/tenant_handling.rb
317
319
  - app/models/panda_pal/panda_pal_record.rb
318
320
  - app/models/panda_pal/platform.rb
319
321
  - app/models/panda_pal/platform/canvas.rb
@@ -343,21 +345,23 @@ files:
343
345
  - lib/panda_pal/helpers/secure_headers.rb
344
346
  - lib/panda_pal/helpers/session_replacement.rb
345
347
  - lib/panda_pal/plugins.rb
348
+ - lib/panda_pal/spec_helper.rb
346
349
  - lib/panda_pal/version.rb
347
350
  - lib/tasks/panda_pal_tasks.rake
348
351
  - panda_pal.gemspec
349
352
  - spec/controllers/panda_pal/api_call_controller_spec.rb
353
+ - spec/core/apartment_multidb_spec.rb
350
354
  - spec/dummy/README.rdoc
351
355
  - spec/dummy/Rakefile
352
356
  - spec/dummy/app/assets/javascripts/application.js
353
357
  - spec/dummy/app/assets/stylesheets/application.css
358
+ - spec/dummy/app/bin/bundle
359
+ - spec/dummy/app/bin/rails
360
+ - spec/dummy/app/bin/rake
361
+ - spec/dummy/app/bin/setup
354
362
  - spec/dummy/app/controllers/application_controller.rb
355
363
  - spec/dummy/app/helpers/application_helper.rb
356
364
  - spec/dummy/app/views/layouts/application.html.erb
357
- - spec/dummy/bin/bundle
358
- - spec/dummy/bin/rails
359
- - spec/dummy/bin/rake
360
- - spec/dummy/bin/setup
361
365
  - spec/dummy/config.ru
362
366
  - spec/dummy/config/application.rb
363
367
  - spec/dummy/config/boot.rb
@@ -377,6 +381,7 @@ files:
377
381
  - spec/dummy/config/routes.rb
378
382
  - spec/dummy/config/secrets.yml
379
383
  - spec/dummy/db/schema.rb
384
+ - spec/dummy/db/test2_schema.rb
380
385
  - spec/dummy/public/404.html
381
386
  - spec/dummy/public/422.html
382
387
  - spec/dummy/public/500.html
@@ -394,7 +399,7 @@ homepage: http://instructure.com
394
399
  licenses:
395
400
  - MIT
396
401
  metadata: {}
397
- post_install_message:
402
+ post_install_message:
398
403
  rdoc_options: []
399
404
  require_paths:
400
405
  - lib
@@ -409,52 +414,54 @@ required_rubygems_version: !ruby/object:Gem::Requirement
409
414
  - !ruby/object:Gem::Version
410
415
  version: '0'
411
416
  requirements: []
412
- rubygems_version: 3.1.6
413
- signing_key:
417
+ rubygems_version: 3.5.16
418
+ signing_key:
414
419
  specification_version: 4
415
420
  summary: LTI mountable engine
416
421
  test_files:
417
- - spec/rails_helper.rb
418
- - spec/models/panda_pal/api_call_spec.rb
419
- - spec/models/panda_pal/organization_spec.rb
420
- - spec/models/panda_pal/session_spec.rb
421
- - spec/models/panda_pal/organization/settings_validation_spec.rb
422
- - spec/models/panda_pal/organization/task_scheduling_spec.rb
423
422
  - spec/controllers/panda_pal/api_call_controller_spec.rb
424
- - spec/spec_helper.rb
425
- - spec/dummy/db/schema.rb
426
- - spec/dummy/public/422.html
427
- - spec/dummy/public/favicon.ico
428
- - spec/dummy/public/404.html
429
- - spec/dummy/public/500.html
423
+ - spec/core/apartment_multidb_spec.rb
424
+ - spec/dummy/README.rdoc
430
425
  - spec/dummy/Rakefile
431
- - spec/dummy/app/views/layouts/application.html.erb
426
+ - spec/dummy/app/assets/javascripts/application.js
427
+ - spec/dummy/app/assets/stylesheets/application.css
428
+ - spec/dummy/app/bin/bundle
429
+ - spec/dummy/app/bin/rails
430
+ - spec/dummy/app/bin/rake
431
+ - spec/dummy/app/bin/setup
432
432
  - spec/dummy/app/controllers/application_controller.rb
433
433
  - spec/dummy/app/helpers/application_helper.rb
434
- - spec/dummy/app/assets/stylesheets/application.css
435
- - spec/dummy/app/assets/javascripts/application.js
436
- - spec/dummy/config/secrets.yml
434
+ - spec/dummy/app/views/layouts/application.html.erb
437
435
  - spec/dummy/config/application.rb
438
- - spec/dummy/config/initializers/session_store.rb
439
- - spec/dummy/config/initializers/wrap_parameters.rb
440
- - spec/dummy/config/initializers/inflections.rb
441
- - spec/dummy/config/initializers/filter_parameter_logging.rb
442
- - spec/dummy/config/initializers/mime_types.rb
443
- - spec/dummy/config/initializers/backtrace_silencers.rb
444
- - spec/dummy/config/initializers/cookies_serializer.rb
445
- - spec/dummy/config/environments/development.rb
446
- - spec/dummy/config/environments/test.rb
447
- - spec/dummy/config/environments/production.rb
448
- - spec/dummy/config/database.yml
449
436
  - spec/dummy/config/boot.rb
450
- - spec/dummy/config/routes.rb
437
+ - spec/dummy/config/database.yml
451
438
  - spec/dummy/config/environment.rb
439
+ - spec/dummy/config/environments/development.rb
440
+ - spec/dummy/config/environments/production.rb
441
+ - spec/dummy/config/environments/test.rb
442
+ - spec/dummy/config/initializers/backtrace_silencers.rb
443
+ - spec/dummy/config/initializers/cookies_serializer.rb
444
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
445
+ - spec/dummy/config/initializers/inflections.rb
446
+ - spec/dummy/config/initializers/mime_types.rb
447
+ - spec/dummy/config/initializers/session_store.rb
448
+ - spec/dummy/config/initializers/wrap_parameters.rb
452
449
  - spec/dummy/config/locales/en.yml
453
- - spec/dummy/README.rdoc
450
+ - spec/dummy/config/routes.rb
451
+ - spec/dummy/config/secrets.yml
454
452
  - spec/dummy/config.ru
455
- - spec/dummy/bin/bundle
456
- - spec/dummy/bin/rake
457
- - spec/dummy/bin/setup
458
- - spec/dummy/bin/rails
453
+ - spec/dummy/db/schema.rb
454
+ - spec/dummy/db/test2_schema.rb
455
+ - spec/dummy/public/404.html
456
+ - spec/dummy/public/422.html
457
+ - spec/dummy/public/500.html
458
+ - spec/dummy/public/favicon.ico
459
459
  - spec/factories/panda_pal_organizations.rb
460
460
  - spec/factories/panda_pal_sessions.rb
461
+ - spec/models/panda_pal/api_call_spec.rb
462
+ - spec/models/panda_pal/organization/settings_validation_spec.rb
463
+ - spec/models/panda_pal/organization/task_scheduling_spec.rb
464
+ - spec/models/panda_pal/organization_spec.rb
465
+ - spec/models/panda_pal/session_spec.rb
466
+ - spec/rails_helper.rb
467
+ - spec/spec_helper.rb
File without changes
File without changes
File without changes
File without changes