cohort_scope 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/lib/cohort_scope.rb CHANGED
@@ -36,9 +36,9 @@ module CohortScope
36
36
 
37
37
  # Find the biggest scope possible by removing constraints <b>in any order</b>.
38
38
  # Returns an empty scope if it can't meet the minimum scope size.
39
- def big_cohort(constraints)
39
+ def big_cohort(constraints = {}, custom_minimum_cohort_size = nil)
40
40
  raise ArgumentError, "You can't give a big_cohort an OrderedHash; do you want strict_cohort?" if constraints.is_a?(ActiveSupport::OrderedHash)
41
- _cohort_massive_scope constraints
41
+ _cohort_massive_scope constraints, custom_minimum_cohort_size
42
42
  end
43
43
 
44
44
  # Find the first acceptable scope by removing constraints <b>in strict order</b>, starting with the last constraint.
@@ -57,15 +57,15 @@ module CohortScope
57
57
  #
58
58
  # If the original constraints don't meet the minimum scope size, then the only constraint that can be removed is birthdate.
59
59
  # In other words, this would never return a scope that was constrained on birthdate but not on favorite_color.
60
- def strict_cohort(constraints)
60
+ def strict_cohort(constraints, custom_minimum_cohort_size = nil)
61
61
  raise ArgumentError, "You need to give strict_cohort an OrderedHash" unless constraints.is_a?(ActiveSupport::OrderedHash)
62
- _cohort_massive_scope constraints
62
+ _cohort_massive_scope constraints, custom_minimum_cohort_size
63
63
  end
64
64
 
65
65
  protected
66
66
 
67
67
  # Recursively look for a scope that meets the constraints and is at least <tt>minimum_cohort_size</tt>.
68
- def _cohort_massive_scope(constraints)
68
+ def _cohort_massive_scope(constraints, custom_minimum_cohort_size)
69
69
  raise RuntimeError, "You need to set #{name}.minimum_cohort_size = X" unless minimum_cohort_size.present?
70
70
 
71
71
  if constraints.values.none? # failing base case
@@ -75,10 +75,10 @@ module CohortScope
75
75
  this_hash = _cohort_constraints constraints
76
76
  this_count = scoped(this_hash).count
77
77
 
78
- if this_count >= minimum_cohort_size # successful base case
78
+ if this_count >= (custom_minimum_cohort_size || minimum_cohort_size) # successful base case
79
79
  massive_scoped this_hash
80
80
  else
81
- _cohort_massive_scope _cohort_reduce_constraints(constraints)
81
+ _cohort_massive_scope _cohort_reduce_constraints(constraints), custom_minimum_cohort_size
82
82
  end
83
83
  end
84
84
 
@@ -9,10 +9,10 @@ class TestCohortScope < Test::Unit::TestCase
9
9
  should "raise if no minimum_cohort_size is specified" do
10
10
  Citizen.minimum_cohort_size = nil
11
11
  assert_raises(RuntimeError) {
12
- cohort = Citizen.big_cohort Hash.new
12
+ Citizen.big_cohort Hash.new
13
13
  }
14
14
  assert_raises(RuntimeError) {
15
- cohort = Citizen.strict_cohort ActiveSupport::OrderedHash.new
15
+ Citizen.strict_cohort ActiveSupport::OrderedHash.new
16
16
  }
17
17
  end
18
18
 
@@ -21,6 +21,11 @@ class TestCohortScope < Test::Unit::TestCase
21
21
  cohort = Citizen.big_cohort :favorite_color => 'heliotrope'
22
22
  assert_equal 0, cohort.count
23
23
  end
24
+
25
+ should "take minimum_cohort_size as an optional argument" do
26
+ cohort = Citizen.big_cohort({:favorite_color => 'heliotrope'}, 0)
27
+ assert_equal 1, cohort.count
28
+ end
24
29
 
25
30
  should "seek a cohort of maximum size" do
26
31
  cohort = Citizen.big_cohort :birthdate => @date_range, :favorite_color => 'heliotrope'
@@ -31,7 +36,7 @@ class TestCohortScope < Test::Unit::TestCase
31
36
 
32
37
  should "raise if an OrderedHash is given to big_cohort" do
33
38
  assert_raises(ArgumentError) {
34
- cohort = Citizen.big_cohort ActiveSupport::OrderedHash.new
39
+ Citizen.big_cohort ActiveSupport::OrderedHash.new
35
40
  }
36
41
  end
37
42
  end
@@ -39,11 +44,19 @@ class TestCohortScope < Test::Unit::TestCase
39
44
  context "strict_cohort" do
40
45
  should "raise if a non-OrderedHash is given to strict_cohort" do
41
46
  assert_raises(ArgumentError) {
42
- cohort = Citizen.strict_cohort Hash.new
47
+ Citizen.strict_cohort Hash.new
43
48
  }
44
49
  end
50
+
51
+ should "take minimum_cohort_size as an optional argument" do
52
+ ordered_attributes = ActiveSupport::OrderedHash.new
53
+ ordered_attributes[:favorite_color] = 'heliotrope'
54
+
55
+ cohort = Citizen.strict_cohort ordered_attributes, 0
56
+ assert_equal 1, cohort.count
57
+ end
45
58
 
46
- should "return an empty (strict) cohort if it can't find one that meets size requirements" do
59
+ should "return an empty cohort if it can't find one that meets size requirements" do
47
60
  ordered_attributes = ActiveSupport::OrderedHash.new
48
61
  ordered_attributes[:favorite_color] = 'heliotrope'
49
62
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Seamus Abshere