has_moderated 0.0.21 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/README.rdoc +48 -9
  2. data/lib/has_moderated.rb +13 -234
  3. data/lib/has_moderated/carrier_wave.rb +2 -2
  4. data/lib/has_moderated/common.rb +129 -0
  5. data/lib/has_moderated/moderated_associations.rb +59 -0
  6. data/lib/has_moderated/moderated_attributes.rb +74 -0
  7. data/lib/has_moderated/moderated_create.rb +48 -0
  8. data/lib/has_moderated/moderated_destroy.rb +36 -0
  9. data/lib/has_moderated/moderation_model.rb +64 -23
  10. data/lib/has_moderated/user_hooks.rb +10 -0
  11. data/lib/has_moderated/version.rb +1 -1
  12. data/test/dummy/app/models/hjoin_test.rb +3 -0
  13. data/test/dummy/app/models/hmanythrough_join.rb +4 -0
  14. data/test/dummy/app/models/hmanythrough_test.rb +4 -0
  15. data/test/dummy/app/models/hone_test.rb +3 -0
  16. data/test/dummy/app/models/photo.rb +1 -1
  17. data/test/dummy/app/models/subtask.rb +1 -0
  18. data/test/dummy/app/models/task.rb +7 -2
  19. data/test/dummy/db/development.sqlite3 +0 -0
  20. data/test/dummy/db/migrate/20111008195728_create_hone_tests.rb +9 -0
  21. data/test/dummy/db/migrate/20111008195809_create_hjoin_tests.rb +13 -0
  22. data/test/dummy/db/migrate/20111009193145_fix_join_table.rb +8 -0
  23. data/test/dummy/db/migrate/20111009201729_add_title_to_hone_tests.rb +5 -0
  24. data/test/dummy/db/migrate/20111009205517_create_hmanythrough_tests.rb +9 -0
  25. data/test/dummy/db/migrate/20111009205545_create_hmanythrough_joins.rb +11 -0
  26. data/test/dummy/db/schema.rb +33 -1
  27. data/test/dummy/db/test.sqlite3 +0 -0
  28. data/test/dummy/log/development.log +4508 -0
  29. data/test/dummy/log/test.log +78674 -0
  30. data/test/dummy/public/test.jpg +0 -0
  31. data/test/dummy/public/uploads/task_photo/photo/1/test.jpg +0 -0
  32. data/test/dummy/spec/factories/hjoin_tests.rb +7 -0
  33. data/test/dummy/spec/factories/hmanythrough_joins.rb +9 -0
  34. data/test/dummy/spec/factories/hmanythrough_tests.rb +7 -0
  35. data/test/dummy/spec/factories/hone_tests.rb +7 -0
  36. data/test/dummy/spec/models/hjoin_test_spec.rb +36 -0
  37. data/test/dummy/spec/models/hmanythrough_test_spec.rb +99 -0
  38. data/test/dummy/spec/models/hone_test_spec.rb +36 -0
  39. data/test/dummy/spec/models/photo_holder_spec.rb +9 -17
  40. data/test/dummy/spec/models/photo_spec.rb +16 -29
  41. data/test/dummy/spec/models/task_photo_spec.rb +3 -9
  42. data/test/dummy/spec/models/task_spec.rb +36 -2
  43. data/test/dummy/spec/support/photos.rb +28 -0
  44. metadata +50 -8
  45. data/test/dummy/falaf/test.rb +0 -0
  46. data/test/dummy/public/uploads/task_photo/photo/1/logo_arnes.gif +0 -0
