canvas_sync 0.1.5 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/canvas_sync/generators/templates/create_users.rb +1 -0
- data/lib/canvas_sync/importers/bulk_importer.rb +21 -4
- data/lib/canvas_sync/processors/provisioning_report_processor.rb +2 -1
- data/lib/canvas_sync/version.rb +1 -1
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/{20170831221129_create_users.rb → 20170918221413_create_users.rb} +1 -0
- data/spec/dummy/db/schema.rb +3 -1
- data/spec/dummy/log/development.log +149 -0
- data/spec/dummy/log/test.log +0 -0
- metadata +4 -6
- data/spec/dummy/db/test.sqlite3 +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68b09dd9ca869bb37f08c0691ce54f1efa4abb7e
|
4
|
+
data.tar.gz: 6615009014df4ddcd3b20e602549658fd659e0f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7526df95cf7d7cd2a86d48c95ca57b4da54d9a6e94095318b0eefc5ec08dc37112072e0be0246b655715b21a0c593a0d49fbfc6cf44a6b5ad647ee6aa57188d
|
7
|
+
data.tar.gz: 92b7dd1398562e07cacb45a5b5c54aac29ee4e366b090dbc5fec31e44690d4a211872c6dfe3d0b93c5aa71de5bff3f39da8f82d933f26484516a1fe875c17fd1
|
@@ -36,15 +36,32 @@ module CanvasSync
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
-
def self.perform_import(klass,
|
39
|
+
def self.perform_import(klass, columns, rows, conflict_target)
|
40
40
|
return if rows.length == 0
|
41
|
-
|
42
|
-
klass.import(
|
41
|
+
columns = columns.dup
|
42
|
+
klass.import(columns, rows, validate: false, on_duplicate_key_update: {
|
43
43
|
conflict_target: conflict_target,
|
44
|
-
|
44
|
+
condition: condition_sql(klass, columns),
|
45
|
+
columns: columns
|
45
46
|
})
|
46
47
|
end
|
47
48
|
|
49
|
+
# This method generates SQL that looks like:
|
50
|
+
# (users.sis_id, users.email) IS DISTINCT FROM (EXCLUDED.sis_id, EXCLUDED.email)
|
51
|
+
#
|
52
|
+
# This prevents activerecord-import from setting the `updated_at` column for
|
53
|
+
# rows that haven't actually changed. This allows you to query for rows that have changed
|
54
|
+
# by doing something like:
|
55
|
+
#
|
56
|
+
# started_at = Time.now
|
57
|
+
# run_the_users_sync!
|
58
|
+
# changed = User.where("updated_at >= ?", started_at)
|
59
|
+
def self.condition_sql(klass, columns)
|
60
|
+
columns_str = columns.map { |c| "#{klass.quoted_table_name}.#{c}" }.join(", ")
|
61
|
+
excluded_str = columns.map { |c| "EXCLUDED.#{c}" }.join(", ")
|
62
|
+
"(#{columns_str}) IS DISTINCT FROM (#{excluded_str})"
|
63
|
+
end
|
64
|
+
|
48
65
|
def self.batch_size
|
49
66
|
batch_size = ENV['BULK_IMPORTER_BATCH_SIZE'].to_i
|
50
67
|
batch_size > 0 ? batch_size : DEFAULT_BATCH_SIZE
|
data/lib/canvas_sync/version.rb
CHANGED
Binary file
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20170918221413) do
|
14
14
|
|
15
15
|
create_table "canvas_sync_job_logs", force: :cascade do |t|
|
16
16
|
t.datetime "started_at"
|
@@ -18,6 +18,7 @@ ActiveRecord::Schema.define(version: 20170915210836) do
|
|
18
18
|
t.string "exception"
|
19
19
|
t.text "backtrace"
|
20
20
|
t.string "job_class"
|
21
|
+
t.string "status"
|
21
22
|
t.text "metadata"
|
22
23
|
t.text "job_arguments"
|
23
24
|
t.datetime "created_at", null: false
|
@@ -93,6 +94,7 @@ ActiveRecord::Schema.define(version: 20170915210836) do
|
|
93
94
|
t.string "first_name"
|
94
95
|
t.string "last_name"
|
95
96
|
t.string "status"
|
97
|
+
t.string "login_id"
|
96
98
|
t.datetime "created_at", null: false
|
97
99
|
t.datetime "updated_at", null: false
|
98
100
|
t.index ["canvas_user_id"], name: "index_users_on_canvas_user_id", unique: true
|
@@ -4239,4 +4239,153 @@ Migrating to CreateCanvasSyncJobLog (20170915210836)
|
|
4239
4239
|
SELECT sql
|
4240
4240
|
FROM sqlite_temp_master
|
4241
4241
|
WHERE name='index_users_on_canvas_user_id' AND type='index'
|
4242
|
+
[0m
|
4243
|
+
[1m[35m (0.2ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
4244
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ?[0m [["key", "environment"]]
|
4245
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
4246
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ?[0m [["key", "environment"]]
|
4247
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
4248
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ?[0m [["key", "environment"]]
|
4249
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT sqlite_version(*)[0m
|
4250
|
+
[1m[35m (7.2ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY)[0m
|
4251
|
+
[1m[35m (1.1ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4252
|
+
[1m[35m (0.2ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
4253
|
+
Migrating to CreateEnrollments (20170905192509)
|
4254
|
+
[1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m
|
4255
|
+
[1m[35m (0.4ms)[0m [1m[35mCREATE TABLE "enrollments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "canvas_enrollment_id" bigint NOT NULL, "canvas_course_id" bigint, "course_sis_id" varchar, "canvas_user_id" bigint, "user_sis_id" varchar, "role" varchar, "role_id" integer, "canvas_section_id" bigint, "section_sis_id" varchar, "status" varchar, "base_role_type" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4256
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_enrollments_on_canvas_enrollment_id" ON "enrollments" ("canvas_enrollment_id")[0m
|
4257
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4258
|
+
FROM sqlite_master
|
4259
|
+
WHERE name='index_enrollments_on_canvas_enrollment_id' AND type='index'
|
4260
|
+
UNION ALL
|
4261
|
+
SELECT sql
|
4262
|
+
FROM sqlite_temp_master
|
4263
|
+
WHERE name='index_enrollments_on_canvas_enrollment_id' AND type='index'
|
4264
|
+
[0m
|
4265
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_enrollments_on_canvas_course_id" ON "enrollments" ("canvas_course_id")[0m
|
4266
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4267
|
+
FROM sqlite_master
|
4268
|
+
WHERE name='index_enrollments_on_canvas_course_id' AND type='index'
|
4269
|
+
UNION ALL
|
4270
|
+
SELECT sql
|
4271
|
+
FROM sqlite_temp_master
|
4272
|
+
WHERE name='index_enrollments_on_canvas_course_id' AND type='index'
|
4273
|
+
[0m
|
4274
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4275
|
+
FROM sqlite_master
|
4276
|
+
WHERE name='index_enrollments_on_canvas_enrollment_id' AND type='index'
|
4277
|
+
UNION ALL
|
4278
|
+
SELECT sql
|
4279
|
+
FROM sqlite_temp_master
|
4280
|
+
WHERE name='index_enrollments_on_canvas_enrollment_id' AND type='index'
|
4281
|
+
[0m
|
4282
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_enrollments_on_canvas_user_id" ON "enrollments" ("canvas_user_id")[0m
|
4283
|
+
[1m[35mSQL (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES (?)[0m [["version", "20170905192509"]]
|
4284
|
+
[1m[35m (1.3ms)[0m [1m[36mcommit transaction[0m
|
4285
|
+
Migrating to CreateTerms (20170906193506)
|
4286
|
+
[1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m
|
4287
|
+
[1m[35m (0.4ms)[0m [1m[35mCREATE TABLE "terms" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "canvas_term_id" integer NOT NULL, "name" varchar, "start_at" datetime, "end_at" datetime, "workflow_state" varchar, "grading_period_group_id" integer, "sis_id" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4288
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_terms_on_canvas_term_id" ON "terms" ("canvas_term_id")[0m
|
4289
|
+
[1m[35mSQL (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES (?)[0m [["version", "20170906193506"]]
|
4290
|
+
[1m[35m (1.4ms)[0m [1m[36mcommit transaction[0m
|
4291
|
+
Migrating to CreateSections (20170906203438)
|
4292
|
+
[1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m
|
4293
|
+
[1m[35m (0.4ms)[0m [1m[35mCREATE TABLE "sections" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "canvas_section_id" bigint NOT NULL, "sis_id" varchar, "canvas_course_id" bigint, "name" varchar, "status" varchar, "start_date" datetime, "end_date" datetime, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4294
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_sections_on_canvas_section_id" ON "sections" ("canvas_section_id")[0m
|
4295
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4296
|
+
FROM sqlite_master
|
4297
|
+
WHERE name='index_sections_on_canvas_section_id' AND type='index'
|
4298
|
+
UNION ALL
|
4299
|
+
SELECT sql
|
4300
|
+
FROM sqlite_temp_master
|
4301
|
+
WHERE name='index_sections_on_canvas_section_id' AND type='index'
|
4302
|
+
[0m
|
4303
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE INDEX "index_sections_on_canvas_course_id" ON "sections" ("canvas_course_id")[0m
|
4304
|
+
[1m[35mSQL (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES (?)[0m [["version", "20170906203438"]]
|
4305
|
+
[1m[35m (0.8ms)[0m [1m[36mcommit transaction[0m
|
4306
|
+
Migrating to CreateCourses (20170914181345)
|
4307
|
+
[1m[35m (0.0ms)[0m [1m[36mbegin transaction[0m
|
4308
|
+
[1m[35m (0.3ms)[0m [1m[35mCREATE TABLE "courses" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "canvas_course_id" bigint NOT NULL, "sis_id" varchar, "short_name" varchar, "long_name" varchar, "status" varchar, "canvas_account_id" integer, "canvas_term_id" integer, "term_sis_id" integer, "start_date" datetime, "end_date" datetime, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4309
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_courses_on_canvas_course_id" ON "courses" ("canvas_course_id")[0m
|
4310
|
+
[1m[35mSQL (0.2ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES (?)[0m [["version", "20170914181345"]]
|
4311
|
+
[1m[35m (1.0ms)[0m [1m[36mcommit transaction[0m
|
4312
|
+
Migrating to CreateCanvasSyncJobLog (20170915210836)
|
4313
|
+
[1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m
|
4314
|
+
[1m[35m (0.3ms)[0m [1m[35mCREATE TABLE "canvas_sync_job_logs" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "started_at" datetime, "completed_at" datetime, "exception" varchar, "backtrace" text, "job_class" varchar, "status" varchar, "metadata" text, "job_arguments" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4315
|
+
[1m[35mSQL (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES (?)[0m [["version", "20170915210836"]]
|
4316
|
+
[1m[35m (0.8ms)[0m [1m[36mcommit transaction[0m
|
4317
|
+
Migrating to CreateUsers (20170918221413)
|
4318
|
+
[1m[35m (0.0ms)[0m [1m[36mbegin transaction[0m
|
4319
|
+
[1m[35m (0.3ms)[0m [1m[35mCREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "canvas_user_id" bigint NOT NULL, "sis_id" varchar, "email" varchar, "first_name" varchar, "last_name" varchar, "status" varchar, "login_id" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)[0m
|
4320
|
+
[1m[35m (0.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_users_on_canvas_user_id" ON "users" ("canvas_user_id")[0m
|
4321
|
+
[1m[35mSQL (0.1ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES (?)[0m [["version", "20170918221413"]]
|
4322
|
+
[1m[35m (1.0ms)[0m [1m[36mcommit transaction[0m
|
4323
|
+
[1m[36mActiveRecord::InternalMetadata Load (0.1ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? LIMIT ?[0m [["key", "environment"], ["LIMIT", 1]]
|
4324
|
+
[1m[35m (0.0ms)[0m [1m[36mbegin transaction[0m
|
4325
|
+
[1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?)[0m [["key", "environment"], ["value", "development"], ["created_at", "2017-09-18 22:14:19.660824"], ["updated_at", "2017-09-18 22:14:19.660824"]]
|
4326
|
+
[1m[35m (1.0ms)[0m [1m[36mcommit transaction[0m
|
4327
|
+
[1m[35m (0.1ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
4328
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4329
|
+
FROM sqlite_master
|
4330
|
+
WHERE name='index_courses_on_canvas_course_id' AND type='index'
|
4331
|
+
UNION ALL
|
4332
|
+
SELECT sql
|
4333
|
+
FROM sqlite_temp_master
|
4334
|
+
WHERE name='index_courses_on_canvas_course_id' AND type='index'
|
4335
|
+
[0m
|
4336
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4337
|
+
FROM sqlite_master
|
4338
|
+
WHERE name='index_enrollments_on_canvas_user_id' AND type='index'
|
4339
|
+
UNION ALL
|
4340
|
+
SELECT sql
|
4341
|
+
FROM sqlite_temp_master
|
4342
|
+
WHERE name='index_enrollments_on_canvas_user_id' AND type='index'
|
4343
|
+
[0m
|
4344
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4345
|
+
FROM sqlite_master
|
4346
|
+
WHERE name='index_enrollments_on_canvas_course_id' AND type='index'
|
4347
|
+
UNION ALL
|
4348
|
+
SELECT sql
|
4349
|
+
FROM sqlite_temp_master
|
4350
|
+
WHERE name='index_enrollments_on_canvas_course_id' AND type='index'
|
4351
|
+
[0m
|
4352
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4353
|
+
FROM sqlite_master
|
4354
|
+
WHERE name='index_enrollments_on_canvas_enrollment_id' AND type='index'
|
4355
|
+
UNION ALL
|
4356
|
+
SELECT sql
|
4357
|
+
FROM sqlite_temp_master
|
4358
|
+
WHERE name='index_enrollments_on_canvas_enrollment_id' AND type='index'
|
4359
|
+
[0m
|
4360
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4361
|
+
FROM sqlite_master
|
4362
|
+
WHERE name='index_sections_on_canvas_course_id' AND type='index'
|
4363
|
+
UNION ALL
|
4364
|
+
SELECT sql
|
4365
|
+
FROM sqlite_temp_master
|
4366
|
+
WHERE name='index_sections_on_canvas_course_id' AND type='index'
|
4367
|
+
[0m
|
4368
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4369
|
+
FROM sqlite_master
|
4370
|
+
WHERE name='index_sections_on_canvas_section_id' AND type='index'
|
4371
|
+
UNION ALL
|
4372
|
+
SELECT sql
|
4373
|
+
FROM sqlite_temp_master
|
4374
|
+
WHERE name='index_sections_on_canvas_section_id' AND type='index'
|
4375
|
+
[0m
|
4376
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4377
|
+
FROM sqlite_master
|
4378
|
+
WHERE name='index_terms_on_canvas_term_id' AND type='index'
|
4379
|
+
UNION ALL
|
4380
|
+
SELECT sql
|
4381
|
+
FROM sqlite_temp_master
|
4382
|
+
WHERE name='index_terms_on_canvas_term_id' AND type='index'
|
4383
|
+
[0m
|
4384
|
+
[1m[35m (0.1ms)[0m [1m[34m SELECT sql
|
4385
|
+
FROM sqlite_master
|
4386
|
+
WHERE name='index_users_on_canvas_user_id' AND type='index'
|
4387
|
+
UNION ALL
|
4388
|
+
SELECT sql
|
4389
|
+
FROM sqlite_temp_master
|
4390
|
+
WHERE name='index_users_on_canvas_user_id' AND type='index'
|
4242
4391
|
[0m
|
data/spec/dummy/log/test.log
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: canvas_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nate Collings
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -346,13 +346,12 @@ files:
|
|
346
346
|
- spec/dummy/config/routes.rb
|
347
347
|
- spec/dummy/config/secrets.yml
|
348
348
|
- spec/dummy/db/development.sqlite3
|
349
|
-
- spec/dummy/db/migrate/20170831221129_create_users.rb
|
350
349
|
- spec/dummy/db/migrate/20170905192509_create_enrollments.rb
|
351
350
|
- spec/dummy/db/migrate/20170906193506_create_terms.rb
|
352
351
|
- spec/dummy/db/migrate/20170906203438_create_sections.rb
|
353
352
|
- spec/dummy/db/migrate/20170914181345_create_courses.rb
|
353
|
+
- spec/dummy/db/migrate/20170918221413_create_users.rb
|
354
354
|
- spec/dummy/db/schema.rb
|
355
|
-
- spec/dummy/db/test.sqlite3
|
356
355
|
- spec/dummy/log/development.log
|
357
356
|
- spec/dummy/log/test.log
|
358
357
|
- spec/factories/course_factory.rb
|
@@ -430,13 +429,12 @@ test_files:
|
|
430
429
|
- spec/dummy/config/routes.rb
|
431
430
|
- spec/dummy/config/secrets.yml
|
432
431
|
- spec/dummy/db/development.sqlite3
|
433
|
-
- spec/dummy/db/migrate/20170831221129_create_users.rb
|
434
432
|
- spec/dummy/db/migrate/20170905192509_create_enrollments.rb
|
435
433
|
- spec/dummy/db/migrate/20170906193506_create_terms.rb
|
436
434
|
- spec/dummy/db/migrate/20170906203438_create_sections.rb
|
437
435
|
- spec/dummy/db/migrate/20170914181345_create_courses.rb
|
436
|
+
- spec/dummy/db/migrate/20170918221413_create_users.rb
|
438
437
|
- spec/dummy/db/schema.rb
|
439
|
-
- spec/dummy/db/test.sqlite3
|
440
438
|
- spec/dummy/log/development.log
|
441
439
|
- spec/dummy/log/test.log
|
442
440
|
- spec/factories/course_factory.rb
|
data/spec/dummy/db/test.sqlite3
DELETED
Binary file
|