lostboy-paperclip 2.2.6.1

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 (44) hide show
  1. data/LICENSE +26 -0
  2. data/README.rdoc +172 -0
  3. data/Rakefile +77 -0
  4. data/generators/paperclip/USAGE +5 -0
  5. data/generators/paperclip/paperclip_generator.rb +27 -0
  6. data/generators/paperclip/templates/paperclip_migration.rb.erb +19 -0
  7. data/init.rb +1 -0
  8. data/lib/paperclip/attachment.rb +398 -0
  9. data/lib/paperclip/callback_compatability.rb +33 -0
  10. data/lib/paperclip/geometry.rb +115 -0
  11. data/lib/paperclip/iostream.rb +58 -0
  12. data/lib/paperclip/matchers/have_attached_file_matcher.rb +49 -0
  13. data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +66 -0
  14. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +48 -0
  15. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +83 -0
  16. data/lib/paperclip/matchers.rb +4 -0
  17. data/lib/paperclip/processor.rb +48 -0
  18. data/lib/paperclip/storage.rb +241 -0
  19. data/lib/paperclip/thumbnail.rb +70 -0
  20. data/lib/paperclip/upfile.rb +48 -0
  21. data/lib/paperclip.rb +318 -0
  22. data/shoulda_macros/paperclip.rb +68 -0
  23. data/tasks/paperclip_tasks.rake +79 -0
  24. data/test/attachment_test.rb +723 -0
  25. data/test/database.yml +4 -0
  26. data/test/fixtures/12k.png +0 -0
  27. data/test/fixtures/50x50.png +0 -0
  28. data/test/fixtures/5k.png +0 -0
  29. data/test/fixtures/bad.png +1 -0
  30. data/test/fixtures/text.txt +0 -0
  31. data/test/fixtures/twopage.pdf +0 -0
  32. data/test/geometry_test.rb +168 -0
  33. data/test/helper.rb +82 -0
  34. data/test/integration_test.rb +495 -0
  35. data/test/iostream_test.rb +71 -0
  36. data/test/matchers/have_attached_file_matcher_test.rb +21 -0
  37. data/test/matchers/validate_attachment_content_type_matcher_test.rb +30 -0
  38. data/test/matchers/validate_attachment_presence_matcher_test.rb +21 -0
  39. data/test/matchers/validate_attachment_size_matcher_test.rb +50 -0
  40. data/test/paperclip_test.rb +237 -0
  41. data/test/processor_test.rb +10 -0
  42. data/test/storage_test.rb +277 -0
  43. data/test/thumbnail_test.rb +177 -0
  44. metadata +133 -0
