grouped_scope 0.6.1 → 3.1.0

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.
Files changed (34) hide show
  1. data/.travis.yml +5 -0
  2. data/CHANGELOG +13 -0
  3. data/Gemfile +4 -6
  4. data/README.md +173 -0
  5. data/lib/grouped_scope.rb +7 -7
  6. data/lib/grouped_scope/arish/associations/association_scope.rb +90 -0
  7. data/lib/grouped_scope/arish/associations/builder/grouped_association.rb +50 -0
  8. data/lib/grouped_scope/arish/associations/builder/grouped_collection_association.rb +32 -0
  9. data/lib/grouped_scope/arish/associations/collection_association.rb +25 -0
  10. data/lib/grouped_scope/arish/base.rb +24 -0
  11. data/lib/grouped_scope/arish/reflection.rb +18 -0
  12. data/lib/grouped_scope/arish/relation/predicate_builer.rb +27 -0
  13. data/lib/grouped_scope/errors.rb +2 -3
  14. data/lib/grouped_scope/self_grouping.rb +59 -23
  15. data/lib/grouped_scope/version.rb +2 -4
  16. data/test/cases/has_many_test.rb +155 -0
  17. data/test/cases/has_many_through_test.rb +51 -0
  18. data/test/cases/reflection_test.rb +62 -0
  19. data/test/cases/self_grouping_test.rb +201 -0
  20. data/test/helper.rb +48 -35
  21. metadata +27 -30
  22. data/README.rdoc +0 -98
  23. data/lib/grouped_scope/association_reflection.rb +0 -54
  24. data/lib/grouped_scope/class_methods.rb +0 -32
  25. data/lib/grouped_scope/core_ext.rb +0 -29
  26. data/lib/grouped_scope/grouping.rb +0 -9
  27. data/lib/grouped_scope/has_many_association.rb +0 -28
  28. data/lib/grouped_scope/has_many_through_association.rb +0 -28
  29. data/lib/grouped_scope/instance_methods.rb +0 -10
  30. data/test/grouped_scope/association_reflection_test.rb +0 -73
  31. data/test/grouped_scope/class_methods_test.rb +0 -51
  32. data/test/grouped_scope/has_many_association_test.rb +0 -156
  33. data/test/grouped_scope/has_many_through_association_test.rb +0 -51
  34. data/test/grouped_scope/self_grouping_test.rb +0 -146
