sis_core 1.0.4 → 1.0.9

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/sis/core/application_controller.rb +10 -2
  3. data/app/controllers/sis/core/menus_controller.rb +22 -0
  4. data/app/controllers/sis/core/users_controller.rb +71 -0
  5. data/app/models/sis/core/academic_programme.rb +15 -5
  6. data/app/models/sis/core/academic_year.rb +1 -1
  7. data/app/models/sis/core/applicant.rb +18 -1
  8. data/app/models/sis/core/application.rb +6 -3
  9. data/app/models/sis/core/application_document.rb +3 -1
  10. data/app/models/sis/core/application_module.rb +8 -0
  11. data/app/models/sis/core/application_setup.rb +18 -9
  12. data/app/models/sis/core/document_requirement.rb +4 -1
  13. data/app/models/sis/core/exam.rb +7 -1
  14. data/app/models/sis/core/exam_result.rb +7 -1
  15. data/app/models/sis/core/exam_setup.rb +12 -4
  16. data/app/models/sis/core/menu.rb +11 -0
  17. data/app/models/sis/core/programme_level.rb +1 -1
  18. data/app/models/sis/core/semester.rb +2 -0
  19. data/app/models/sis/core/user.rb +13 -0
  20. data/app/models/sis/core/user_role.rb +10 -0
  21. data/app/services/sis/core/user_service.rb +25 -0
  22. data/app/uploaders/sis/core/application_document_uploader.rb +51 -0
  23. data/app/uploaders/sis/core/photo_uploader.rb +51 -0
  24. data/config/routes.rb +6 -0
  25. data/db/migrate/20200106133937_create_sis_core_applicants.rb +17 -3
  26. data/db/migrate/20200107094449_create_sis_core_applications.rb +4 -6
  27. data/db/migrate/20200107101638_create_sis_core_application_documents.rb +1 -1
  28. data/db/migrate/20200507114003_create_sis_core_users.rb +17 -0
  29. data/db/migrate/20200511165121_create_sis_core_application_modules.rb +15 -0
  30. data/db/migrate/20200511165241_create_sis_core_user_roles.rb +15 -0
  31. data/db/migrate/20200511165450_create_sis_core_menus.rb +18 -0
  32. data/lib/authorize_request.rb +18 -0
  33. data/lib/json_web_token.rb +12 -0
  34. data/lib/sis/core/engine.rb +2 -0
  35. data/lib/sis/core/version.rb +1 -1
  36. data/lib/sis_core.rb +4 -2
  37. data/spec/factories/sis/core/academic_years.rb +1 -1
  38. data/spec/factories/sis/core/applicants.rb +11 -2
  39. data/spec/factories/sis/core/application_modules.rb +6 -0
  40. data/spec/factories/sis/core/applications.rb +1 -6
  41. data/spec/factories/sis/core/menus.rb +9 -0
  42. data/spec/factories/sis/core/programme_levels.rb +1 -1
  43. data/spec/factories/sis/core/user_roles.rb +6 -0
  44. data/spec/factories/sis/core/users.rb +9 -0
  45. metadata +87 -14
  46. data/app/models/sis/core/staff.rb +0 -21
  47. data/app/models/user.rb +0 -12
  48. data/config/initializers/devise_token_auth.rb +0 -55
  49. data/db/migrate/20200108092202_devise_token_auth_create_users.rb +0 -53
  50. data/db/migrate/20200316120805_create_sis_core_staffs.rb +0 -31
  51. data/db/migrate/20200319074334_modify_user.rb +0 -16
  52. data/spec/factories/sis/core/staffs.rb +0 -35
  53. data/spec/factories/users.rb +0 -11
