gpa 0.0.1

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.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gpa.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Dustin Morrill
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,31 @@
1
+ # Gpa
2
+
3
+ Academic course data manipulation and GPA calculation module.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'gpa'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install gpa
18
+
19
+ ## Contributing
20
+
21
+ 1. Fork it
22
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
23
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
24
+ 4. Push to the branch (`git push origin my-new-feature`)
25
+ 5. Create new Pull Request
26
+
27
+ ## Versioning
28
+ The version number will change according to the following scheme:
29
+ - The major number will be incremented on non-backwards compatible updates.
30
+ - The minor number will be incremented on backwards compatible strict API extensions.
31
+ - The patch number will be incremented on backwards compatible changes that do not effect the API.
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "lib" << 'spec/support'
9
+ t.test_files = FileList['spec/**/*_spec.rb']
10
+ t.verbose = true
11
+ t.warning = false
12
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/gpa/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Dustin Morrill"]
6
+ gem.email = ["dmorrill10@gmail.com"]
7
+ gem.description = %q{Academic course data manipulation and GPA calculation module}
8
+ gem.summary = %q{Academic course data manipulation and GPA calculation module}
9
+ gem.homepage = "https://github.com/dmorrill10/GPA"
10
+
11
+ gem.add_dependency 'dmorrill10-utils'
12
+
13
+ gem.add_development_dependency 'simplecov'
14
+ gem.add_development_dependency 'turn'
15
+ gem.add_development_dependency 'minitest'
16
+
17
+ gem.files = `git ls-files`.split($\)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.name = "gpa"
21
+ gem.require_paths = ["lib"]
22
+ gem.version = Gpa::VERSION
23
+ end
@@ -0,0 +1,56 @@
1
+ require "gpa/version"
2
+ require "gpa/course"
3
+
4
+ require 'dmorrill10-utils/enumerable'
5
+ require 'yaml'
6
+
7
+ module YAML
8
+ # Load the document contained in +filename+. Returns the yaml contained in
9
+ # +filename+ as a ruby object
10
+ def self.load_stream_from_file filename
11
+ File.open(filename, 'r:bom|utf-8') { |f| self.load_stream f, filename }
12
+ end
13
+ end
14
+
15
+ class Array
16
+ # @param [Integer] num_most_recent_units
17
+ # @returns [Numeric] The GPA calculated with +num_most_recent_units+ most recent units completed.
18
+ def gpa(num_most_recent_units=units_completed)
19
+ courses = reject do |course|
20
+ !course.respond_to?(:grade_points) || course.grade_points.nil?
21
+ end.sort_courses_by_date_completed.inject([]) do |accum_array, course|
22
+ accum_array << course
23
+ break accum_array if accum_array.units_completed >= num_most_recent_units
24
+ accum_array
25
+ end
26
+
27
+ courses.map { |course| course.grade_points }.sum / courses.units_completed.to_f
28
+ end
29
+
30
+ def units_completed
31
+ completed_courses.map do |course|
32
+ course.units
33
+ end.sum
34
+ end
35
+
36
+ def sort_courses_by_date_completed
37
+ completed_courses.sort do |c1, c2|
38
+ c2.date_completed <=> c1.date_completed
39
+ end
40
+ end
41
+
42
+ def completed_courses
43
+ current_date = DateTime.now
44
+ select do |course|
45
+ course.respond_to?(:date_completed) &&
46
+ course.date_completed < current_date &&
47
+ !course.grade.nil?
48
+ end
49
+ end
50
+ end
51
+
52
+ module Gpa
53
+ def self.load_courses_from_file(yaml_file_path)
54
+ YAML.load_stream_from_file(yaml_file_path)
55
+ end
56
+ end
@@ -0,0 +1,216 @@
1
+ # @todo Move to utils
2
+ class Object
3
+ def to_h
4
+ Hash[instance_variables.map do |var|
5
+ [var[1..-1].to_sym, instance_variable_get(var)]
6
+ end]
7
+ end
8
+ end
9
+
10
+ class String
11
+ # @returns [Numeric] Number of grade points for this grade
12
+ def points
13
+ Course::UNIVERSITY_OF_ALBERTA_GRADE_TO_POINTS[self]
14
+ end
15
+ end
16
+
17
+ class Course
18
+ # @return [Hash<String, Numeric>] University of Alberta grade to grade points hash.
19
+ UNIVERSITY_OF_ALBERTA_GRADE_TO_POINTS = {
20
+ 'A+' => 4.0,
21
+ 'A' => 4.0,
22
+ 'A-' => 3.7,
23
+ 'B+' => 3.3,
24
+ 'B' => 3.0,
25
+ 'B-' => 2.7,
26
+ 'C+' => 2.3,
27
+ 'C' => 2.0,
28
+ 'C-' => 1.7,
29
+ 'D+' => 1.3,
30
+ 'D' => 1.0,
31
+ 'F' => 0.0
32
+ }
33
+
34
+ # @todo Incomplete list of subjects. Not a big deal though because faculty can be specified on a per course basis.
35
+ # @return [Hash<String, Array<String>>] University of Alberta subject hierarchy.
36
+ UNIVERSITY_OF_ALBERTA_SUBJECT_HIERARCHY = {
37
+ 'ALES' => [
38
+ # Agricultural and Resource Economics
39
+ 'AREC',
40
+ # Agricultural, Food and Nutritional Science
41
+ 'AFNS',
42
+ # Agricultural, Life and Environmental Sciences
43
+ 'ALES',
44
+ # Animal Science
45
+ 'AN SC',
46
+ # Environmental and Conservation Sciences
47
+ 'ENCS',
48
+ # Forest Economics
49
+ 'FOREC',
50
+ # Forest Engineering
51
+ 'FOREN',
52
+ # Forest Science
53
+ 'FOR',
54
+ # Human Ecology
55
+ 'HECOL',
56
+ # Interdisciplinary Courses
57
+ 'INT D',
58
+ # Nutrition
59
+ 'NUTR',
60
+ # Nutrition and Food Sciences
61
+ 'NU FS',
62
+ # Plant Science
63
+ 'PL SC',
64
+ # Renewable Resources
65
+ 'REN R',
66
+ # Rural Sociology
67
+ 'R SOC',
68
+ # Soil Science
69
+ 'SOILS',
70
+ # University
71
+ 'UNIV',
72
+ # Work Experience
73
+ 'WKEXP'
74
+ ],
75
+ 'Arts' => [
76
+ 'ANTHR',
77
+ 'ART H',
78
+ 'ART',
79
+ 'DES',
80
+ 'DRAMA',
81
+ 'ECON',
82
+ 'ENGL',
83
+ 'FS',
84
+ 'HIST',
85
+ 'POL S',
86
+ 'RELIG',
87
+ 'WRITE',
88
+ 'WRS',
89
+ 'LING',
90
+ 'CLASS',
91
+ 'GREEK',
92
+ 'LATIN',
93
+ 'MUSIC',
94
+ 'PHIL',
95
+ # 'PSYCO', Must be specified per course since could be art or science
96
+ 'SOC',
97
+ 'CSL',
98
+ 'C LIT',
99
+ 'INT D',
100
+ 'W ST'
101
+ ],
102
+ 'Science' => [
103
+ # Astronomy
104
+ 'ASTRO',
105
+ # Biochemistry (taught by the Faculty of Medicine and Dentistry)
106
+ 'BIOCH',
107
+ # Biochimie (Faculté Saint-Jean)
108
+ 'BIOCM',
109
+ # Biological Science - Biology
110
+ 'BIOL',
111
+ # Biological Science - Botany
112
+ 'BOT',
113
+ # Biological Science - Entomology
114
+ 'ENT',
115
+ # Biological Science - Genetics
116
+ 'GENET',
117
+ # Biological Science - Microbiology
118
+ 'MICRB',
119
+ # Biological Science - Zoology
120
+ 'ZOOL',
121
+ # Biologie (Faculté Saint-Jean)
122
+ 'BIOLE',
123
+ # Cell Biology (taught by the Faculty of Medicine and Dentistry)
124
+ 'CELL',
125
+ # Chemistry
126
+ 'CHEM',
127
+ # Chimie (Faculté Saint-Jean)
128
+ 'CHIM',
129
+ # Computing Science
130
+ 'CMPUT',
131
+ # Earth and Atmospheric Sciences [formerly Geography and Geology
132
+ 'EAS',
133
+ # Environmental Physical Sciences
134
+ 'ENVPS',
135
+ # Geophysics
136
+ 'GEOPH',
137
+ # Immunology and Infection
138
+ 'IMIN',
139
+ # Laboratory Animal Management
140
+ 'LB AN',
141
+ # Marine Science
142
+ 'MA SC',
143
+ # Mathematical Physics
144
+ 'MA PH',
145
+ # Mathematics
146
+ 'MATH',
147
+ # Mathématiques (Faculté Saint-Jean)
148
+ 'MATHQ',
149
+ # Neuroscience (taught by the Faculty of Medicine and Dentistry)
150
+ 'NEURO',
151
+ # Paleontology
152
+ 'PALEO',
153
+ # Pharmacology (taught by the Faculty of Medicine and Dentistry)
154
+ 'PMCOL',
155
+ # Physiology (taught by the Faculty of Medicine and Dentistry)
156
+ 'PHYSL',
157
+ # Physics
158
+ 'PHYS',
159
+ # Physique (Faculté Saint-Jean)
160
+ 'PHYSQ',
161
+ # Psychology
162
+ # 'PSYCO', Must be specified per course since could be art or science
163
+ # Sciences de la Terre et de l'atmosphére (Faculté Saint-Jean)
164
+ 'SCTA',
165
+ # Statistics
166
+ 'STAT',
167
+ # Statistique (Faculté Saint-Jean)
168
+ 'STATQ'
169
+ ]
170
+
171
+ }
172
+ attr_reader(
173
+ # @returns [String]
174
+ :subject,
175
+ # @returns [Integer]
176
+ :number,
177
+ # @returns [String]
178
+ :name,
179
+ # @returns [String]
180
+ :grade,
181
+ # @returns [Integer]
182
+ :units,
183
+ # @returns [Date]
184
+ :date_completed,
185
+ # @returns [String]
186
+ :faculty
187
+ )
188
+ # @todo thing-to-do
189
+ def initialize(
190
+ subject,
191
+ number,
192
+ name,
193
+ grade,
194
+ units,
195
+ date_completed,
196
+ faculty=nil
197
+ )
198
+ @subject = subject
199
+ @number = number
200
+ @name = name
201
+ @grade = grade
202
+ @units = units
203
+ @date_completed = date_completed
204
+ @faculty = if faculty.nil?
205
+ UNIVERSITY_OF_ALBERTA_SUBJECT_HIERARCHY[@subject]
206
+ else
207
+ faculty
208
+ end
209
+ end
210
+
211
+ def grade_points
212
+ return nil if @grade.nil?
213
+
214
+ @units * @grade.points
215
+ end
216
+ end
@@ -0,0 +1,3 @@
1
+ module Gpa
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,58 @@
1
+ # Spec helper (must include first to track code coverage with SimpleCov)
2
+ require_relative 'support/spec_helper'
3
+
4
+ require_relative '../lib/gpa/course'
5
+
6
+ ExpectedCourse = Struct.new(
7
+ :subject,
8
+ # @returns [Integer]
9
+ :number,
10
+ # @returns [String]
11
+ :name,
12
+ # @returns [String]
13
+ :grade,
14
+ # @returns [Integer]
15
+ :units,
16
+ # @returns [Date]
17
+ :date_completed,
18
+ # @returns [String]
19
+ :faculty,
20
+ # @returns [Numeric]
21
+ :grade_points
22
+ )
23
+
24
+ describe Course do
25
+ it "should initialize properly" do
26
+ @expected_course = ExpectedCourse.new(
27
+ :subject => "WRS",
28
+ :number => 101,
29
+ :name => "Exploring Writing",
30
+ :grade => "B",
31
+ :units => 27,
32
+ :date_completed => Date.parse('2008-12-01'),
33
+ :faculty => 'Arts',
34
+ :grade_points => 9.0
35
+ )
36
+ @patient = Course.new(
37
+ @expected_course.subject,
38
+ @expected_course.number,
39
+ @expected_course.name,
40
+ @expected_course.grade,
41
+ @expected_course.units,
42
+ @expected_course.date_completed
43
+ )
44
+
45
+ check_patient
46
+ end
47
+
48
+ def check_patient
49
+ @patient.subject.must_equal @expected_course.subject
50
+ @patient.number.must_equal @expected_course.number
51
+ @patient.name.must_equal @expected_course.name
52
+ @patient.grade.must_equal @expected_course.grade
53
+ @patient.units.must_equal @expected_course.units
54
+ @patient.date_completed.must_equal @expected_course.date_completed
55
+ @patient.faculty.must_equal @expected_course.faculty
56
+ @patient.grade_points.must_equal @expected_course.grade_points
57
+ end
58
+ end
@@ -0,0 +1,23 @@
1
+ # Spec helper (must include first to track code coverage with SimpleCov)
2
+ require_relative 'support/spec_helper'
3
+
4
+ require_relative '../lib/gpa'
5
+
6
+ describe Gpa do
7
+ it "should load courses from a YAML file properly" do
8
+ Gpa.load_courses_from_file(TEST_COURSES_FILE).map do |course|
9
+ course.to_h
10
+ end.must_equal EXPECTED_COURSES_IN_HASH_FORM_FROM_COURSES_FILE
11
+ end
12
+ end
13
+
14
+ describe Array do
15
+ describe 'should calculate the gpa of all courses inside itself' do
16
+ it "for all courses" do
17
+ Gpa.load_courses_from_file(TEST_COURSES_FILE).gpa.must_equal 362/99.to_r
18
+ end
19
+ it "for a specified number of most recent courses" do
20
+ Gpa.load_courses_from_file(TEST_COURSES_FILE).gpa(60).must_equal 3.95
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,200 @@
1
+ # First year
2
+ ## Fall
3
+ --- !ruby/object:Course
4
+ subject: WRS
5
+ number: 101
6
+ name: Exploring Writing
7
+ grade: B
8
+ units: 27
9
+ date_completed: 2008-12-1
10
+ ## Winter
11
+ --- !ruby/object:Course
12
+ subject: SCI
13
+ number: 100
14
+ name: Integrated Science
15
+ grade: A-
16
+ units: 3
17
+ date_completed: 2009-4-1
18
+ # Second year
19
+ ## Fall
20
+ --- !ruby/object:Course
21
+ subject: CMPUT
22
+ number: 175
23
+ name: Intro to Foundations of Computing II
24
+ grade: A+
25
+ units: 3
26
+ date_completed: 2009-12-1
27
+ --- !ruby/object:Course
28
+ subject: CMPUT
29
+ number: 272
30
+ name: Formal Systems and Logic
31
+ grade: A+
32
+ units: 3
33
+ date_completed: 2009-12-1
34
+ --- !ruby/object:Course
35
+ subject: DRAMA
36
+ number: 247
37
+ name: Intro to Oral Communication
38
+ grade: B+
39
+ units: 3
40
+ date_completed: 2009-12-1
41
+ --- !ruby/object:Course
42
+ subject: MATH
43
+ number: 120
44
+ name: Basic Linear Algebra I
45
+ grade: A
46
+ units: 3
47
+ date_completed: 2009-12-1
48
+ ## Winter
49
+ --- !ruby/object:Course
50
+ subject: CMPUT
51
+ number: 201
52
+ name: Practical Programming Methodology
53
+ grade: A+
54
+ units: 3
55
+ date_completed: 2010-4-1
56
+ --- !ruby/object:Course
57
+ subject: CMPUT
58
+ number: 204
59
+ name: Algorithms I
60
+ grade: A+
61
+ units: 3
62
+ date_completed: 2010-4-1
63
+ --- !ruby/object:Course
64
+ subject: CMPUT
65
+ number: 229
66
+ name: Computer Organization and Architecture I
67
+ grade: A+
68
+ units: 3
69
+ date_completed: 2010-4-1
70
+ --- !ruby/object:Course
71
+ subject: ENGL
72
+ number: 125
73
+ name: Aboriginal Writing
74
+ grade: A
75
+ units: 3
76
+ date_completed: 2010-4-1
77
+ --- !ruby/object:Course
78
+ subject: PHIL
79
+ number: 215
80
+ name: Epistemology
81
+ grade: A
82
+ units: 3
83
+ date_completed: 2010-4-1
84
+ ## Summer
85
+ --- !ruby/object:Course
86
+ subject: PHIL
87
+ number: 265
88
+ name: Philosophy of Science
89
+ grade: A
90
+ units: 3
91
+ date_completed: 2010-8-1
92
+ # Third year
93
+ ## Fall
94
+ --- !ruby/object:Course
95
+ subject: CMPUT
96
+ number: 325
97
+ name: Non-procedural Programming Languages
98
+ grade: A+
99
+ units: 3
100
+ date_completed: 2010-12-1
101
+ --- !ruby/object:Course
102
+ subject: CMPUT
103
+ number: 366
104
+ name: Intelligent Systems
105
+ grade: A+
106
+ units: 3
107
+ date_completed: 2010-12-1
108
+ --- !ruby/object:Course
109
+ subject: MATH
110
+ number: 214
111
+ name: Intermediate Calculus I
112
+ grade: A-
113
+ units: 3
114
+ date_completed: 2010-12-1
115
+ --- !ruby/object:Course
116
+ subject: MATH
117
+ number: 225
118
+ name: Linear Algebra II
119
+ grade: A-
120
+ units: 3
121
+ date_completed: 2010-12-1
122
+ --- !ruby/object:Course
123
+ subject: STAT
124
+ number: 265
125
+ name: Statistics I
126
+ grade: A
127
+ units: 3
128
+ date_completed: 2010-12-1
129
+ ## Winter
130
+ --- !ruby/object:Course
131
+ subject: CMPUT
132
+ number: 379
133
+ name: Operating System Concepts
134
+ grade: A-
135
+ units: 3
136
+ date_completed: 2011-4-1
137
+ --- !ruby/object:Course
138
+ subject: CMPUT
139
+ number: 396
140
+ name: 'Topics in Computing Science: Design and Development of Mobile Search and Navigation Application'
141
+ grade: A
142
+ units: 3
143
+ date_completed: 2011-4-1
144
+ --- !ruby/object:Course
145
+ subject: CMPUT
146
+ number: 412
147
+ name: Experimental mobile robotics
148
+ grade: A+
149
+ units: 3
150
+ date_completed: 2011-4-1
151
+ --- !ruby/object:Course
152
+ subject: STAT
153
+ number: 266
154
+ name: Statistics II
155
+ grade: A+
156
+ units: 3
157
+ date_completed: 2011-4-1
158
+ ## Summer
159
+ --- !ruby/object:Course
160
+ subject: CMPUT
161
+ number: 399
162
+ name: 'Topics in Computing Science: Object-Oriented Programming for Web Applications'
163
+ grade: A+
164
+ units: 3
165
+ date_completed: 2011-8-1
166
+ # Fourth year
167
+ ## Fall
168
+ --- !ruby/object:Course
169
+ subject: CMPUT
170
+ number: 400
171
+ name: Industrial Internship Practicum
172
+ grade: ~
173
+ units: 3
174
+ date_completed: 2012-12-1
175
+ --- !ruby/object:Course
176
+ subject: CMPUT
177
+ number: 418
178
+ name: Numerical Methods I
179
+ grade: A
180
+ units: 3
181
+ date_completed: 2012-12-1
182
+ --- !ruby/object:Course
183
+ subject: CMPUT
184
+ number: 466
185
+ name: Machine Learning
186
+ grade: A+
187
+ units: 3
188
+ date_completed: 2012-12-1
189
+ --- !ruby/object:Course
190
+ subject: STAT
191
+ number: 371
192
+ name: Probability and Stochastic Processes
193
+ grade: A
194
+ units: 3
195
+ date_completed: 2012-12-1
196
+
197
+ ## Winter
198
+
199
+ # Fifth year
200
+ ## Fall
@@ -0,0 +1,234 @@
1
+
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+
5
+ begin
6
+ require 'turn/autorun'
7
+
8
+ Turn.config do |c|
9
+ # use one of output formats:
10
+ # :outline - turn's original case/test outline mode [default]
11
+ # :progress - indicates progress with progress bar
12
+ # :dotted - test/unit's traditional dot-progress mode
13
+ # :pretty - new pretty reporter
14
+ # :marshal - dump output as YAML (normal run mode only)
15
+ # :cue - interactive testing
16
+ # c.format = :pretty
17
+ c.format = :dotted
18
+ # use humanized test names (works only with :outline format)
19
+ c.natural = true
20
+ end
21
+ rescue LoadError
22
+ end
23
+
24
+ TEST_COURSES_FILE = File.expand_path('../courses.yml', __FILE__)
25
+ EXPECTED_COURSES_IN_HASH_FORM_FROM_COURSES_FILE = [
26
+ {
27
+ :subject => "WRS",
28
+ :number => 101,
29
+ :name => "Exploring Writing",
30
+ :grade => "B",
31
+ :units => 27,
32
+ :date_completed => Date.parse('2008-12-01')
33
+ },
34
+ {
35
+ :subject => "SCI",
36
+ :number => 100,
37
+ :name => "Integrated Science",
38
+ :grade => "A-",
39
+ :units => 3,
40
+ :date_completed => Date.parse('2009-04-01')
41
+ },
42
+ {
43
+ :subject => "CMPUT",
44
+ :number => 175,
45
+ :name => "Intro to Foundations of Computing II",
46
+ :grade => "A+",
47
+ :units => 3,
48
+ :date_completed => Date.parse('2009-12-01')
49
+ },
50
+ {
51
+ :subject => "CMPUT",
52
+ :number => 272,
53
+ :name => "Formal Systems and Logic",
54
+ :grade => "A+",
55
+ :units => 3,
56
+ :date_completed => Date.parse('2009-12-01')
57
+ },
58
+ {
59
+ :subject => "DRAMA",
60
+ :number => 247,
61
+ :name => "Intro to Oral Communication",
62
+ :grade => "B+",
63
+ :units => 3,
64
+ :date_completed => Date.parse('2009-12-01')
65
+ },
66
+ {
67
+ :subject => "MATH",
68
+ :number => 120,
69
+ :name => "Basic Linear Algebra I",
70
+ :grade => "A",
71
+ :units => 3,
72
+ :date_completed => Date.parse('2009-12-01')
73
+ },
74
+ {
75
+ :subject => "CMPUT",
76
+ :number => 201,
77
+ :name => "Practical Programming Methodology",
78
+ :grade => "A+",
79
+ :units => 3,
80
+ :date_completed => Date.parse('2010-04-01')
81
+ },
82
+ {
83
+ :subject => "CMPUT",
84
+ :number => 204,
85
+ :name => "Algorithms I",
86
+ :grade => "A+",
87
+ :units => 3,
88
+ :date_completed => Date.parse('2010-04-01')
89
+ },
90
+ {
91
+ :subject => "CMPUT",
92
+ :number => 229,
93
+ :name => "Computer Organization and Architecture I",
94
+ :grade => "A+",
95
+ :units => 3,
96
+ :date_completed => Date.parse('2010-04-01')
97
+ },
98
+ {
99
+ :subject => "ENGL",
100
+ :number => 125,
101
+ :name => "Aboriginal Writing",
102
+ :grade => "A",
103
+ :units => 3,
104
+ :date_completed => Date.parse('2010-04-01')
105
+ },
106
+ {
107
+ :subject => "PHIL",
108
+ :number => 215,
109
+ :name => "Epistemology",
110
+ :grade => "A",
111
+ :units => 3,
112
+ :date_completed => Date.parse('2010-04-01')
113
+ },
114
+ {
115
+ :subject => "PHIL",
116
+ :number => 265,
117
+ :name => "Philosophy of Science",
118
+ :grade => "A",
119
+ :units => 3,
120
+ :date_completed => Date.parse('2010-08-01')
121
+ },
122
+ {
123
+ :subject => "CMPUT",
124
+ :number => 325,
125
+ :name => "Non-procedural Programming Languages",
126
+ :grade => "A+",
127
+ :units => 3,
128
+ :date_completed => Date.parse('2010-12-01')
129
+ },
130
+ {
131
+ :subject => "CMPUT",
132
+ :number => 366,
133
+ :name => "Intelligent Systems",
134
+ :grade => "A+",
135
+ :units => 3,
136
+ :date_completed => Date.parse('2010-12-01')
137
+ },
138
+ {
139
+ :subject => "MATH",
140
+ :number => 214,
141
+ :name => "Intermediate Calculus I",
142
+ :grade => "A-",
143
+ :units => 3,
144
+ :date_completed => Date.parse('2010-12-01')
145
+ },
146
+ {
147
+ :subject => "MATH",
148
+ :number => 225,
149
+ :name => "Linear Algebra II",
150
+ :grade => "A-",
151
+ :units => 3,
152
+ :date_completed => Date.parse('2010-12-01')
153
+ },
154
+ {
155
+ :subject => "STAT",
156
+ :number => 265,
157
+ :name => "Statistics I",
158
+ :grade => "A",
159
+ :units => 3,
160
+ :date_completed => Date.parse('2010-12-01')
161
+ },
162
+ {
163
+ :subject => "CMPUT",
164
+ :number => 379,
165
+ :name => "Operating System Concepts",
166
+ :grade => "A-",
167
+ :units => 3,
168
+ :date_completed => Date.parse('2011-04-01')
169
+ },
170
+ {
171
+ :subject => "CMPUT",
172
+ :number => 396,
173
+ :name => "Topics in Computing Science: Design and Development of Mobile Search and Navigation Application",
174
+ :grade => "A",
175
+ :units => 3,
176
+ :date_completed => Date.parse('2011-04-01')
177
+ },
178
+ {
179
+ :subject => "CMPUT",
180
+ :number => 412,
181
+ :name => "Experimental mobile robotics",
182
+ :grade => "A+",
183
+ :units => 3,
184
+ :date_completed => Date.parse('2011-04-01')
185
+ },
186
+ {
187
+ :subject => "STAT",
188
+ :number => 266,
189
+ :name => "Statistics II",
190
+ :grade => "A+",
191
+ :units => 3,
192
+ :date_completed => Date.parse('2011-04-01')
193
+ },
194
+ {
195
+ :subject => "CMPUT",
196
+ :number => 399,
197
+ :name => "Topics in Computing Science: Object-Oriented Programming for Web Applications",
198
+ :grade => "A+",
199
+ :units => 3,
200
+ :date_completed => Date.parse('2011-08-01')
201
+ },
202
+ {
203
+ :subject => "CMPUT",
204
+ :number => 400,
205
+ :name => "Industrial Internship Practicum",
206
+ :grade => nil,
207
+ :units => 3,
208
+ :date_completed => Date.parse('2012-12-01')
209
+ },
210
+ {
211
+ :subject => "CMPUT",
212
+ :number => 418,
213
+ :name => "Numerical Methods I",
214
+ :grade => "A",
215
+ :units => 3,
216
+ :date_completed => Date.parse('2012-12-01')
217
+ },
218
+ {
219
+ :subject => "CMPUT",
220
+ :number => 466,
221
+ :name => "Machine Learning",
222
+ :grade => "A+",
223
+ :units => 3,
224
+ :date_completed => Date.parse('2012-12-01')
225
+ },
226
+ {
227
+ :subject => "STAT",
228
+ :number => 371,
229
+ :name => "Probability and Stochastic Processes",
230
+ :grade => "A",
231
+ :units => 3,
232
+ :date_completed => Date.parse('2012-12-01')
233
+ }
234
+ ]
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gpa
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dustin Morrill
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: dmorrill10-utils
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: simplecov
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: turn
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: minitest
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Academic course data manipulation and GPA calculation module
79
+ email:
80
+ - dmorrill10@gmail.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - Gemfile
86
+ - LICENSE
87
+ - README.md
88
+ - Rakefile
89
+ - gpa.gemspec
90
+ - lib/gpa.rb
91
+ - lib/gpa/course.rb
92
+ - lib/gpa/version.rb
93
+ - spec/course_spec.rb
94
+ - spec/gpa_spec.rb
95
+ - spec/support/courses.yml
96
+ - spec/support/spec_helper.rb
97
+ homepage: https://github.com/dmorrill10/GPA
98
+ licenses: []
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 1.8.24
118
+ signing_key:
119
+ specification_version: 3
120
+ summary: Academic course data manipulation and GPA calculation module
121
+ test_files:
122
+ - spec/course_spec.rb
123
+ - spec/gpa_spec.rb
124
+ - spec/support/courses.yml
125
+ - spec/support/spec_helper.rb
126
+ has_rdoc: