test_result_calculation 0.2.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: 5b6a08b06d6d0a1acf275f307fe6d661f44978a2
4
+ data.tar.gz: 8a7c94fad389a41e6c9a315faefebe1fc9a9c5da
5
+ SHA512:
6
+ metadata.gz: 2e01fa59ca75dabc722a9def9e90ccf146515827964feb83801e2aa08c1f9203333ed4eb5a559b0f7c062c585b63a47c2a1ee89327c6110af957a978968ba5bc
7
+ data.tar.gz: 34ec59e84ed5ce47f6a593fb9d02352c15dbda1dcd9cd890db8ef02a7c4018ab482af47e7f70946cb05fcf9f83ae40ed92b55c22124a36634049b315208c9574
@@ -0,0 +1,5 @@
1
+ require 'test_result_calculation/count_result'
2
+
3
+ module TestResultCalculation
4
+ end
5
+
@@ -0,0 +1,55 @@
1
+ module TestResultCalculation
2
+ module CountResult
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ end
7
+
8
+ module ClassMethods
9
+ end
10
+
11
+ module LocalInstanceMethods
12
+ def count_and_paste_test_result_into_test_table
13
+ create_hash_with_key_question_id_and_value_number_of_answers
14
+ create_array_with_question_id_that_has_true_answ
15
+ pull_true_answers_from_questions_with_one_answer
16
+ count_and_paste_test_result
17
+ end
18
+
19
+ def create_hash_with_key_question_id_and_value_number_of_answers
20
+ test_answers = self.answers
21
+ .where( answers: {checked: 'true'} )
22
+ .group_by(&:question_id)
23
+ array_with_question_id_and_answers_number = test_answers.map {|k,v| [k, v.length]}.flatten
24
+ hash_with_question_id_and_answers_number = Hash[*array_with_question_id_and_answers_number]
25
+ hash_with_question_id_and_answers_number.select {|k,v| v > 1}
26
+ end
27
+
28
+ def create_array_with_question_id_that_has_true_answ
29
+ true_answers.map{ |t_a| t_a.question_id }
30
+ end
31
+
32
+ def pull_true_answers_from_questions_with_one_answer
33
+ array_with_number_of_tries_bigger_1 = create_hash_with_key_question_id_and_value_number_of_answers.map {|k,v| k}
34
+ array_with_number_common_elements = array_with_number_of_tries_bigger_1 & create_array_with_question_id_that_has_true_answ
35
+ true_answers.count - array_with_number_common_elements.size
36
+ end
37
+
38
+ def count_and_paste_test_result
39
+ all_questions = self.test_setting.questions
40
+ test_result = Float(pull_true_answers_from_questions_with_one_answer) / (all_questions.count.nonzero? || 1) * 100
41
+ self.update_attributes(complete_pers: test_result)
42
+ end
43
+
44
+ private
45
+ def true_answers
46
+ @true_answers ||= Answer.belongs_to_current_test(self.id)
47
+ .with_true
48
+ .joins(:answer_setting)
49
+ .where( answer_settings: {rigth: 'true'} )
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ ActiveRecord::Base.include(TestResultCalculation::CountResult)
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: test_result_calculation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - zdubzdab
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-29 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: The simplest gem that calculate test result in percent. Add 'include
14
+ TestResultCalculation::CountResult::LocalInstanceMethods' and 'after_create :count_and_paste_test_result_into_test_table'
15
+ to test model
16
+ email: zdubzdab@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/test_result_calculation.rb
22
+ - lib/test_result_calculation/count_result.rb
23
+ homepage: http://rubygems.org/gems/test_result_calculation
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.3.0
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Calculate test result
47
+ test_files: []