salesforce_certification_calculator 0.2.3 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3e2c79e3592dc37772b3e758787237aee2a59eb61fdf6bb79e69a2922fb409c
4
- data.tar.gz: f71f648b7227e328e16e914d1285f53242c3b5d35456c1c59971924f6087cf52
3
+ metadata.gz: 2b029eea93b1b6f56977e85781962c822e0bee773d870460bf1c836a7dca92ec
4
+ data.tar.gz: fb84076ace1358dfc93df233953938db8f9b86d42c8ac4fec6ef3c287a89251c
5
5
  SHA512:
6
- metadata.gz: 75e7530e1274da33a63de6705ae6d024cd8aa736266b74dcd4c01623303fbd4ce2bfdcab96f67423c3451265d84b6cfe03473d3ac867e29148631291b554eaa3
7
- data.tar.gz: 200ce30ad30d7841a0fa37f03f86b2ca1d34b3391e6d75fed0604c38bcac88bd77c680ca1268dd567a275889753fad7e3f35b807d9f4b7b8b67f2fcf10eb9814
6
+ metadata.gz: 427d35fadd423b18a3a3037cd6d10c9ea6ff6a869aec934b1767c6a2d256ea5a3226d9831b97538e2582db4a0ad65d26fba46d7e73a12b7aba80394edcd98689
7
+ data.tar.gz: 5aadbee6d26c7600831e6d81781d1ec764610708b251b7451a584d73116d82bd382b87ca9cde8be554c4ea60a8a52714d5c90e6156aa092132ed2a0aadd813a9
data/README.md CHANGED
@@ -28,6 +28,7 @@ I've taken a few Salesforce certification exams in my day, and I was always anno
28
28
  - File reading functionality
29
29
  - User interface for the CLI to provide prompts to walk user through the input process
30
30
  - Methods for calculating the cumulative total and for walking the user through all stages of data collection
31
+ - Executable to allow user to run the module's core functionality with a simple command in the CLI instead of needing to go into a Ruby shell
31
32
 
32
33
  ## Requirements
33
34
 
@@ -65,14 +66,16 @@ If you have trouble downloading the package or just want to play around with the
65
66
  1. Fork this repository
66
67
  2. Clone it to your local computer
67
68
  3. From within your local version of the directory, build the module: `gem build salesforce_certification_calculator.gemspec`
68
- 4. Then install that built module: `gem install ./salesforce_certification_calculator-0.2.3.gem`
69
+ 4. Then install that built module: `gem install ./salesforce_certification_calculator-0.2.6.gem`
69
70
  5. Open a Ruby environment to use the module: `irb`
70
71
  6. Execute any of the recently installed methods
71
72
 
72
- You may need to update the specific version of the build as later releases come out (e.g., `-0.2.3.gem` may need to become `-0.3.0.gem`).
73
+ You may need to update the specific version of the build as later releases come out (e.g., `-0.2.6.gem` may need to become `-0.3.0.gem`).
73
74
 
74
75
  ## Usage
75
76
 
77
+ ### Module
78
+
76
79
  1. Open a Ruby environment to use the module: `irb`
77
80
  2. Require the package: `require 'salesforce_certification_calculator'`
78
81
  3. Create a new calculator to use: `calculator = SalesforceCertificationCalculator.new`
@@ -81,6 +84,14 @@ You may need to update the specific version of the build as later releases come
81
84
 
82
85
  Of course, you may use any of the other methods provided by the package, but `determine_percentage_manually` is the core method.
83
86
 
87
+ ### Executable
88
+
89
+ This package also contains an executable, so you can run its core functionality (the above `determine_percentage_manually` method) directly from the CLI without needing to enter a Ruby shell:
90
+
91
+ ```
92
+ salesforce_certification_calculator
93
+ ```
94
+
84
95
  ## Documentation
85
96
 