Binary file
@@ -0,0 +1,7 @@
1
+ # Read about factories at http://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :hjoin_test do
5
+ title "MyString"
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ # Read about factories at http://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :hmanythrough_join do
5
+ hmanythrough_test_id 1
6
+ task_id 1
7
+ exdata "MyString"
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # Read about factories at http://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :hmanythrough_test do
5
+ title "MyString"
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # Read about factories at http://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :hone_test do
5
+ task_id 1
6
+ end
7
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe HjoinTest do
4
+ it "moderates assoc on create" do
5
+ t = Task.new :title => "Test"
6
+ t.hjoin_tests.build :title => "HJoin"
7
+ t.save
8
+
9
+ HjoinTest.count.should eq(0)
10
+ Task.count.should eq(0)
11
+
12
+ Moderation.last.accept
13
+
14
+ Task.first.hjoin_tests.count.should eq(1)
15
+ Task.first.hjoin_tests.first.title.should eq("HJoin")
16
+ end
17
+
18
+ it "moderates assoc on update" do
19
+ t = Task.new :title => "Test"
20
+ t.save
21
+
22
+ Task.count.should eq(0)
23
+
24
+ Moderation.last.accept
25
+
26
+ t = Task.first
27
+ t.hjoin_tests.create! :title => "HJoin"
28
+ HjoinTest.count.should eq(0)
29
+
30
+ Moderation.last.accept
31
+ HjoinTest.count.should eq(1)
32
+
33
+ Task.first.hjoin_tests.count.should eq(1)
34
+ Task.first.hjoin_tests.first.title.should eq("HJoin")
35
+ end
36
+ end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ describe HmanythroughTest do
4
+ it "moderates assoc on create" do
5
+ t = Task.new :title => "Test"
6
+ t.hmanythrough_test.build :title => "HJoin"
7
+ t.save
8
+
9
+ HmanythroughTest.count.should eq(0)
10
+ Task.count.should eq(0)
11
+
12
+ Moderation.last.accept
13
+
14
+ Task.first.hmanythrough_test.count.should eq(1)
15
+ Task.first.hmanythrough_test.first.title.should eq("HJoin")
16
+ end
17
+
18
+ it "moderates assoc on update" do
19
+ t = Task.new :title => "Test"
20
+ t.save
21
+
22
+ Task.count.should eq(0)
23
+
24
+ Moderation.last.accept
25
+
26
+ t = Task.first
27
+ t.hmanythrough_test.create! :title => "HJoin"
28
+ HmanythroughTest.count.should eq(0)
29
+
30
+ Moderation.last.accept
31
+ HmanythroughTest.count.should eq(1)
32
+
33
+ Task.first.hmanythrough_test.count.should eq(1)
34
+ Task.first.hmanythrough_test.first.title.should eq("HJoin")
35
+ end
36
+
37
+ it "moderates assoc on update (through model)" do
38
+ t = Task.new :title => "Test"
39
+ t.save
40
+
41
+ Task.count.should eq(0)
42
+
43
+ Moderation.last.accept
44
+
45
+ t = Task.first
46
+ j = HmanythroughJoin.new :exdata => "Data"
47
+ j.hmanythrough_test = HmanythroughTest.new :title => "Hello"
48
+ t.hmanythrough_join << j
49
+ t.save
50
+ HmanythroughTest.count.should eq(0)
51
+
52
+ Moderation.last.accept
53
+ HmanythroughTest.count.should eq(1)
54
+
55
+ Task.first.hmanythrough_test.count.should eq(1)
56
+ Task.first.hmanythrough_test.first.title.should eq("Hello")
57
+ Task.first.hmanythrough_test.first.hmanythrough_join.first.exdata.should eq("Data")
58
+ end
59
+
60
+ it "moderates assoc on update (through model) 2" do
61
+ pending("need to figure this out, hook will trigger when calling build already")
62
+ t = Task.new :title => "Test"
63
+ t.save
64
+
65
+ Task.count.should eq(0)
66
+
67
+ Moderation.last.accept
68
+
69
+ t = Task.first
70
+ j = t.hmanythrough_join.build :exdata => "Data"
71
+ j.hmanythrough_test = HmanythroughTest.new :title => "Hello"
72
+ t.save
73
+ HmanythroughTest.count.should eq(0)
74
+
75
+ raise Moderation.last.to_yaml
76
+ Moderation.last.accept
77
+ HmanythroughTest.count.should eq(1)
78
+
79
+ Task.first.hmanythrough_test.count.should eq(1)
80
+ Task.first.hmanythrough_test.first.title.should eq("Hello")
81
+ end
82
+
83
+ it "moderates assoc extra data on create" do
84
+ t = Task.new :title => "Test"
85
+ j = t.hmanythrough_join.build :exdata => "Data"
86
+ j.hmanythrough_test = HmanythroughTest.new :title => "Hello"
87
+ t.save
88
+
89
+ HmanythroughTest.count.should eq(0)
90
+ Task.count.should eq(0)
91
+
92
+ Moderation.last.accept
93
+ HmanythroughTest.count.should eq(1)
94
+
95
+ Task.first.hmanythrough_test.count.should eq(1)
96
+ Task.first.hmanythrough_test.first.title.should eq("Hello")
97
+ Task.first.hmanythrough_test.first.hmanythrough_join.first.exdata.should eq("Data")
98
+ end
99
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe HoneTest do
4
+ it "moderates assoc on create" do
5
+ t = Task.new :title => "Test"
6
+ t.hone_test = HoneTest.new :title => "Hone"
7
+ t.save
8
+
9
+ HoneTest.count.should eq(0)
10
+ Task.count.should eq(0)
11
+
12
+ Moderation.last.accept
13
+ HoneTest.count.should eq(1)
14
+
15
+ Task.first.hone_test.title.should eq("Hone")
16
+ end
17
+
18
+ it "moderates assoc on update" do
19
+ t = Task.new :title => "Test"
20
+ t.save
21
+
22
+ Task.count.should eq(0)
23
+
24
+ Moderation.last.accept
25
+
26
+ t = Task.first
27
+ t.association(:hone_test).build :title => "Hone"
28
+ t.save
29
+ HoneTest.count.should eq(0)
30
+
31
+ Moderation.last.accept
32
+ HoneTest.count.should eq(1)
33
+
34
+ Task.first.hone_test.title.should eq("Hone")
35
+ end
36
+ end
@@ -1,29 +1,21 @@
1
1
  require 'spec_helper'