@@ -0,0 +1,51 @@
1
+ module Sis
2
+ module Core
3
+ class PhotoUploader < CarrierWave::Uploader::Base
4
+ # Include RMagick or MiniMagick support:
5
+ # include CarrierWave::RMagick
6
+ # include CarrierWave::MiniMagick
7
+
8
+ # Choose what kind of storage to use for this uploader:
9
+ storage :file
10
+ # storage :fog
11
+
12
+ # Override the directory where uploaded files will be stored.
13
+ # This is a sensible default for uploaders that are meant to be mounted:
14
+ def store_dir
15
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
16
+ end
17
+
18
+ # Provide a default URL as a default if there hasn't been a file uploaded:
19
+ # def default_url(*args)
20
+ # # For Rails 3.1+ asset pipeline compatibility:
21
+ # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
22
+ #
23
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
24
+ # end
25
+
26
+ # Process files as they are uploaded:
27
+ # process scale: [200, 300]
28
+ #
29
+ # def scale(width, height)
30
+ # # do something
31
+ # end
32
+
33
+ # Create different versions of your uploaded files:
34
+ # version :thumb do
35
+ # process resize_to_fit: [50, 50]
36
+ # end
37
+
38
+ # Add a white list of extensions which are allowed to be uploaded.
39
+ # For images you might use something like this:
40
+ def extension_whitelist
41
+ %w[jpg jpeg gif png]
42
+ end
43
+
44
+ # Override the filename of the uploaded files:
45
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
46
+ # def filename
47
+ # "something.jpg" if original_filename
48
+ # end
49
+ end
50
+ end
51
+ end
@@ -1,2 +1,8 @@
1
1
  Sis::Core::Engine.routes.draw do
2
+ resources :users, only: [:create]
3
+ post '/login', controller: :users, action: :login
4
+ get '/menus', controller: :menus, action: :menu
5
+ post '/sign_in', controller: :users, action: :sign_in
6
+ post '/generate_recovery_token', controller: :users, action: :generate_recovery_token
7
+ post '/reset_password', controller: :users, action: :reset_password
2
8
  end
@@ -1,9 +1,23 @@
1
1
  class CreateSisCoreApplicants < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_applicants do |t|
4
- t.string :full_name, null: false
5
- t.string :email, null: false, unique: true
6
- t.string :phone_number, null: false
4
+ t.string :first_name, null: false
5
+ t.string :middle_name, null: false
6
+ t.string :last_name, null: false
7
+ t.string :password_digest, null: false
8
+ t.string :email, null: false
9
+ t.string :alternative_email_address
10
+ t.string :primary_phone_number
11
+ t.string :alternative_telephone_number
12
+ t.date :date_of_birth
13
+ t.string :gender
14
+ t.string :nationality
15
+ t.string :address
16
+ t.string :photo
17
+ t.string :reset_password_token
18
+ t.datetime :reset_password_sent_at
19
+ t.string :secret_question
20
+ t.string :secret_question_answer
7
21
 
8
22
  t.timestamps
9
23
  end
@@ -1,14 +1,8 @@
1
1
  class CreateSisCoreApplications < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_applications do |t|
4
- t.string :full_name, null: false
5
- t.string :email, null: false
6
- t.integer :age, null: false
7
- t.string :gender, null: false
8
- t.string :nationality, null: false
9
4
  t.string :status, null: false, default: 'Draft'
10
5
  t.boolean :payment_made, null: false, default: false
11
- t.string :address
12
6
  t.string :payment_information
13
7
  t.date :application_date
14
8
  t.references :applicant,
@@ -19,6 +13,10 @@ class CreateSisCoreApplications < ActiveRecord::Migration[6.0]
19
13
  null: false,
20
14
  index: { name: 'applications_on_ap_indx' },
21
15
  foreign_key: { to_table: :sis_core_academic_programmes }
16
+ t.references :application_setup,
17
+ null: false,
18
+ index: { name: 'application_setup_on_ap_indx' },
19
+ foreign_key: { to_table: :sis_core_application_setups }
22
20
 
23
21
  t.timestamps
24
22
  end
@@ -1,7 +1,7 @@
1
1
  class CreateSisCoreApplicationDocuments < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_application_documents do |t|
4
- t.string :document, null: false
4
+ t.string :document
5
5
  t.references :document_requirement,
6
6
  null: false,
7
7
  index: { name: 'ad_on_adr_indx' },
