has_moderated 0.0.21 → 0.0.24

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 (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