completeness-fu 0.5.0 → 0.5.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/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
+ :patch: 1
2
3
  :major: 0
3
4
  :minor: 5
4
- :patch: 0
@@ -10,11 +10,11 @@ end
10
10
 
11
11
  CompletenessFu.common_weightings = { :low => 20, :medium => 40, :high => 60 }
12
12
 
13
- CompletenessFu.default_weightings = 40
13
+ CompletenessFu.default_weighting = 40
14
14
 
15
15
  CompletenessFu.default_i18n_namespace = [:completeness_scoring, :models]
16
16
 
17
- CompletenessFu.default_grading = { :poor => 0..24,
17
+ CompletenessFu.default_gradings = { :poor => 0..24,
18
18
  :low => 25..49,
19
19
  :medium => 50..79,
20
20
  :high => 80..100 }
@@ -2,11 +2,12 @@ module CompletenessFu
2
2
 
3
3
  class << self
4
4
  attr_accessor :common_weightings
5
- attr_accessor :default_weightings
5
+ attr_accessor :default_weighting
6
6
  attr_accessor :default_i18n_namespace
7
- attr_accessor :default_grading
7
+ attr_accessor :default_gradings
8
8
  end
9
9
 
10
+ class CompletenessFuError < Exception; end
10
11
 
11
12
  module ActiveRecordAdditions
12
13
 
@@ -41,24 +42,12 @@ module CompletenessFu
41
42
  module InstanceMethods
42
43
  # returns an array of hashes with the translated name, description + weighting
43
44
  def failed_checks
44
- self.completeness_checks.inject([]) do |failures, check|
45
- failures << translate_check_details(check) if not check[:check].call(self)
46
- failures
47
- end
45
+ all_checks_which_pass(false)
48
46
  end
49
47
 
50
48
  # returns an array of hashes with the translated name, description + weighting
51
49
  def passed_checks
52
- self.completeness_checks.inject([]) do |passed, check|
53
- case check[:check]
54
- when Proc
55
- passed << translate_check_details(check) if check[:check].call(self)
56
- when Symbol
57
- passed << translate_check_details(check) if self.send check[:check]
58
- end
59
-
60
- passed
61
- end
50
+ all_checks_which_pass
62
51
  end
63
52
 
64
53
  # returns the absolute complete score
@@ -75,14 +64,34 @@ module CompletenessFu
75
64
 
76
65
  # returns a basic 'grading' based on percent_complete, defaults are :high, :medium, :low, and :poor
77
66
  def completeness_grade
78
- CompletenessFu.default_grading.each do |grading|
79
- return grading.first if grading.last.include?(self.percent_complete)
67
+ CompletenessFu.default_gradings.each do |grading|
68
+ return grading.first if grading.last.include?(self.percent_complete.round)
80
69
  end
70
+ raise CompletenessFuError, "grade could not be determined with percent complete #{self.percent_complete.round}"
81
71
  end
82
72
 
83
73
 
84
74
  private
85
75
 
76
+ def all_checks_which_pass(should_pass = true)
77
+ self.completeness_checks.inject([]) do |results, check|
78
+ check_result = run_check(check[:check])
79
+ results << translate_check_details(check) if (should_pass ? check_result : !check_result)
80
+ results
81
+ end
82
+ end
83
+
84
+ def run_check(check)
85
+ case check
86
+ when Proc
87
+ return check.call(self)
88
+ when Symbol
89
+ return self.send check
90
+ else
91
+ raise CompletenessFuError, "check of type #{check.class} not acceptable"
92
+ end
93
+ end
94
+
86
95
  def translate_check_details(full_check)
87
96
  namespace = CompletenessFu.default_i18n_namespace + [self.class.name.downcase.to_sym, full_check[:name]]
88
97
 
@@ -9,7 +9,7 @@ module CompletenessFu
9
9
  sb = ScoringBuilder.new
10
10
 
11
11
  sb.completeness_checks = []
12
- sb.default_weighting = CompletenessFu.default_weightings
12
+ sb.default_weighting = CompletenessFu.default_weighting
13
13
  sb.model_weightings = CompletenessFu.common_weightings
14
14
 
15
15
  sb.instance_eval(&block)
data/test/scoring_test.rb CHANGED
@@ -134,21 +134,35 @@ class ScoringTest < Test::Unit::TestCase
134
134
  ScoringTest.class_eval do
135
135
  define_completeness_scoring do
136
136
  check :title, :title_present?, :high
137
+ check :name, :name_present?, :high
137
138
  end
138
-
139
+
139
140
  private
140
141
  def title_present?
141
142
  self.title.present?
142
143
  end
144
+
145
+ def name_present?
146
+ false
147
+ end
148
+
143
149
  end
144
150
  @st = ScoringTest.new
145
151
  @st.title = 'I have a title'
146
152
  end
147
-
153
+
154
+ should "have the correct failing checks" do
155
+ assert_equal 1, @st.passed_checks.size
156
+ assert_equal 1, @st.failed_checks.size
157
+ assert_equal 60, @st.completeness_score
158
+ assert_equal 50.0, @st.percent_complete
159
+ end
160
+
148
161
  should "have a scoring from the common_weightings hash used used" do
149
162
  assert_equal 1, @st.passed_checks.size
150
163
  assert_equal 60, @st.completeness_score
151
164
  end
165
+
152
166
  end
153
167
 
154
168
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: completeness-fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Kalderimis
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-03 00:00:00 +01:00
12
+ date: 2009-10-15 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency