completeness-fu 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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