2
- require 'fileutils'
3
-
4
- def dirEmpty? dirname
5
- return true unless File.directory?(dirname)
6
- Dir.entries(dirname).size == 2
7
- end
8
-
9
- tempdir = File.expand_path("../../../public/uploads/tmp", __FILE__)
10
- uploaddir = "/Users/apple/rails/has_moderated/test/dummy/public/uploads/photo/photo/1"
11
- SAMPLE_PHOTO_URL = "http://www.arnes.si/typo3conf/ext/ag_arnes_eff_template/templates/template-index/images/logo_arnes.gif"
12
2
 
13
3
  describe PhotoHolder do
4
+ before(:each) do
5
+ FileUtils.rm_rf(TEMPDIR) # remove temp dir
6
+ FileUtils.rm_rf(File.expand_path("../../../public/uploads", __FILE__)) # remove uploads dir
7
+ end
8
+
14
9
  it "should upload photo" do
15
- photo = PhotoHolder.create!(:photos_attributes => { 0 => {:remote_photo_url => SAMPLE_PHOTO_URL}})
10
+ photo = PhotoHolder.create!(:photos_attributes => { 0 => {:photo => carrierwave_test_photo}})
16
11
 
17
12
  Photo.count.should eq(0)
18
- dirEmpty?(tempdir).should be_false
13
+ tmpEmpty?.should be_false
19
14
  Moderation.last.accept
20
- dirEmpty?(tempdir).should be_true
15
+ tmpEmpty?.should be_true
21
16
 
22
17
  Photo.count.should eq(1)
23
18
  photo = Photo.first
24
- photo.photo.should_not be_nil
25
- photo.photo.file.should_not be_nil
26
- photo.photo.file.file.should_not be_nil
27
- assert(Photo.first.photo.file.file =~ /photo\/1\/logo_arnes.gif\Z/)
19
+ assert_photo_uploaded(photo.photo)
28
20
  end
29
21
  end
@@ -1,43 +1,31 @@
1
1
  require 'spec_helper'
2
- require 'fileutils'
3
-
4
- def dirEmpty? dirname
5
- return true unless File.directory?(dirname)
6
- Dir.entries(dirname).size == 2
7
- end
8
-
9
- tempdir = File.expand_path("../../../public/uploads/tmp", __FILE__)
10
- uploaddir = "/Users/apple/rails/has_moderated/test/dummy/public/uploads/photo/photo/1"
11
- SAMPLE_PHOTO_URL = "http://www.arnes.si/typo3conf/ext/ag_arnes_eff_template/templates/template-index/images/logo_arnes.gif"
12
2
 