@@ -0,0 +1,17 @@
1
+ class CreateSisCoreUsers < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_users do |t|
4
+ t.string :first_name, null: false
5
+ t.string :last_name, null: false
6
+ t.string :email, null: false
7
+ t.boolean :active, default: true
8
+ t.string :password_digest, null: false
9
+ t.string :reset_password_token
10
+ t.datetime :reset_password_sent_at
11
+ t.string :secret_question
12
+ t.string :secret_question_answer
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ class CreateSisCoreApplicationModules < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_application_modules do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+
7
+ t.timestamps
8
+ end
9
+
10
+ create_table :sis_core_application_modules_users, id: false do |t|
11
+ t.belongs_to :application_module, index: { name: 'app_module_on_app_modules_usr_indx' }
12
+ t.belongs_to :user, index: { name: 'usr_on_app_modules_usr_indx' }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateSisCoreUserRoles < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_user_roles do |t|
4
+ t.string :name, null: false
5
+ t.references :application_module, index: { name: 'app_module_on_usr_role_indx' }
6
+
7
+ t.timestamps
8
+ end
9
+
10
+ create_table :sis_core_user_roles_users, id: false do |t|
11
+ t.belongs_to :user, index: { name: 'usr_on_usr_role_usrs_indx' }
12
+ t.belongs_to :user_role, index: { name: 'usr_role_on_usr_role_usrs_indx' }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ class CreateSisCoreMenus < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_menus do |t|
4
+ t.string :text, null: false
5
+ t.string :icon_cls
6
+ t.string :location
7
+ t.integer :parent_id
8
+ t.references :application_module, index: { name: 'app_module_on_menus_indx' }
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ create_table :sis_core_menus_user_roles, id: false do |t|
14
+ t.belongs_to :menu, index: { name: 'menu_on_menus_usr_role_indx' }
15
+ t.belongs_to :user_role, index: { name: 'usr_role_on_menus_usr_role_indx' }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ class AuthorizeRequest
2
+ class << self
3
+ def user(headers)
4
+ @user ||= User.find(decoded_auth_token(headers)[:id]) if decoded_auth_token(headers)
5
+ @user || nil
6
+ end
7
+
8
+ def decoded_auth_token(headers)
9
+ @decoded_auth_token ||= JsonWebToken.decode(http_auth_header(headers)) if http_auth_header(headers)
10
+ end
11
+
12
+ def http_auth_header(headers)
13
+ return headers['Authorization'].split(' ').last if headers['Authorization'].present?
14
+
15
+ nil
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ class JsonWebToken
2
+ class << self
3
+ def encode(payload)
4
+ JWT.encode(payload, Rails.application.secrets.secret_key_base)
5
+ end
6
+
7
+ def decode(token)
8
+ body = JWT.decode(token, Rails.application.secrets.secret_key_base)[0]
9
+ HashWithIndifferentAccess.new body
10
+ end
11
+ end
12
+ end
@@ -4,6 +4,8 @@ module Sis
4
4
  isolate_namespace Sis::Core
5
5
 
6
6
  config.generators.api_only = true
7
+ config.eager_load_paths << Sis::Core::Engine.root.join('lib')
8
+ config.autoload_paths << Sis::Core::Engine.root.join('lib')
7
9
 
8
10
  config.generators do |g|
9
11
  g.test_framework :rspec
@@ -1,5 +1,5 @@
1
1
  module Sis
2
2
  module Core
3
- VERSION = '1.0.4'.freeze
3
+ VERSION = '1.0.9'.freeze
4
4
  end
5
5
  end
@@ -1,5 +1,7 @@
1
1
  require 'sis/core'
2
2
  require 'sis/core/engine'
3
- require 'devise_token_auth'
3
+ require 'jwt'
4
+ require 'bcrypt'
4
5
  require 'aasm'
5
- require 'active_model_serializers'
6
+ require 'active_model_serializers'
7
+ require 'carrierwave'
@@ -1,6 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :academic_year, class: Sis::Core::AcademicYear do
3
- year { '2000/01' }
3
+ year { FFaker::Name.name }
4
4
  label { 'Academic year of 2000/01' }
5
5
  end
6
6
  end
@@ -1,7 +1,16 @@
1
1
  FactoryBot.define do
2
2
  factory :applicant, class: Sis::Core::Applicant do
3
- full_name { FFaker::Name.name }
3
+ first_name { FFaker::Name.name }
4
+ middle_name { FFaker::Name.name }
5
+ last_name { FFaker::Name.name }
6
+ password { FFaker::Name.name }
4
7
  email { FFaker::Internet.email }
