file_column_with_s3 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0482bce566504b5f4172787d578a64cf71f37294
4
- data.tar.gz: e77a7c13b7bb686225cd8a0786c62abd9ffdd07e
2
+ SHA256:
3
+ metadata.gz: a873a910fc1cbaafc4f2e5756510c1a41f37e3393fd1c1b256b1368a3dcf1060
4
+ data.tar.gz: ea40ce044ddeb43e49bf96d6d755048ef53d588c909db0aec6bc7dbc63e71847
5
5
  SHA512:
6
- metadata.gz: 853f2abd43b2a722fe7ea52423dbe68f234a849a12ea876c263a0bb1eb02dd5992ff64bb023e1d51683f8e115b07aa20360747591f6abed421b89878a101dc5a
7
- data.tar.gz: 134232b045d69995b655e043156ca5c95c6ba2ca6ecb9ee14647c6a596d9fb33d046e9ea279d330126775a77fc0da155d7b4d20dba9a00896a9a287ac1516b44
6
+ metadata.gz: fe3e04f3b4a29cc641c966ab28f437b29ce57f64e95c32809f8edc205c4e1da42e899926afbed84c9a80eaa3de1d63fef5ac8439be2b10eee0cfab3bf3234b3f
7
+ data.tar.gz: 055f3b4a607e2bbf0f1ce25fb216d5b3037b575e0d6420de7c333c6b68963f2e88d70b6224fc883533e0efc6aa436f0a9fcc6f591c6a812abfadd3dafbcd01cc
data/README CHANGED
@@ -1,3 +1,5 @@
1
+ Master branch :image:https://app.snap-ci.com/ThoughtWorksStudios/file_column/branch/master/build_image["Build Status", link="https://app.snap-ci.com/ThoughtWorksStudios/file_column/branch/master"]
2
+
1
3
  FEATURES
2
4
  ========
3
5
 
@@ -22,8 +24,8 @@ end
22
24
  uploaded file. Note that you need an Entry object in the instance variable @entry for this
23
25
  to work.
24
26
 
25
- * easy integration with RMagick to resize images and/or create thumb-nails.
26
-
27
+ * Does not support RMagick based features anymore. Look for version 0.2.0 and below for the same. Images cannot be resized or
28
+ checked for resolution.
27
29
  USAGE
28
30
  =====
29
31
 
data/Rakefile CHANGED
@@ -35,6 +35,4 @@ desc "Run all tests"
35
35
  task :test do
36
36
  sh "cd test; ruby file_column_test.rb"
37
37
  sh "cd test; ruby file_column_helper_test.rb"
38
- sh "cd test; ruby magick_test.rb"
39
- sh "cd test; ruby magick_view_only_test.rb"
40
38
  end
data/lib/file_column.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'tempfile'
3
- require 'magick_file_column'
4
3
  require 'storage'
5
- require 'file_column/validations'
4
+ require File.dirname(__FILE__) + '/file_column/validations'
6
5
 
7
6
  module FileColumn # :nodoc:
8
7
  def self.append_features(base)
@@ -337,7 +336,7 @@ module FileColumn # :nodoc:
337
336
  def get_content_type(fallback=nil)
338
337
  if options[:file_exec]
339
338
  begin
340
- content_type = `#{options[:file_exec]} -bi "#{File.join(@dir,@filename)}"`.chomp
339
+ content_type = `#{options[:file_exec]} -b --mime "#{File.join(@dir,@filename)}"`.chomp
341
340
  content_type = fallback unless $?.success?
342
341
  content_type.gsub!(/;.+$/,"") if content_type
343
342
  content_type
@@ -499,12 +498,6 @@ module FileColumn # :nodoc:
499
498
  # As a convenience you can access files stored in sub-directories via the +subdir+
500
499
  # parameter if they have the same filename.
501
500
  #
502
- # Suppose your uploaded file is named "vancouver.jpg" and you want to create a
503
- # thumb-nail and store it in the "thumb" directory. If you call
504
- # <tt>image("thumb")</tt>, you
505
- # will receive an absolute path for the file "thumb/vancouver.jpg" in the same
506
- # directory "vancouver.jpg" is stored. Look at the documentation of FileColumn::Magick
507
- # for more examples and how to create these thumb-nails automatically.
508
501
  #
509
502
  # == File Extensions
510
503
  #
@@ -756,7 +749,6 @@ module FileColumn # :nodoc:
756
749
 