13
3
  describe Photo do
14
4
  before(:each) do
15
- FileUtils.rm_rf(tempdir) # remove temp dir
5
+ FileUtils.rm_rf(TEMPDIR) # remove temp dir
16
6
  FileUtils.rm_rf(File.expand_path("../../../public/uploads", __FILE__)) # remove uploads dir
17
7
  end
18
8
 
19
9
  it "should upload photo" do
20
- photo = Photo.create!(:remote_photo_url => SAMPLE_PHOTO_URL)
10
+ photo = Photo.create!(:photo => carrierwave_test_photo)
21
11
 
22
12
  Photo.count.should eq(0)
23
- dirEmpty?(tempdir).should be_false
13
+ tmpEmpty?.should be_false
24
14
  Moderation.last.accept
25
- dirEmpty?(tempdir).should be_true
15
+ tmpEmpty?.should be_true
26
16
 
27
17
  Photo.count.should eq(1)
28
18
  photo = Photo.first
29
- photo.photo.should_not be_nil
30
- photo.photo.file.should_not be_nil
31
- photo.photo.file.file.should_not be_nil
19
+ assert_photo_uploaded(photo.photo)
32
20
  end
33
21
 
34
22
  it "should delete temp files if discarding a photo moderation" do
35
- photo = Photo.create!(:remote_photo_url => SAMPLE_PHOTO_URL)
23
+ photo = Photo.create!(:photo => carrierwave_test_photo)
36
24
 
37
25
  Photo.count.should eq(0)
38
- dirEmpty?(tempdir).should be_false
26
+ tmpEmpty?.should be_false
39
27
  Moderation.last.discard
40
- dirEmpty?(tempdir).should be_true
28
+ tmpEmpty?.should be_true
41
29
 
42
30
  Photo.count.should eq(0)
43
31
  end
@@ -49,20 +37,19 @@ describe Photo do
49
37
  Moderation.last.accept
50
38
 
51
39
  p = Photo.first
52
- p.remote_photo_url = SAMPLE_PHOTO_URL
53
- dirEmpty?(uploaddir).should be_true
40
+ p.photo = carrierwave_test_photo
41
+ dirEmpty?(UPLOADDIR).should be_true
54
42
  p.save
55
- dirEmpty?(uploaddir).should be_true
43
+ dirEmpty?(UPLOADDIR).should be_true
56
44
 
57
45
  Photo.first.photo.file.should be_nil
58
46
  Moderation.count.should eq(1)
59
47
 
60
- dirEmpty?(tempdir).should be_false
48
+ tmpEmpty?.should be_false
61
49
  Moderation.last.accept
62
- dirEmpty?(tempdir).should be_true
63
- dirEmpty?(uploaddir).should be_false
64
- Photo.first.photo.file.should_not be_nil
65
- File.exist?(Photo.first.photo.file.file).should be_true
66
- assert(Photo.first.photo.file.file =~ /photo\/1\/logo_arnes.gif\Z/)
50
+ tmpEmpty?.should be_true
51
+ dirEmpty?(UPLOADDIR).should be_false
52
+ photo = Photo.first
53
+ assert_photo_uploaded(photo.photo)
67
54
  end
68
55
  end
@@ -1,19 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
- tempdir = File.expand_path("../../../public/uploads/tmp", __FILE__)
4
- uploaddir = "/Users/apple/rails/has_moderated/test/dummy/public/uploads/photo/photo/1"
5
- SAMPLE_PHOTO_URL = "http://www.arnes.si/typo3conf/ext/ag_arnes_eff_template/templates/template-index/images/logo_arnes.gif"
6
-
7
3
  describe TaskPhoto do
8
4
  before(:each) do
9
- FileUtils.rm_rf(tempdir) # remove temp dir
5
+ FileUtils.rm_rf(TEMPDIR) # remove temp dir
10
6
  FileUtils.rm_rf(File.expand_path("../../../public/uploads", __FILE__)) # remove uploads dir
11
7
  end
12
8
 
13
9
  it "should moderate photos for task on create even if photos themselves are not moderated" do