86
97
  This project uses **YARD** for documentation generation. To view the published form, see the [documentation on the RubyDoc site](https://www.rubydoc.info/gems/salesforce_certification_calculator/). To view the docs locally, go to the `doc` folder. To generate the docs yourself, execute `rake yard` in the CLI from the root of your local copy of the project.
@@ -123,7 +134,7 @@ end
123
134
 
124
135
  ## Testing
125
136
 
126
- This project has 103 automated tests, located in the `test` folder at the root. To run them, execute `rake test`. In order to successfully run these tests, you may need to also install `stringio` and `o_stream_catcher`.
137
+ This project has 107 automated tests, located in the `test` folder at the root. To run them, execute `rake test`. In order to successfully run these tests, you may need to also install `stringio` and `o_stream_catcher`.
127
138
 
128
139
  ## Future Goals
129
140
 
data/Rakefile CHANGED
@@ -12,4 +12,4 @@ end
12
12
  desc "Run tests"
13
13
  task default: :test
14
14
 
15
- # --- Ran 103 tests in 0.013265s on 7/29/22 --- OK --- #
15
+ # --- Ran 107 tests in 0.016303s on 7/30/22 --- OK --- #
@@ -48,6 +48,7 @@ class SalesforceCertificationCalculator::Exam
48
48
  def calculate_total
49
49
  summed_weights = 0
50
50
 
51
+ # Sum weighted scores of all sections
51
52
  @sections.each do |section|
52
53
  summed_weights += section.weight
53
54
  @total += section.weight * section.score / 100.0
@@ -8,18 +8,22 @@ class SalesforceCertificationCalculator::FileReader
8
8
  def initialize
9
9
  sfc_gems = []
10
10
 
11
+ # Get full path to where Ruby gems are stored on user's computer, starting at the base
11
12
  gems_path = ENV["HOME"] + "/gems/gems"
12
13
  all_gems = Dir.children(gems_path)
13
14
 
15
+ # Create list of all versions of module installed on user's computer
14
16
  all_gems.each do |gem|
15
17
  if gem.include? "salesforce_certification_calculator"
16
18
  sfc_gems.push(gem)
17
19
  end
18
20
  end
19
21
 
22
+ # Determine most recent version of module available
20
23
  sfc_gems.sort
21
24
  latest_sfc = sfc_gems[sfc_gems.length - 1]
22
25
 
26
+ # Set path variable for use by the class's methods
23
27
  @base_path = gems_path + "/" + latest_sfc
24
28
  end
25
29
 
@@ -35,6 +39,7 @@ class SalesforceCertificationCalculator::FileReader
35
39
  exams = []
36
40
  files = Dir.glob("data/*xml", base: @base_path)
37
41
 
42
+ # Create list of all exams, including their titles and file paths
38
43
  files.each do |file|
39
44
  exam = SFC::Exam.new
40
45
  file_path = @base_path + "/" + file
@@ -65,6 +70,7 @@ class SalesforceCertificationCalculator::FileReader
65
70
  names = doc.xpath("//name")
66
71
  weights = doc.xpath("//weight")
67
72
 
73
+ # Add all sections' names and weights to existing exam data
68
74
  (0..names.length-1).each do |i|
69
75
  exam.add_section(names[i].content, weights[i].content.to_i)
70
76
  end
@@ -13,6 +13,7 @@ class SalesforceCertificationCalculator::UI
13
13
  puts "Do you want to select an exam from a list (enter LIST), or do you want to type in your own details (enter NEW)?"
14
14
  choice = gets.chomp
15
15
 
16
+ # Only return value if user selected one of the two provided options; otherwise, recursively recall function
16
17
  if choice == "LIST" || choice == "NEW"
17
18
  return choice
18
19
  else
@@ -33,18 +34,28 @@ class SalesforceCertificationCalculator::UI
33
34
  #
34
35
  # @return [Exam] object with name, file, and section details for selected exam
35
36
  def select_specific_exam(exams)
37
+ exams_length = exams.length
38
+
36
39
  puts "Your choices are:"
37
40
 
41
+ # List exam options
38
42
  exams.each do |exam|
39
43
  puts "#{exams.find_index(exam) + 1} - #{exam.title}"
40
44
  end
41
45
 
46
+ # Add option to let user enter details manually if exam not listed
47
+ puts "#{exams_length + 1} - NOT LISTED"
42
48
  puts "Which one would you like to select? Enter the number before the exam name:"
43
49
  choice = gets.chomp.to_i
44
50
 
45
- if choice.between?(1, exams.length)
51
+ if choice.between?(1, exams_length)
52
+ # Only return value if user inputted number within range
46
53
  return exams[choice - 1]
54
+ elsif choice == exams_length + 1
55
+ # Enter details manually if exam not included in list
56
+ provide_all_details_manually()
47
57
  else
58
+ # Recursively recall function if invalid input
48
59
  select_specific_exam(exams)
49
60
  end
50
61
  end
@@ -65,6 +76,7 @@ class SalesforceCertificationCalculator::UI
65
76
  def provide_scores(exam)
66
77
  sections = exam.sections
67
78
 
79
+ # Get scores for each section from the user
68
80
  sections.each do |section|
69
81
  puts "#{section.name} is worth #{section.weight}%"
70
82
  puts "What score did you get on that section? (enter an integer)"
@@ -90,6 +102,7 @@ class SalesforceCertificationCalculator::UI
90
102
  puts "How many sections does it have?"
91
103
  length = gets.chomp.to_i
92
104
 
105
+ # Get names, weights, and scores for each section of the exam from the user
93
106
  (1..length).each do |i|
94
107
  puts "What is the name of Section #{i}?"
95
108
  name = gets.chomp
@@ -66,15 +66,21 @@ class SalesforceCertificationCalculator
66
66
  choice = @ui.select_list_or_new
67
67
 
68
68
  if choice == "LIST"
69
+ # Get list of exams, prompt user to select one, then require user to provide their scores for all the exam's sections
69
70
  @exams = @reader.generate_exams_list
70
71
  @exam = @ui.select_specific_exam(@exams)
71
- @exam = @reader.extract_initial_exam_data(@exam)
72
72
 
73
- puts "You selected: #{@exam.title}"
74
- puts "Enter your scores for each of the exam's #{@exam.sections.length} sections in the order you are prompted"
75
-
76
- @exam = @ui.provide_scores(@exam)
73
+ # Only proceed if user did not end up entering data manually after not finding their exam listed
74
+ if @exam.sections.length == 0
75
+ @exam = @reader.extract_initial_exam_data(@exam)
76
+
77
+ puts "You selected: #{@exam.title}"
78
+ puts "Enter your scores for each of the exam's #{@exam.sections.length} sections in the order you are prompted"
79
+
80
+ @exam = @ui.provide_scores(@exam)
81
+ end
77
82
  else
83
+ # Allow user to manually enter all data themselves without the aid of the data already stored in the module's XML files
78
84
  @exam = @ui.provide_all_details_manually
79
85
  end
80
86
 
@@ -186,4 +186,26 @@ class SalesforceTest < Minitest::Test
186
186
 
187
187
  assert_equal prompts, result[1].scan("?").length, "should prompt user for input 3 more than 3 times the number of sections in exam when call determine_percentage_manually and NEW selected"
188
188
  end
189
+
190
+ def test_determine_percentage_manually_handles_not_listed_option
191
+ calculator = SFC.new
192
+ calculator.generate_exams_list
193
+
194
+ result = OStreamCatcher.catch do
195
+ string_io = StringIO.new
196
+ string_io.puts "LIST"
197
+ string_io.puts "#{calculator.exams.length + 1}"
198
+ string_io.puts "My Test"
199
+ string_io.puts "1"
200
+ string_io.puts "Section 1"
201
+ string_io.puts "100"
202
+ string_io.puts "70"
203
+ string_io.rewind
204
+ $stdin = string_io
205
+ result = calculator.determine_percentage_manually
206
+ $stdin = STDIN
207
+ end
208
+
209
+ assert_equal 1, result[1].scan("What is the title of this exam?").length, "should prompt user for title of new test if user selects NOT LISTED after initially selecting LIST"
210
+ end
189
211
  end
data/test/test_u_i.rb CHANGED
@@ -184,6 +184,28 @@ class UITest < Minitest::Test
184
184
  assert_equal 1, result[1].scan("Which one would you like to select").length, "should call select_specific_exam only once if user inputs 2"
185
185
  end
186
186
 
187
+ def test_select_specific_exam_call_provide_manually
188
+ result = OStreamCatcher.catch do
189
+ string_io = StringIO.new
190
+ string_io.puts "#{@@exams.length + 1}"
191
+ string_io.puts "My Test"
192
+ string_io.puts "4"
193
+
194
+ (1..4).each do |i|
195
+ string_io.puts "Section #{i}"
196
+ string_io.puts "25"
197
+ string_io.puts "80"
198
+ end
199
+
200
+ string_io.rewind
201
+ $stdin = string_io
202
+ @@ui.select_specific_exam(@@exams)
203
+ $stdin = STDIN
204
+ end
205
+
206
+ assert_equal 1, result[1].scan("What is the title of this exam?").length, "should call provide_all_details_manually if user enters NOT LISTED option"
207
+ end
208
+
187
209
  def test_select_specific_exam_recursion_greater
188
210
  result = OStreamCatcher.catch do
189
211
  string_io = StringIO.new
@@ -212,6 +234,34 @@ class UITest < Minitest::Test
212
234
  assert_operator result[1].scan("Which one would you like to select").length, :>, 1, "should call select_specific_exam more than once if user inputs 0"
213
235
  end
214
236
 
237
+ def test_select_specific_exam_recursion_letter
238
+ result = OStreamCatcher.catch do
239
+ string_io = StringIO.new
240
+ string_io.puts "a"
241
+ string_io.puts "1"
242
+ string_io.rewind
243
+ $stdin = string_io
244
+ @@ui.select_specific_exam(@@exams)
245
+ $stdin = STDIN
246
+ end
247
+
248
+ assert_operator result[1].scan("Which one would you like to select").length, :>, 1, "should call select_specific_exam more than once if user inputs letter"
249
+ end
250
+
251
+ def test_select_specific_exam_recursion_title
252
+ result = OStreamCatcher.catch do
253
+ string_io = StringIO.new
254
+ string_io.puts "Advanced Administrator"
255
+ string_io.puts "1"
256
+ string_io.rewind
257
+ $stdin = string_io
258
+ @@ui.select_specific_exam(@@exams)
259
+ $stdin = STDIN
260
+ end
261
+
262
+ assert_operator result[1].scan("Which one would you like to select").length, :>, 1, "should call select_specific_exam more than once if user inputs title of exam instead of number"
263
+ end
264
+
215
265
  def test_provide_scores_returns_exam
216
266
  result = {}
217
267
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salesforce_certification_calculator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jackson Reeves