5
- phone_number { FFaker::PhoneNumber.phone_number }
8
+ primary_phone_number { FFaker::PhoneNumber.phone_number }
9
+ alternative_telephone_number { FFaker::PhoneNumber.phone_number }
10
+ date_of_birth { '2000-10-05' }
11
+ gender { FFaker::Gender.binary }
12
+ nationality { FFaker::Name.name }
13
+ address { FFaker::Address.city }
14
+ photo { FFaker::Name.name }
6
15
  end
7
16
  end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :application_module, class: Sis::Core::ApplicationModule do
3
+ code { FFaker::Name.unique.name }
4
+ name { FFaker::Name.name }
5
+ end
6
+ end
@@ -1,16 +1,11 @@
1
1
  FactoryBot.define do
2
2
  factory :application, class: Sis::Core::Application do
3
- full_name { FFaker::Name.name }
4
- email { FFaker::Internet.email }
5
- age { FFaker::Random.rand(20..30) }
6
- gender { Sis::Core::Application::MALE }
7
- nationality { FFaker::Address.country }
8
3
  status { :draft }
9
4
  payment_made { false }
10
5
  payment_information { nil }
11
- address { FFaker::Address.street_address }
12
6
  application_date { Date.today }
13
7
  association :applicant
14
8
  association :academic_programme
9
+ association :application_setup
15
10
  end
16
11
  end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :menu, class: Sis::Core::Menu do
3
+ text { FFaker::Name.name }
4
+ icon_cls { 'xf001' }
5
+ location { '/programme' }
6
+ parent_id { nil }
7
+ association :application_module
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  FactoryBot.define do
2
2
  factory :programme_level, class: Sis::Core::ProgrammeLevel, parent: :lookup do
3
- type { 'Ecom::Core::ProgrammeLevel' }
3
+ type { 'Sis::Core::ProgrammeLevel' }
4
4
  end
5
5
  end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :user_role, class: Sis::Core::UserRole do
3
+ name { FFaker::Name.name }
4
+ association :application_module
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :user, class: Sis::Core::User do
3
+ first_name { FFaker::Name.name }
4
+ last_name { FFaker::Name.name }
5
+ email { FFaker::Internet.email }
6
+ active { false }
7
+ password { FFaker::Name.name }
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sis_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-25 00:00:00.000000000 Z
11
+ date: 2020-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -39,7 +39,49 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.10.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: devise_token_auth
42
+ name: bcrypt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.1.7
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.1.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: carrierwave
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: carrierwave-base64
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jwt
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
87
  - - ">="
@@ -72,6 +114,20 @@ dependencies:
72
114
  - - ">="
73
115
  - !ruby/object:Gem::Version
74
116
  version: 6.0.2.1
117
+ - !ruby/object:Gem::Dependency
118
+ name: sqlite3
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
75
131
  - !ruby/object:Gem::Dependency
76
132
  name: factory_bot_rails
77
133
  requirement: !ruby/object:Gem::Requirement
@@ -143,19 +199,25 @@ dependencies:
143
199
  - !ruby/object:Gem::Version
144
200
  version: '0'
145
201
  - !ruby/object:Gem::Dependency
146
- name: sqlite3
202
+ name: pg
147
203
  requirement: !ruby/object:Gem::Requirement
148
204
  requirements:
149
205
  - - ">="
150
206
  - !ruby/object:Gem::Version
151
- version: '0'
207
+ version: '0.18'
208
+ - - "<"
209
+ - !ruby/object:Gem::Version
210
+ version: '2.0'
152
211
  type: :development
153
212
  prerelease: false
154
213
  version_requirements: !ruby/object:Gem::Requirement
155
214
  requirements:
156
215
  - - ">="
157
216
  - !ruby/object:Gem::Version
158
- version: '0'
217
+ version: '0.18'
218
+ - - "<"
219
+ - !ruby/object:Gem::Version
220
+ version: '2.0'
159
221
  description: An engine which contains the core of the student information system app
160
222
  as a layer.
161
223
  email:
@@ -168,11 +230,14 @@ files:
168
230
  - README.md
169
231
  - Rakefile
170
232
  - app/controllers/sis/core/application_controller.rb
233
+ - app/controllers/sis/core/menus_controller.rb
234
+ - app/controllers/sis/core/users_controller.rb
171
235
  - app/models/sis/core/academic_programme.rb
172
236
  - app/models/sis/core/academic_year.rb
173
237
  - app/models/sis/core/applicant.rb
174
238
  - app/models/sis/core/application.rb