757
750
  private after_save_method, after_destroy_method
758
751
 
759
- FileColumn::MagickExtension::file_column(self, attr, my_options) if options[:magick]
760
752
  end
761
753
 
762
754
  end
@@ -1,6 +1,6 @@
1
1
  module FileColumn
2
2
  module Validations #:nodoc:
3
-
3
+
4
4
  def self.append_features(base)
5
5
  super
6
6
  base.extend(ClassMethods)
@@ -16,7 +16,7 @@ module FileColumn
16
16
  # end
17
17
  module ClassMethods
18
18
  EXT_REGEXP = /\.([A-z0-9]+)$/
19
-
19
+
20
20
  # This validates the file type of one or more file_columns. A list of file columns
21
21
  # should be given followed by an options hash.
22
22
  #
@@ -28,12 +28,12 @@ module FileColumn
28
28
  # validates_file_format_of :field, :in => ["gif", "png", "jpg"]
29
29
  # validates_file_format_of :field, :in => ["image/jpeg"]
30
30
  def validates_file_format_of(*attrs)
31
-
31
+
32
32
  options = attrs.pop if attrs.last.is_a?Hash
33
33
  raise ArgumentError, "Please include the :in option." if !options || !options[:in]
34
34
  options[:in] = [options[:in]] if options[:in].is_a?String
35
35
  raise ArgumentError, "Invalid value for option :in" unless options[:in].is_a?Array
36
-
36
+
37
37
  validates_each(attrs, options) do |record, attr, value|
38
38
  unless value.blank?
39
39
  mime_extensions = record.send("#{attr}_options")[:mime_extensions]
@@ -41,9 +41,9 @@ module FileColumn
41
41
  record.errors.add attr, "is not a valid format." unless extensions.include?(value.scan(EXT_REGEXP).flatten.first)
42
42
  end
43
43
  end
44
-
44
+
45
45
  end
46
-
46
+
47
47
  # This validates the file size of one or more file_columns. A list of file columns
48
48
  # should be given followed by an options hash.
49
49
  #
@@ -54,12 +54,12 @@ module FileColumn
54
54
  # Examples:
55
55
  # validates_filesize_of :field, :in => 0..100.megabytes
56
56
  # validates_filesize_of :field, :in => 15.kilobytes..1.megabyte
57
- def validates_filesize_of(*attrs)
58
-
57
+ def validates_filesize_of(*attrs)
58
+
59
59
  options = attrs.pop if attrs.last.is_a?Hash
60
60
  raise ArgumentError, "Please include the :in option." if !options || !options[:in]
61
61
  raise ArgumentError, "Invalid value for option :in" unless options[:in].is_a?Range
62
-
62
+
63
63
  validates_each(attrs, options) do |record, attr, value|
64
64
  unless value.blank?
65
65
  size = File.size(value)
@@ -67,45 +67,7 @@ module FileColumn
67
67
  record.errors.add attr, "is larger than the allowed size range." if size > options[:in].last
68
68
  end
69
69
  end
70
-
71
- end
72
-
73
- IMAGE_SIZE_REGEXP = /^(\d+)x(\d+)$/
74
-
75
- # Validates the image size of one or more file_columns. A list of file columns
76
- # should be given followed by an options hash. The validation will pass
77
- # if both image dimensions (rows and columns) are at least as big as
78
- # given in the <tt>:min</tt> option.
79
- #
80
- # Required options:
81
- # * <tt>:min</tt> => minimum image dimension string, in the format NNxNN
82
- # (columns x rows).
83
- #
84
- # Example:
85
- # validates_image_size :field, :min => "1200x1800"
86
- #
87
- # This validation requires RMagick to be installed on your system
88
- # to check the image's size.
89
- def validates_image_size(*attrs)
90
- options = attrs.pop if attrs.last.is_a?Hash
91
- raise ArgumentError, "Please include a :min option." if !options || !options[:min]
92
- minimums = options[:min].scan(IMAGE_SIZE_REGEXP).first.collect{|n| n.to_i} rescue []
93
- raise ArgumentError, "Invalid value for option :min (should be 'XXxYY')" unless minimums.size == 2
94
70
 