data/test/database.yml ADDED
@@ -0,0 +1,4 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: ":memory:"
4
+
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ This is not an image.
File without changes
Binary file
@@ -0,0 +1,168 @@
1
+ require 'test/helper'
2
+
3
+ class GeometryTest < Test::Unit::TestCase
4
+ context "Paperclip::Geometry" do
5
+ should "correctly report its given dimensions" do
6
+ assert @geo = Paperclip::Geometry.new(1024, 768)
7
+ assert_equal 1024, @geo.width
8
+ assert_equal 768, @geo.height
9
+ end
10
+
11
+ should "set height to 0 if height dimension is missing" do
12
+ assert @geo = Paperclip::Geometry.new(1024)
13
+ assert_equal 1024, @geo.width
14
+ assert_equal 0, @geo.height
15
+ end
16
+
17
+ should "set width to 0 if width dimension is missing" do
18
+ assert @geo = Paperclip::Geometry.new(nil, 768)
19
+ assert_equal 0, @geo.width
20
+ assert_equal 768, @geo.height
21
+ end
22
+
23
+ should "be generated from a WxH-formatted string" do
24
+ assert @geo = Paperclip::Geometry.parse("800x600")
25
+ assert_equal 800, @geo.width
26
+ assert_equal 600, @geo.height
27
+ end
28
+
29
+ should "be generated from a xH-formatted string" do
30
+ assert @geo = Paperclip::Geometry.parse("x600")
31
+ assert_equal 0, @geo.width
32
+ assert_equal 600, @geo.height
33
+ end
34
+
35
+ should "be generated from a Wx-formatted string" do
36
+ assert @geo = Paperclip::Geometry.parse("800x")
37
+ assert_equal 800, @geo.width
38
+ assert_equal 0, @geo.height
39
+ end
40
+
41
+ should "be generated from a W-formatted string" do
42
+ assert @geo = Paperclip::Geometry.parse("800")
43
+ assert_equal 800, @geo.width
44
+ assert_equal 0, @geo.height
45
+ end
46
+
47
+ should "ensure the modifier is nil if not present" do
48
+ assert @geo = Paperclip::Geometry.parse("123x456")
49
+ assert_nil @geo.modifier
50
+ end
51
+
52
+ ['>', '<', '#', '@', '%', '^', '!', nil].each do |mod|
53
+ should "ensure the modifier #{mod.inspect} is preserved" do
54
+ assert @geo = Paperclip::Geometry.parse("123x456#{mod}")
55
+ assert_equal mod, @geo.modifier
56
+ assert_equal "123x456#{mod}", @geo.to_s
57
+ end
58
+ end
59
+
60
+ ['>', '<', '#', '@', '%', '^', '!', nil].each do |mod|
61
+ should "ensure the modifier #{mod.inspect} is preserved with no height" do
62
+ assert @geo = Paperclip::Geometry.parse("123x#{mod}")
63
+ assert_equal mod, @geo.modifier
64
+ assert_equal "123#{mod}", @geo.to_s
65
+ end
66
+ end
67
+
68
+ should "make sure the modifier gets passed during transformation_to" do
69
+ assert @src = Paperclip::Geometry.parse("123x456")
70
+ assert @dst = Paperclip::Geometry.parse("123x456>")
71
+ assert_equal "123x456>", @src.transformation_to(@dst).to_s
72
+ end
73
+
74
+ should "generate correct ImageMagick formatting string for W-formatted string" do
75
+ assert @geo = Paperclip::Geometry.parse("800")
76
+ assert_equal "800", @geo.to_s
77
+ end
78
+
79
+ should "generate correct ImageMagick formatting string for Wx-formatted string" do
80
+ assert @geo = Paperclip::Geometry.parse("800x")
81
+ assert_equal "800", @geo.to_s
82
+ end
83
+
84
+ should "generate correct ImageMagick formatting string for xH-formatted string" do
85
+ assert @geo = Paperclip::Geometry.parse("x600")
86
+ assert_equal "x600", @geo.to_s
87
+ end
88
+
89
+ should "generate correct ImageMagick formatting string for WxH-formatted string" do
90
+ assert @geo = Paperclip::Geometry.parse("800x600")
91
+ assert_equal "800x600", @geo.to_s
92
+ end
93
+
94
+ should "be generated from a file" do
95
+ file = File.join(File.dirname(__FILE__), "fixtures", "5k.png")
96
+ file = File.new(file, 'rb')
97
+ assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) }
98
+ assert @geo.height > 0
99
+ assert @geo.width > 0
100
+ end
101
+
102
+ should "be generated from a file path" do
103
+ file = File.join(File.dirname(__FILE__), "fixtures", "5k.png")
104
+ assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) }
105
+ assert @geo.height > 0
106
+ assert @geo.width > 0
107
+ end
108
+
109
+ should "not generate from a bad file" do
110
+ file = "/home/This File Does Not Exist.omg"
111
+ assert_raise(Paperclip::NotIdentifiedByImageMagickError){ @geo = Paperclip::Geometry.from_file(file) }
112
+ end
113
+
114
+ [['vertical', 900, 1440, true, false, false, 1440, 900, 0.625],
115
+ ['horizontal', 1024, 768, false, true, false, 1024, 768, 1.3333],
116
+ ['square', 100, 100, false, false, true, 100, 100, 1]].each do |args|
117
+ context "performing calculations on a #{args[0]} viewport" do
118
+ setup do
119
+ @geo = Paperclip::Geometry.new(args[1], args[2])
120
+ end
121
+
122
+ should "#{args[3] ? "" : "not"} be vertical" do
123
+ assert_equal args[3], @geo.vertical?
124
+ end
125
+
126
+ should "#{args[4] ? "" : "not"} be horizontal" do
127
+ assert_equal args[4], @geo.horizontal?
128
+ end
129
+
130
+ should "#{args[5] ? "" : "not"} be square" do
131
+ assert_equal args[5], @geo.square?
132
+ end
133
+
134
+ should "report that #{args[6]} is the larger dimension" do
135
+ assert_equal args[6], @geo.larger
136
+ end
137
+
138
+ should "report that #{args[7]} is the smaller dimension" do
139
+ assert_equal args[7], @geo.smaller
140
+ end
141
+
142
+ should "have an aspect ratio of #{args[8]}" do
143
+ assert_in_delta args[8], @geo.aspect, 0.0001
144
+ end
145
+ end
146
+ end
147
+
148
+ [[ [1000, 100], [64, 64], "x64", "64x64+288+0" ],
149
+ [ [100, 1000], [50, 950], "x950", "50x950+22+0" ],
150
+ [ [100, 1000], [50, 25], "50x", "50x25+0+237" ]]. each do |args|
151
+ context "of #{args[0].inspect} and given a Geometry #{args[1].inspect} and sent transform_to" do
152
+ setup do
153
+ @geo = Paperclip::Geometry.new(*args[0])
154
+ @dst = Paperclip::Geometry.new(*args[1])
155
+ @scale, @crop = @geo.transformation_to @dst, true
156
+ end
157
+
158
+ should "be able to return the correct scaling transformation geometry #{args[2]}" do
159
+ assert_equal args[2], @scale
160
+ end
161
+
162
+ should "be able to return the correct crop transformation geometry #{args[3]}" do
163
+ assert_equal args[3], @crop
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ gem 'thoughtbot-shoulda', ">= 2.9.0"
4
+ require 'shoulda'
5
+ require 'mocha'
6
+ require 'tempfile'
7
+
8
+ gem 'sqlite3-ruby'
9
+
10
+ require 'active_record'
11
+ require 'active_support'
12
+ begin
13
+ require 'ruby-debug'
14
+ rescue LoadError
15
+ puts "ruby-debug not loaded"
16
+ end
17
+
18
+ ROOT = File.join(File.dirname(__FILE__), '..')
19
+ RAILS_ROOT = ROOT
20
+
21
+ $LOAD_PATH << File.join(ROOT, 'lib')
22
+ $LOAD_PATH << File.join(ROOT, 'lib', 'paperclip')
23
+
24
+ require File.join(ROOT, 'lib', 'paperclip.rb')
25
+
26
+ require 'shoulda_macros/paperclip'
27
+
28
+ ENV['RAILS_ENV'] ||= 'test'
29
+
30
+ FIXTURES_DIR = File.join(File.dirname(__FILE__), "fixtures")
31
+ config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
32
+ ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
33
+ ActiveRecord::Base.establish_connection(config['test'])
34
+
35
+ def reset_class class_name
36
+ ActiveRecord::Base.send(:include, Paperclip)
37
+ Object.send(:remove_const, class_name) rescue nil
38
+ klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
39
+ klass.class_eval{ include Paperclip }
40
+ klass
41
+ end
42
+
43
+ def reset_table table_name, &block
44
+ block ||= lambda{ true }
45
+ ActiveRecord::Base.connection.create_table :dummies, {:force => true}, &block
46
+ end
47
+
48
+ def modify_table table_name, &block
49
+ ActiveRecord::Base.connection.change_table :dummies, &block
50
+ end
51
+
52
+ def rebuild_model options = {}
53
+ ActiveRecord::Base.connection.create_table :dummies, :force => true do |table|
54
+ table.column :other, :string
55
+ table.column :avatar_file_name, :string
56
+ table.column :avatar_content_type, :string
57
+ table.column :avatar_file_size, :integer
58
+ table.column :avatar_updated_at, :datetime
59
+ end
60
+ rebuild_class options
61
+ end
62
+
63
+ def rebuild_class options = {}
64
+ ActiveRecord::Base.send(:include, Paperclip)
65
+ Object.send(:remove_const, "Dummy") rescue nil
66
+ Object.const_set("Dummy", Class.new(ActiveRecord::Base))
67
+ Dummy.class_eval do
68
+ include Paperclip
69
+ has_attached_file :avatar, options
70
+ end
71
+ end
72
+
73
+ def temporary_rails_env(new_env)
74
+ old_env = defined?(RAILS_ENV) ? RAILS_ENV : nil
75
+ silence_warnings do
76
+ Object.const_set("RAILS_ENV", new_env)
77
+ end
78
+ yield
79
+ silence_warnings do
80
+ Object.const_set("RAILS_ENV", old_env)
81
+ end
82
+ end