175
239
  - app/models/sis/core/application_document.rb
240
+ - app/models/sis/core/application_module.rb
176
241
  - app/models/sis/core/application_record.rb
177
242
  - app/models/sis/core/application_setup.rb
178
243
  - app/models/sis/core/course.rb
@@ -186,15 +251,18 @@ files:
186
251
  - app/models/sis/core/instructor.rb
187
252
  - app/models/sis/core/instructor_course.rb
188
253
  - app/models/sis/core/lookup.rb
254
+ - app/models/sis/core/menu.rb
189
255
  - app/models/sis/core/programme.rb
190
256
  - app/models/sis/core/programme_level.rb
191
257
  - app/models/sis/core/programme_type.rb
192
258
  - app/models/sis/core/semester.rb
193
- - app/models/sis/core/staff.rb
194
259
  - app/models/sis/core/student.rb
195
- - app/models/user.rb
260
+ - app/models/sis/core/user.rb
261
+ - app/models/sis/core/user_role.rb
262
+ - app/services/sis/core/user_service.rb
263
+ - app/uploaders/sis/core/application_document_uploader.rb
264
+ - app/uploaders/sis/core/photo_uploader.rb
196
265
  - config/database.ci.yml
197
- - config/initializers/devise_token_auth.rb
198
266
  - config/routes.rb
199
267
  - db/migrate/20200105061717_create_sis_core_lookups.rb
200
268
  - db/migrate/20200105072142_create_sis_core_academic_years.rb
@@ -209,14 +277,17 @@ files:
209
277
  - db/migrate/20200107302251_create_sis_core_exam_setups.rb
210
278
  - db/migrate/20200107333411_create_sis_core_exams.rb
211
279
  - db/migrate/20200107434658_create_sis_core_exam_results.rb
212
- - db/migrate/20200108092202_devise_token_auth_create_users.rb
213
280
  - db/migrate/20200307033100_create_sis_core_courses.rb
214
281
  - db/migrate/20200307071511_create_sis_core_instructors.rb
215
282
  - db/migrate/20200307071736_create_sis_core_instructor_courses.rb
216
283
  - db/migrate/20200307072006_create_sis_core_students.rb
217
284
  - db/migrate/20200307072317_create_sis_core_course_registrations.rb
218
- - db/migrate/20200316120805_create_sis_core_staffs.rb
219
- - db/migrate/20200319074334_modify_user.rb
285
+ - db/migrate/20200507114003_create_sis_core_users.rb
286
+ - db/migrate/20200511165121_create_sis_core_application_modules.rb
287
+ - db/migrate/20200511165241_create_sis_core_user_roles.rb
288
+ - db/migrate/20200511165450_create_sis_core_menus.rb
289
+ - lib/authorize_request.rb
290
+ - lib/json_web_token.rb
220
291
  - lib/sis/core.rb
221
292
  - lib/sis/core/engine.rb
222
293
  - lib/sis/core/version.rb
@@ -226,6 +297,7 @@ files:
226
297
  - spec/factories/sis/core/academic_years.rb
227
298
  - spec/factories/sis/core/applicants.rb
228
299
  - spec/factories/sis/core/application_documents.rb
300
+ - spec/factories/sis/core/application_modules.rb
229
301
  - spec/factories/sis/core/application_setups.rb
230
302
  - spec/factories/sis/core/applications.rb
231
303
  - spec/factories/sis/core/course_registrations.rb
@@ -238,13 +310,14 @@ files:
238
310
  - spec/factories/sis/core/instructor_courses.rb
239
311
  - spec/factories/sis/core/instructors.rb
240
312
  - spec/factories/sis/core/lookups.rb
313
+ - spec/factories/sis/core/menus.rb
241
314
  - spec/factories/sis/core/programme_levels.rb
242
315
  - spec/factories/sis/core/programme_types.rb
243
316
  - spec/factories/sis/core/programmes.rb
244
317
  - spec/factories/sis/core/semesters.rb
245
- - spec/factories/sis/core/staffs.rb
246
318
  - spec/factories/sis/core/students.rb
247
- - spec/factories/users.rb
319
+ - spec/factories/sis/core/user_roles.rb
320
+ - spec/factories/sis/core/users.rb
248
321
  homepage: http://www.mks.com.et
249
322
  licenses:
250
323
  - MIT