95
- require 'RMagick'
96
-
97
- validates_each(attrs, options) do |record, attr, value|
98
- unless value.blank?
99
- begin
100
- img = ::Magick::Image::read(value).first
101
- record.errors.add('image', "is too small, must be at least #{minimums[0]}x#{minimums[1]}") if ( img.rows < minimums[1] || img.columns < minimums[0] )
102
- rescue ::Magick::ImageMagickError
103
- record.errors.add('image', "invalid image")
104
- end
105
- img = nil
106
- GC.start
107
- end
108
- end
109
71
  end
110
72
  end
111
73
  end
@@ -77,72 +77,6 @@ module FileColumnHelper
77
77
 
78
78
  end
79
79
 
80
- # Same as +url_for_file_colum+ but allows you to access different versions
81
- # of the image that have been processed by RMagick.
82
- #
83
- # If your +options+ parameter is non-nil this will
84
- # access a different version of an image that will be produced by
85
- # RMagick. You can use the following types for +options+:
86
- #
87
- # * a <tt>:symbol</tt> will select a version defined in the model
88
- # via FileColumn::Magick's <tt>:versions</tt> feature.
89
- # * a <tt>geometry_string</tt> will dynamically create an
90
- # image resized as specified by <tt>geometry_string</tt>. The image will
91
- # be stored so that it does not have to be recomputed the next time the
92
- # same version string is used.
93
- # * <tt>some_hash</tt> will dynamically create an image
94
- # that is created according to the options in <tt>some_hash</tt>. This
95
- # accepts exactly the same options as Magick's version feature.
96
- #
97
- # The version produced by RMagick will be stored in a special sub-directory.
98
- # The directory's name will be derived from the options you specified
99
- # (via a hash function) but if you want
100
- # to set it yourself, you can use the <tt>:name => name</tt> option.
101
- #
102
- # Examples:
103
- #
104
- # <%= url_for_image_column @entry, "image", "640x480" %>
105
- #
106
- # will produce an URL like this
107
- #
108
- # /entry/image/42/bdn19n/filename.jpg
109
- # # "640x480".hash.abs.to_s(36) == "bdn19n"
110
- #
111
- # and
112
- #
113
- # <%= url_for_image_column @entry, "image",
114
- # :size => "50x50", :crop => "1:1", :name => "thumb" %>
115
- #
116
- # will produce something like this:
117
- #
118
- # /entry/image/42/thumb/filename.jpg
119
- #
120
- # Hint: If you are using the same geometry string / options hash multiple times, you should
121
- # define it in a helper to stay with DRY. Another option is to define it in the model via
122
- # FileColumn::Magick's <tt>:versions</tt> feature and then refer to it via a symbol.
123
- #
124
- # The URL produced by this method is relative to your application's root URL,
125
- # although it will start with a slash.
126
- # If you pass this URL to rails' +image_tag+ helper, it will be converted to an
127
- # absolute URL automatically.
128
- # If there is currently no image uploaded, or there is a problem while loading
129
- # the image this method will return +nil+.
130
- def url_for_image_column(object, method, options=nil, store_url_for_options={})
131
- case object
132
- when String, Symbol
133
- object = instance_variable_get("@#{object.to_s}")
134
- end
135
- subdir = nil
136
- if options
137
- subdir = object.send("#{method}_state").create_magick_version_if_needed(options)
138
- end
139
- if subdir.nil?
140
- nil
141
- else
142
- url_for_file_column(object, method, subdir, store_url_for_options)
143
- end
144
- end
145
-
146
80
  private
147
81
  def get_relative_url_for_rails(rails_version)
148
82
  (rails_version == 2 ? ActionController::Base.relative_url_root : Rails.application.config.action_controller.relative_url_root).to_s
@@ -14,7 +14,7 @@ module ActiveRecord # :nodoc:
14
14
  end
15
15
 
16
16
  module ActionView # :nodoc:
17
- class Base # :nodoc:
17
+ module Helpers # :nodoc:
18
18
  include FileColumnHelper
19
19
  end
20
20
  end
@@ -2,6 +2,7 @@ require 'thread'
2
2
  require 'test/unit'
3
3
  require 'rubygems'
4
4
  require 'active_support'
5
+ require 'active_support/core_ext/numeric/bytes' # is not loaded when active_support loads.
5
6
  require 'active_record'
6
7
  require 'action_view'
7
8
  require 'action_controller'
@@ -44,10 +45,10 @@ module Rails
44
45
  end
45
46
 
46
47
 
47
- require 'file_column'
48
- require 'file_column_helper'
49
- require 'file_compat'
50
- require 'test_case'
48
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/file_column')
49
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/file_column_helper')
50
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/file_compat')
51
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/test_case')
51
52
 