@@ -1,51 +0,0 @@
1
- require 'helper'
2
-
3
- class GroupedScope::HasManyThroughAssociationTest < GroupedScope::TestCase
4
-
5
- setup do
6
- setup_environment
7
- @e1 = FactoryGirl.create(:employee, :group_id => 1)
8
- @e1.departments << Department.hr << Department.finance
9
- @e2 = FactoryGirl.create(:employee, :group_id => 1)
10
- @e2.departments << Department.it
11
- @all_group_departments = [Department.hr, Department.it, Department.finance]
12
- end
13
-
14
- context 'For default association' do
15
-
16
- should 'scope to owner' do
17
- assert_sql(/employee_id = #{@e1.id}/) do
18
- @e1.departments(true)
19
- end
20
- end
21
-
22
- should 'scope count to owner' do
23
- assert_sql(/employee_id = #{@e1.id}/) do
24
- @e1.departments(true).count
25
- end
26
- end
27
-
28
- end
29
-
30
- context 'For grouped association' do
31
-
32
- should 'scope to group' do
33
- assert_sql(/employee_id IN \(#{@e1.id},#{@e2.id}\)/) do
34
- @e2.group.departments(true)
35
- end
36
- end
37
-
38
- should 'scope count to group' do
39
- assert_sql(/employee_id IN \(#{@e1.id},#{@e2.id}\)/) do
40
- @e1.group.departments(true).count
41
- end
42
- end
43
-
44
- should 'have a group count equal to sum of seperate owner counts' do
45
- assert_equal @e1.departments(true).count + @e2.departments(true).count, @e2.group.departments(true).count
46
- end
47
-
48
- end
49
-
50
-
51
- end
@@ -1,146 +0,0 @@
1
- require 'helper'
2
-
3
- class GroupedScope::SelfGrouppingTest < GroupedScope::TestCase
4
-
5
- setup do
6
- setup_environment
7
- end
8
-
9
- context 'General behavior' do
10
-
11
- setup do
12
- @employee = FactoryGirl.create(:employee)
13
- end
14
-
15
- should 'return an array' do
16
- assert_instance_of Array, @employee.group
17
- end
18
-
19
- should 'return #ids array' do
20
- assert_equal [@employee.id], @employee.group.ids
21
- end
22
-
23
- should 'return #quoted_ids string for use in sql statments' do
24
- assert_equal "#{@employee.id}", @employee.group.quoted_ids
25
- end
26
-
27
- should 'respond true to grouped associations' do
28
- assert @employee.group.respond_to?(:reports)
29
- end
30
-
31
- should 'raise a GroupedScope::NoGroupIdError exception for objects with no group_id schema' do
32
- FooBar.column_names.wont_include 'group_id'
33
- lambda{ GroupedScope::SelfGroupping.new(FooBar.new) }.must_raise(GroupedScope::NoGroupIdError)
34
- end
35
-
36
- should 'return correct attribute_condition for GroupedScope::SelfGroupping object' do
37
- assert_sql(/"?group_id"? IN \(#{@employee.id}\)/) do
38
- Employee.find :all, :conditions => {:group_id => @employee.group}
39
- end
40
- end
41
-
42
- context 'for Array delegates' do
43
-
44
- should 'respond to first/last' do
45
- [:first,:last].each do |method|
46
- assert @employee.group.respond_to?(method), "Should respond to #{method.inspect}"
47
- end
48
- end
49
-
50
- should 'respond to each' do
51
- assert @employee.group.respond_to?(:each)
52
- @employee.group.each do |employee|
53
- assert_instance_of Employee, employee
54
- end
55
- end
56
-
57
- end
58
-
59
- end
60
-
61
- context 'Calling #group' do
62
-
63
- should 'return an array' do
64
- assert_instance_of Array, FactoryGirl.create(:employee).group
65
- end
66
-
67
- context 'with a NIL group_id' do
68
-
69
- setup do
70
- @employee = FactoryGirl.create(:employee)
71
- end
72
-
73
- should 'return a collection of one' do
74
- assert_equal 1, @employee.group.size
75
- end
76
-
77
- should 'include self in group' do
78
- assert @employee.group.include?(@employee)
79
- end
80
-
81
- end
82
-
83
- context 'with a set group_id' do
84
-
85
- setup do
86
- @employee = FactoryGirl.create(:employee, :group_id => 1)
87
- end
88
-
89
- should 'return a collection of one' do
90
- assert_equal 1, @employee.group.size
91
- end
92
-
93
- should 'include self in group' do
94
- assert @employee.group.include?(@employee)
95
- end
96
-
97
- end
98
-
99
- context 'with different groups available' do
100
-
101
- setup do
102
- @e1 = FactoryGirl.create(:employee_with_reports, :group_id => 1)
103
- @e2 = FactoryGirl.create(:employee, :group_id => 1)
104
- @e3 = FactoryGirl.create(:employee_with_reports, :group_id => 2)
105
- @e4 = FactoryGirl.create(:employee, :group_id => 2)
106
- end
107
-
108
- should 'return a collection of group members' do
109
- assert_equal 2, @e1.group.size
110
- end
111
-
112
- should 'include all group members' do
113
- assert_same_elements [@e1,@e2], @e1.group
114
- end
115
-
116
- should 'allow member to find grouped associations of other member' do
117
- assert_same_elements @e1.reports, @e2.group.reports
118
- end
119
-
120
- should 'allow proxy owner to define all grouped which ignores group_id schema' do
121
- @e2.stubs(:all_grouped?).returns(true)
122
- assert_same_elements [@e1,@e2,@e3,@e4], @e2.group
123
- assert_same_elements @e1.reports + @e3.reports, @e2.group.reports
124
- end
125
-
126
- end
127
-
128
- context 'with different groups in legacy schema' do
129
-
130
- setup do
131
- @e1 = FactoryGirl.create(:legacy_employee_with_reports, :group_id => 1)
132
- @e2 = FactoryGirl.create(:legacy_employee, :group_id => 1)
133
- @e3 = FactoryGirl.create(:legacy_employee_with_reports, :group_id => 2)
134
- @e4 = FactoryGirl.create(:legacy_employee, :group_id => 2)
135
- end
136
-
137
- should 'honor legacy reports association options like class_name and foreign_key' do
138
- @e2.group.reports.all? { |r| r.is_a?(LegacyReport) }
139
- end
140
-
141
- end
142
-
143
- end
144
-
145
-
146
- end