mfglr_grade_calculator 0.0.0

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/grade_calculator.rb +92 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fb6e4251e90157708682e1e27010dcf3a3ac4fd1c1bd99f5dda4086f0e45b042
4
+ data.tar.gz: cd5ae714b549713b357630bee52d60c7e9a35a21ff6f64727cf02ec924ea6cb0
5
+ SHA512:
6
+ metadata.gz: 4ef5bb16af74a54f877eec8cf21a9617e0690585d6268e9f66e565951d9d0dde84307643750b64e243feebef3a59403dc27a175e82f49838e249f714bde94781
7
+ data.tar.gz: b0b36aa2acd606c2f25e407a8defbe4959a57132dac2ea4cf4d366a56f07706e952381a34e51d1f000f904e1fbbed8a627f5973eeb0c7030d05e05b0b60a8b9f
@@ -0,0 +1,92 @@
1
+ require 'json'
2
+
3
+ class GradeCalculator
4
+
5
+ def self.calculate(file_name)
6
+ file = File.open(file_name)
7
+ repository = GradeRepository.new(file.read)
8
+
9
+ begin
10
+ grades = repository.get_all_grades()
11
+ rescue InvalidScoreExceptin => e
12
+ puts e.message
13
+ file.close()
14
+ end
15
+
16
+ file.close()
17
+ grades
18
+ end
19
+
20
+ end
21
+
22
+ class GradeRepository
23
+
24
+ def initialize(file)
25
+ @file = file
26
+ end
27
+
28
+ def get_all_grades
29
+ JSON.parse(@file).map {|item| Grade.new(item["id"],item["score"])}
30
+ end
31
+
32
+ end
33
+
34
+ class Grade
35
+ attr_reader :grade, :score, :id
36
+
37
+ def initialize(id, score)
38
+ if isInvalidScore?(score)
39
+ raise InvalidScoreExceptin.new(score)
40
+ end
41
+ @id = id
42
+ @score = score
43
+ @grade = calculateGrade(score)
44
+ end
45
+
46
+ def to_s
47
+ "#{@id} => #{@grade}: #{@score}"
48
+ end
49
+
50
+ private
51
+
52
+ def isInvalidScore?(score)
53
+ score.is_a?(String) || score < 0 || score > 100
54
+ end
55
+
56
+ def calculateGrade(score)
57
+ grade = ""
58
+ case score
59
+ when 90...101
60
+ grade = "AA"
61
+ when 85...90
62
+ grade = "BA"
63
+ when 80...85
64
+ grade = "BB"
65
+ when 75...80
66
+ grade = "CB"
67
+ when 70...75
68
+ grade = "CC"
69
+ when 65...70
70
+ grade = "DC"
71
+ when 60...65
72
+ grade = "DD"
73
+ when 50...60
74
+ grade = "FD"
75
+ when 0...50
76
+ grade = "FF"
77
+ end
78
+ grade
79
+ end
80
+ end
81
+
82
+ class InvalidScoreExceptin < Exception
83
+ def initialize(score)
84
+ super("Invalid score(#{score})!")
85
+ end
86
+ end
87
+
88
+ # # grades = Calculator.calculate("grades.json")
89
+
90
+ # # grades.each do |grade|
91
+ # # puts grade.to_s
92
+ # # end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mfglr_grade_calculator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - muhammed furkang guler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-05-18 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This my first gem
14
+ email:
15
+ - mfurkanguler16@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/grade_calculator.rb
21
+ homepage: https://github.com/mfglr/grade_calculator
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.3.0
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubygems_version: 3.5.10
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: This gem created for calculating grades
44
+ test_files: []