14
10
  t = Task.new :title => "Task 1"
15
11
  p = t.task_photos.build
16
- p.remote_photo_url = SAMPLE_PHOTO_URL
12
+ p.photo = carrierwave_test_photo
17
13
  t.save
18
14
  Moderation.count.should eq(1)
19
15
  Task.count.should eq(0)
@@ -24,8 +20,6 @@ describe TaskPhoto do
24
20
  Task.count.should eq(1)
25
21
  Task.first.title.should eq("Task 1")
26
22
  p = Task.first.task_photos.first
27
- p.should_not be_nil
28
- p.photo.should_not be_nil
29
- p.photo.file.should_not be_nil
23
+ assert_photo_uploaded(p.photo)
30
24
  end
31
25
  end
@@ -177,7 +177,7 @@ describe Task do
177
177
  Task.count.should eq(0)
178
178
  end
179
179
 
180
- it "moderates new associations on existing records" do
180
+ it "moderates new associations on existing records (add_associations_moderated)" do
181
181
  t = Task.create! :title => "Bye Bye"
182
182
  Moderation.last.accept
183
183
 
@@ -194,7 +194,7 @@ describe Task do
194
194
  Task.first.subtasks.first.title.should eq("Hollywood Hills")
195
195
  end
196
196
 
197
- it "moderates new associations to existing records on existing records" do
197
+ it "moderates new associations to existing records on existing records (add_associations_moderated)" do
198
198
  sub = Subtask.create! :title => "Hollywood Hills"
199
199
  t = Task.create! :title => "Bye Bye"
200
200
  Moderation.last.accept
@@ -211,4 +211,38 @@ describe Task do
211
211
  Subtask.count.should eq(1)
212
212
  Task.first.subtasks.first.title.should eq("Hollywood Hills")
213
213
  end
214
+
215
+ it "moderates new associations with build" do
216
+ Task.create! :title => "Bye Bye"
217
+ Moderation.last.accept
218
+
219
+ t = Task.last
220
+ t.subtasks.build :title => "Jo jo"
221
+ # TODO
222
+ # Moderation.count.should eq(0)
223
+ t.save
224
+ Moderation.count.should eq(1)
225
+
226
+ Task.last.subtasks.count.should eq(0)
227
+ Moderation.last.accept
228
+ Task.last.subtasks.first.title.should eq("Jo jo")
229
+ end
230
+
231
+ it "moderates associations to existing records with <<" do
232
+ Task.create! :title => "Bye Bye"
233
+ Moderation.last.accept
234
+ Subtask.create! :title => "Jo jo"
235
+
236
+ Moderation.count.should eq(0)
237
+
238
+ t = Task.first
239
+ t.subtasks << Subtask.first
240
+
241
+ Task.first.subtasks.count.should eq(0)
242
+ Moderation.last.accept
243
+
244
+ st = Task.first.subtasks.first
245
+ st.title.should eq("Jo jo")
246
+ st.id.should eq(Subtask.first.id)
247
+ end
214
248
  end
@@ -0,0 +1,28 @@
1
+ require 'fileutils'
2
+
3
+ def dirEmpty? dirname
4
+ return true unless File.directory?(dirname)
5
+ Dir.entries(dirname).size == 2
6
+ end
7
+
8
+ def tmpEmpty?
9
+ dirEmpty?(TEMPDIR)
10
+ end
11
+
12
+ TEMPDIR = File.expand_path("../../../public/uploads/tmp", __FILE__)
13
+ UPLOADDIR = "/Users/apple/rails/has_moderated/test/dummy/public/uploads/photo/photo/1"
14
+
15
+ def carrierwave_test_photo
16
+ test_photo_path = File.expand_path("../../../public/test.jpg", __FILE__)
17
+ File.open(test_photo_path, "r")
18
+ end
19
+
20
+ def assert_photo_uploaded photo
21
+ photo.should_not be_nil
22
+ photo.file.should_not be_nil
23
+ photo.file.file.should_not be_nil
24
+
25
+ filename = photo.file.file
26
+ File.exist?(filename)
27
+ assert(filename =~ /photo\/1\/test.jpg\Z/)
28
+ end