52
53
  # do not use the file executable normally in our tests as
53
54
  # it may not be present on the machine we are running on
@@ -74,6 +75,13 @@ class Test::Unit::TestCase
74
75
  assert_equal normalize_path(expected_path), normalize_path(path)
75
76
  end
76
77
 
78
+ def with_failing_validation(klass, column, &block)
79
+ klass.validates_each(column) do |record, attr, value|
80
+ record.errors.add(column, 'some stupid error')
81
+ end
82
+ yield
83
+ klass.clear_validators!
84
+ end
77
85
 
78
86
  private
79
87
 
@@ -82,10 +90,8 @@ class Test::Unit::TestCase
82
90
  end
83
91
 
84
92
  def clear_validations
85
- [:validate, :validate_on_create, :validate_on_update].each do |attr|
86
- Entry.write_inheritable_attribute attr, []
87
- Movie.write_inheritable_attribute attr, []
88
- end
93
+ Entry.clear_validators!
94
+ Movie.clear_validators!
89
95
  end
90
96
 
91
97
  def file_path(filename)
data/test/connection.rb CHANGED
@@ -4,7 +4,7 @@ ActiveRecord::Base.logger = Logger.new("debug.log")
4
4
 
5
5
  db = 'file_column_test.sqlite'
6
6
 
7
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
7
+ ActiveRecord::Base.establish_connection(:adapter => "jdbcsqlite3",
8
8
  :database => db)
9
9
 
10
10
 
@@ -1,5 +1,5 @@
1
- require File.dirname(__FILE__) + '/abstract_unit'
2
- require File.dirname(__FILE__) + '/fixtures/entry'
1
+ require File.expand_path(File.dirname(__FILE__) + '/abstract_unit')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/entry')
3
3
 
4
4
  class UrlForFileColumnTest < Test::Unit::TestCase
5
5
  include FileColumnHelper
@@ -81,7 +81,6 @@ class UrlForFileColumnWithContextPathTest < Test::Unit::TestCase
81
81
 
82
82
  # mock up some request data structures for AssetTagHelper
83
83
  @request = RequestMock.new
84
- ActionController::Base.relative_url_root = "/foo/bar"
85
84
  @controller = self
86
85
  end
87
86
 
@@ -89,11 +88,11 @@ class UrlForFileColumnWithContextPathTest < Test::Unit::TestCase
89
88
  @request
90
89
  end
91
90
 
92
- IMAGE_URL = %r{^/foo/bar/entry/image/.+/skanthak.png$}
91
+ IMAGE_URL = %r{^/foo/bar/entry/image/.+/skanthak.png}
93
92
  def test_with_image_tag
94
93
  e = Entry.new(:image => upload(f("skanthak.png")))
95
- html = image_tag url_for_file_column(e, "image")
96
94
 
