Matcher 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c3b170469b6bb0fe730e24869a5fe3dac9f347ed
4
+ data.tar.gz: a091380e5c0dd4c700f405e49d3d8752051ef141
5
+ SHA512:
6
+ metadata.gz: 13d9d953c23070e3aa531a57a72a296f4e909e7cfc938a74905ca901491a8411e837b0f0df0b2d97b1e2e263253c3b89a884a426bb36417b51b6fd54d10f56a7
7
+ data.tar.gz: 870351ee9732190197e250f5f7daca34286048f70445d40043b0d8330c69b446155275e74d8812673037d56f1776d7d2af6c47d7fdb8dcc75e2365c8e655cc76
data/lib/MockDb.rb ADDED
@@ -0,0 +1,158 @@
1
+ require_relative 'Student'
2
+
3
+
4
+ module MockDb
5
+ def self.tutors
6
+ return [
7
+ {
8
+ "headline" => "I am a tutor",
9
+ "description" => "i am a professional Javascript instructor",
10
+ "years_teaching" => "3",
11
+ "teaching_style" => "Fast",
12
+ "work_experience" => [
13
+ {
14
+ "company" => "Apple",
15
+ "location" => "California",
16
+ "title" => "Product Designer",
17
+ "from" => "Tue, 05 Nov 2015",
18
+ "to" => "Wed, 10 Sept 2017"
19
+ }
20
+ ],
21
+ "education" => [
22
+ {
23
+ "school" => "National College of Ireland",
24
+ "degree" => "MSc Cloud Computing",
25
+ "graduated" => "Fri, 12 Nov 2014"
26
+ }
27
+
28
+ ],
29
+ "subjects" => [
30
+ "Javascript",
31
+ "Computing",
32
+ "Cloud Computing"
33
+ ],
34
+ "badge" => "3"
35
+ },
36
+ {
37
+ "headline" => "I am another tutor",
38
+ "description" => "i am a professional Rails instructor",
39
+ "years_teaching" => "5",
40
+ "teaching_style" => "Medium",
41
+ "work_experience" => [
42
+ {
43
+ "company" => "Intel",
44
+ "location" => "Michigan",
45
+ "title" => "Backend Developer",
46
+ "from" => "Tue, 05 Nov 2012",
47
+ "to" => "Wed, 10 Sept 2014"
48
+ }
49
+ ],
50
+ "education" => [
51
+ {
52
+ "school" => "National College of Ireland",
53
+ "degree" => "MSc Data Analytics",
54
+ "graduated" => "Fri, 12 Nov 2014"
55
+ }
56
+
57
+ ],
58
+ "subjects" => [
59
+ "Ruby",
60
+ "Computer Science",
61
+ "Data Analytics"
62
+ ],
63
+ "badge" => "1"
64
+ },
65
+ {
66
+ "headline" => "Looking to impact lives",
67
+ "description" => "i am a Physics instructor with over 5 years in experience",
68
+ "years_teaching" => "10",
69
+ "teaching_style" => "Slow",
70
+ "work_experience" => [
71
+ {
72
+ "company" => "Facebook",
73
+ "location" => "Palo Alto",
74
+ "title" => "Data Scientist",
75
+ "from" => "Tue, 05 Nov 2004",
76
+ "to" => "Wed, 10 Sept 2012"
77
+ }
78
+ ],
79
+ "education" => [
80
+ {
81
+ "school" => "Harvard University",
82
+ "degree" => "MSc Physics",
83
+ "graduated" => "Fri, 15 Sept 2002"
84
+ }
85
+
86
+ ],
87
+ "subjects" => [
88
+ "Physics",
89
+ "Mathematics",
90
+ "Computer Science"
91
+ ],
92
+ "badge" => "5"
93
+ },
94
+ {
95
+ "headline" => "A professional Finance instructor",
96
+ "description" => "i am a Finance intructor with over 8 years in the finance industry",
97
+ "years_teaching" => "6",
98
+ "teaching_style" => "Fast",
99
+ "work_experience" => [
100
+ {
101
+ "company" => "JP Morgan",
102
+ "location" => "New York",
103
+ "title" => "Financial Analyst",
104
+ "from" => "Tue, 05 Nov 2006",
105
+ "to" => "Wed, 10 Sept 2012"
106
+ }
107
+ ],
108
+ "education" => [
109
+ {
110
+ "school" => "National University of Ireland",
111
+ "degree" => "MSc Finance",
112
+ "graduated" => "Fri, 15 Sept 2005"
113
+ }
114
+
115
+ ],
116
+ "subjects" => [
117
+ "Business Management",
118
+ "Finance",
119
+ "Accounting"
120
+ ],
121
+ "badge" => nil
122
+ },
123
+ {
124
+ "headline" => "Chemical Engineering tutor",
125
+ "description" => "i am a Chemical Engineer with a huge knowledge base in the subject",
126
+ "years_teaching" => "3",
127
+ "teaching_style" => "Medium",
128
+ "work_experience" => [
129
+ {
130
+ "company" => "Pfizer",
131
+ "location" => "New York",
132
+ "title" => "Chemical Engineer",
133
+ "from" => "Tue, 05 Nov 2006",
134
+ "to" => "Wed, 10 Sept 2012"
135
+ }
136
+ ],
137
+ "education" => [
138
+ {
139
+ "school" => "National University of Ireland",
140
+ "degree" => "MSc Chemical Engineering",
141
+ "graduated" => "Fri, 15 Sept 2004"
142
+ }
143
+
144
+ ],
145
+ "subjects" => [
146
+ "Biochemistry",
147
+ "Chemistry",
148
+ "Sciences"
149
+ ],
150
+ "badge" => nil
151
+ },
152
+ ]
153
+ end
154
+
155
+ def self.student
156
+ return MyUser;
157
+ end
158
+ end
data/lib/Student.rb ADDED
@@ -0,0 +1,27 @@
1
+ module MyUser
2
+ def self.student_props
3
+ return {
4
+ "id" => "3",
5
+ "email" => "timbrewer@gmail.com",
6
+ "firstname" => "Tim",
7
+ "lastname" => "Brewer",
8
+ "role" => "Student",
9
+ "gender" => "Male",
10
+ "has_profile" => "true",
11
+ "location" => "Dublin"
12
+ }
13
+ end
14
+
15
+ def self.student
16
+ return {
17
+ "education_level" => "University",
18
+ "description" => "A student ready to learn",
19
+ "subjects_of_interest" => [
20
+ {"subject" => "Mathematics", "competency" => "1"},
21
+ {"subject" => "Chemistry", "competency" => "2"},
22
+ {"subject" => "Finance" , "competency" => "3"}
23
+ ],
24
+ "student_id" => "3"
25
+ }
26
+ end
27
+ end
data/lib/matcher.rb ADDED
@@ -0,0 +1,60 @@
1
+ require_relative 'MockDb'
2
+
3
+ class Matcher
4
+ #before_action :set_student
5
+
6
+ def self.getRecommendation(student, tutors)
7
+ @profile = student.student()
8
+ #check subjects students are interested in and their competency level
9
+ @studentSubjects = @profile["subjects_of_interest"]
10
+
11
+ #initialize an empty array to store list of recommended tutors
12
+ @recommendedTutors = []
13
+
14
+ #loop tutors array
15
+ #match tutor subjects with student subjects
16
+ #create an array of all subjects that match
17
+ #create an array for every tutor that has at least one match
18
+ #store competency count to store the
19
+ tutors.each do |d|
20
+ tutorSubjects = d["subjects"]
21
+ tutorStyle = d["teaching_style"]
22
+ subject_match = false
23
+ subject_match_array = []
24
+ competency_match_array = []
25
+ tutorSubjects.each do |t|
26
+ for i in @studentSubjects do
27
+
28
+ case i["competency"]
29
+ when "1"
30
+ subject_competency = "Slow"
31
+ when "2"
32
+ subject_competency = "Average"
33
+ when "3"
34
+ subject_competency = "Fast"
35
+ end
36
+ if(t == i["subject"])
37
+ subject_match = true
38
+ subject_match_array.push(t)
39
+ if(tutorStyle == subject_competency)
40
+ competency_match_array.push(t)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ @recommendedTutors.push({"tutor" => d, "subjects_matched" => subject_match_array, "competency_match" => competency_match_array}) if subject_match == true
46
+ end
47
+
48
+ return @recommendedTutors
49
+ end
50
+
51
+ def self.matchTutor(student, tutors)
52
+ return self.getRecommendation(student, tutors)
53
+ end
54
+
55
+ def self.matchCompetency(student, tutors)
56
+ @recommendedTutors = self.getRecommendation(student, tutors)
57
+ end
58
+
59
+
60
+ end
data/lib/testCases.rb ADDED
@@ -0,0 +1,59 @@
1
+ require_relative 'MockDb'
2
+
3
+ module TestCases
4
+ #before_action :set_student
5
+ @student = MockDb.student()
6
+ @tutors = MockDb.tutors()
7
+ @studentrole = @student.student_props()
8
+ @profile = @student.student()
9
+
10
+
11
+ #return true if there is a student logged in
12
+ def self.get_student
13
+ true if @student
14
+ end
15
+
16
+ #return true if student has a role i.e student or tutor
17
+ def self.get_student_role
18
+ true if @studentrole["role"]
19
+ end
20
+
21
+ #return true if student role is "Student"
22
+ def self.is_student
23
+ true if @studentrole["role"] == "Student"
24
+ end
25
+
26
+ #return true if student has subjects of interests
27
+ def self.student_has_subject
28
+ true if @profile["subjects_of_interest"].length > 0
29
+ end
30
+
31
+ #return true if student has set a competeny level for all subjects
32
+ def self.student_subject_competency
33
+ all_competency_set = true
34
+ @profile["subjects_of_interest"].each do |s|
35
+ if s["competency"] == nil
36
+ all_competency_set = false
37
+ end
38
+ end
39
+ return all_competency_set
40
+ end
41
+
42
+ #check to see if tutor has set subjects
43
+ def self.tutor_subjects
44
+ all_subjects_set = true
45
+ @tutors.each do |t|
46
+ if t["subjects"].length <= 0
47
+ all_subjects_set = false
48
+ end
49
+ end
50
+ return all_subjects_set
51
+ end
52
+
53
+
54
+
55
+ private
56
+ # def set_student
57
+ # @student = MockDb.student()
58
+ # end
59
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Matcher
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Femi Abdul
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-11-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A library to match students with tutors on the bookatutor application
14
+ email: femi.abdul67@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/MockDb.rb
20
+ - lib/Student.rb
21
+ - lib/matcher.rb
22
+ - lib/testCases.rb
23
+ homepage: http://rubygems.org/gems/matcher
24
+ licenses: []
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.5.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Match students with tutors
46
+ test_files: []