95
+ html = image_tag url_for_file_column(e, "image")
97
96
  url = html.scan(/src=\"([^?]+)\?*.*\"/).first.first
98
97
 
99
98
  assert_match IMAGE_URL, url
@@ -113,4 +112,9 @@ class UrlForFileColumnWithContextPathTest < Test::Unit::TestCase
113
112
  url_for_file_column(e, "image", :absolute => true)
114
113
  assert_equal "/foo/bar", get_relative_url_for_rails(Rails::VERSION::MAJOR)
115
114
  end
115
+
116
+ private
117
+ def config
118
+ OpenStruct.new(relative_url_root: '/foo/bar')
119
+ end
116
120
  end
@@ -1,7 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.dirname(__FILE__) + '/abstract_unit'
3
-
4
- require File.dirname(__FILE__) + '/fixtures/entry'
2
+ require File.expand_path(File.dirname(__FILE__) + '/abstract_unit')
3
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/entry')
5
4
 
6
5
  class Movie < ActiveRecord::Base
7
6
  end
@@ -143,7 +142,7 @@ class FileColumnTest < Test::Unit::TestCase
143
142
 
144
143
  # run this test only if the machine we are running on
145
144
  # has the file utility installed
146
- if File.executable?(FILE_UTILITY) && !RUBY_PLATFORM.include?("darwin")
145
+ if File.executable?(FILE_UTILITY)
147
146
  e = Entry.new(:image => uploaded_file(file_path("skanthak.png"), "", "skanthak.jpg"))
148
147
 
149
148
  assert_equal "skanthak.png", File.basename(e.image)
@@ -256,11 +255,14 @@ class FileColumnTest < Test::Unit::TestCase
256
255
  end
257
256
 
258
257
  def test_keep_tmp_image
259
- e = Entry.new("image" => uploaded_file(file_path("kerb.jpg"), "image/jpeg", "kerb.jpg"))
260
- e.validation_should_fail = true
261
- assert !e.save, "e should not save due to validation errors"
262
- assert File.exists?(local_path = e.image)
263
- image_temp = e.image_temp
258
+ image_temp = ''
259
+ local_path = ''
260
+ with_failing_validation(Entry, :image) do
261
+ e = Entry.new("image" => uploaded_file(file_path("kerb.jpg"), "image/jpeg", "kerb.jpg"))
262
+ assert !e.save, "e should not save due to validation errors"
263
+ assert File.exists?(local_path = e.image)
264
+ image_temp = e.image_temp
265
+ end
264
266
  e = Entry.new("image_temp" => image_temp)
265
267
  assert_equal local_path, e.image
266
268
  assert e.save
@@ -271,11 +273,13 @@ class FileColumnTest < Test::Unit::TestCase
271
273
  e = Entry.new("image" =>uploaded_file(file_path("kerb.jpg"), "image/jpeg", "kerb.jpg"))
272
274
  assert e.save
273
275
  assert File.exists?(local_path = e.image)
274
- e = Entry.find(e.id)
275
- e.image = uploaded_file(file_path("skanthak.png"), "image/png", "skanthak.png")
276
- e.validation_should_fail = true
277
- assert !e.save
278
- temp_path = e.image_temp
276
+ temp_path = ''
277
+ with_failing_validation(Entry, :image) do
278
+ e = Entry.find(e.id)
279
+ e.image = uploaded_file(file_path("skanthak.png"), "image/png", "skanthak.png")
280
+ assert !e.save
281
+ temp_path = e.image_temp
282
+ end
279
283
  e = Entry.find(e.id)
280
284
  e.image_temp = temp_path
281
285
  assert e.save
@@ -293,11 +297,14 @@ class FileColumnTest < Test::Unit::TestCase
293
297
  end
294
298
 
295
299
  def do_test_replace_tmp_image(order)
296
- e = Entry.new("image" => uploaded_file(file_path("kerb.jpg"), "image/jpeg", "kerb.jpg"))
297
- e.validation_should_fail = true
298
- assert !e.save
299
- image_temp = e.image_temp
300
- temp_path = e.image
300
+ image_temp = ''
301
+ temp_path = ''
302
+ with_failing_validation(Entry, :image) do
303
+ e = Entry.new("image" => uploaded_file(file_path("kerb.jpg"), "image/jpeg", "kerb.jpg"))
304
+ assert !e.save
305
+ image_temp = e.image_temp
306
+ temp_path = e.image
307
+ end
301
308
  new_img = uploaded_file(file_path("skanthak.png"), "image/png", "skanthak.png")
302
309
  e = Entry.new
303
310
  for method in order
@@ -515,7 +522,8 @@ class FileColumnTest < Test::Unit::TestCase
515
522
 
516
523
  e.image = upload(f("skanthak.png"))
517
524
  assert !e.save
518
- assert e.errors.invalid?("image")
525
+ assert e.invalid? :image
526
+ assert_equal ['is smaller than the allowed size range.'], e.errors.messages[:image]
519
527
  end
520
528
 
521
529
  def test_validates_file_format_simple
@@ -529,19 +537,8 @@ class FileColumnTest < Test::Unit::TestCase
529
537
 
530
538
  e.image = upload(f("mysql.sql"))
531
539
  assert !e.save
532
- assert e.errors.invalid?("image")
533
-
534
- end
535
-
536
- def test_validates_image_size
537
- Entry.validates_image_size :image, :min => "640x480"
538
-
539
- e = Entry.new(:image => upload(f("kerb.jpg")))
540
- assert e.save
541
-
542
- e = Entry.new(:image => upload(f("skanthak.png")))
543
- assert !e.save
544
- assert e.errors.invalid?("image")
540
+ assert e.invalid? :image
541
+ assert_equal ['is not a valid format.'], e.errors.messages[:image]
545
542
  end
546
543
 
547
544
  def do_permission_test(uploaded_file, permissions=0641)