glebtv-rails-uploader 0.4.1 → 0.5.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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -146
  3. data/Rakefile +2 -2
  4. data/app/assets/javascripts/uploader/application.js +5 -6
  5. data/app/assets/javascripts/uploader/rails_admin.js +6 -25
  6. data/app/assets/stylesheets/uploader/application.css.sass +2 -0
  7. data/app/assets/stylesheets/uploader/{application.css → application.css.scss} +0 -0
  8. data/app/controllers/uploader/attachments_controller.rb +28 -50
  9. data/app/views/rails_admin/main/_form_rails_uploader.haml +1 -10
  10. data/app/views/uploader/default/_container.html.erb +49 -64
  11. data/app/views/uploader/default/_download.html.erb +16 -12
  12. data/app/views/uploader/default/_upload.html.erb +2 -2
  13. data/config/routes.rb +1 -5
  14. data/lib/glebtv-rails-uploader.rb +0 -1
  15. data/lib/uploader.rb +5 -5
  16. data/lib/uploader/asset.rb +84 -41
  17. data/lib/uploader/engine.rb +10 -6
  18. data/lib/uploader/fileuploads.rb +53 -31
  19. data/lib/uploader/helpers/field_tag.rb +24 -35
  20. data/lib/uploader/helpers/form_builder.rb +1 -1
  21. data/lib/uploader/helpers/form_tag_helper.rb +2 -3
  22. data/lib/uploader/hooks/formtastic.rb +10 -4
  23. data/lib/uploader/hooks/simple_form.rb +1 -3
  24. data/lib/uploader/version.rb +1 -1
  25. data/spec/dummy/app/models/article.rb +3 -7
  26. data/spec/dummy/app/models/asset.rb +26 -19
  27. data/spec/dummy/app/models/picture.rb +4 -4
  28. data/spec/dummy/config/application.rb +5 -7
  29. data/spec/dummy/config/environments/development.rb +1 -5
  30. data/spec/dummy/config/environments/production.rb +0 -4
  31. data/spec/dummy/config/environments/test.rb +2 -6
  32. data/spec/dummy/db/migrate/20120508093416_create_assets.rb +3 -1
  33. data/spec/factories/articles.rb +1 -0
  34. data/spec/factories/assets.rb +1 -0
  35. data/spec/fileuploads_spec.rb +2 -2
  36. data/spec/mongoid_spec.rb +4 -6
  37. data/spec/requests/attachments_controller_spec.rb +10 -2
  38. data/spec/spec_helper.rb +7 -3
  39. data/spec/uploader_spec.rb +1 -1
  40. data/{app → vendor}/assets/images/uploader/but_del_tag2.png +0 -0
  41. data/{app → vendor}/assets/images/uploader/ico_attach.png +0 -0
  42. data/{app → vendor}/assets/images/uploader/preloader.gif +0 -0
  43. data/{app → vendor}/assets/images/uploader/progressBarFillBg.png +0 -0
  44. data/vendor/assets/javascripts/uploader/jquery.fileupload-fp.js +8 -4
  45. data/{app → vendor}/assets/javascripts/uploader/jquery.fileupload-ui.js +219 -44
  46. data/{app → vendor}/assets/javascripts/uploader/jquery.fileupload.js +16 -74
  47. data/{app → vendor}/assets/javascripts/uploader/jquery.iframe-transport.js +3 -9
  48. data/vendor/assets/javascripts/uploader/load-image.min.js +1 -0
  49. data/{app → vendor}/assets/javascripts/uploader/locales/en.js +0 -0
  50. data/{app → vendor}/assets/javascripts/uploader/locales/ru.js +0 -0
  51. data/{app → vendor}/assets/javascripts/uploader/locales/uk.js +0 -0
  52. data/vendor/assets/javascripts/uploader/tmpl.min.js +1 -0
  53. data/{app/assets/stylesheets/uploader/default.css → vendor/assets/stylesheets/uploader/default.css.scss} +3 -11
  54. data/{app/assets/stylesheets/uploader/jquery.fileupload-ui.css → vendor/assets/stylesheets/uploader/jquery.fileupload-ui.css.scss} +0 -0
  55. metadata +78 -146
  56. data/app/assets/javascripts/uploader/canvas-to-blob.js +0 -95
  57. data/app/assets/javascripts/uploader/jquery.fileupload-angular.js +0 -348
  58. data/app/assets/javascripts/uploader/jquery.fileupload-process.js +0 -158
  59. data/app/assets/javascripts/uploader/jquery.fileupload-resize.js +0 -212
  60. data/app/assets/javascripts/uploader/jquery.fileupload-validate.js +0 -116
  61. data/app/assets/javascripts/uploader/jquery.ui.widget.js +0 -530
  62. data/app/assets/javascripts/uploader/load-image.js +0 -381
  63. data/app/assets/javascripts/uploader/tmpl.js +0 -86
  64. data/lib/file_size_validator.rb +0 -68
  65. data/spec/dummy/config/mongoid.yml +0 -12
@@ -3,90 +3,79 @@ module Uploader
3
3
  class FieldTag
4
4
  attr_reader :template, :object, :theme
5
5
 
6
- delegate :uploader, :to => :template
7
-
6
+ delegate :uploader, :to => :template
7
+
8
8
  # Wrapper for render uploader field
9
9
  # Usage:
10
10
  #
11
11
  # uploader = FieldTag.new(object_name, method_name, template, options)
12
- # uploader.to_s
12
+ # uploader.render
13
13
  #
14
14
  def initialize(object_name, method_name, template, options = {}) #:nodoc:
15
15
  options = { :object_name => object_name, :method_name => method_name }.merge(options)
16
- @template, @options = template, options.dup
17
16
 
17
+ @template, @options = template, options.dup
18
+
18
19
  @theme = (@options.delete(:theme) || "default")
19
20
  @value = @options.delete(:value) if @options.key?(:value)
20
-
21
+
21
22
  @object = @options.delete(:object) if @options.key?(:object)
22
23
  @object ||= @template.instance_variable_get("@#{object_name}")
23
24
  end
24
25
 
25
- def to_s(locals = {}) #:nodoc:
26
+ def render(locals = {}) #:nodoc:
26
27
  locals = { :field => self }.merge(locals)
27
28
  @template.render :partial => "uploader/#{@theme}/container", :locals => locals
28
29
  end
29
-
30
+
30
31
  def id
31
- @id ||= @template.dom_id(@object, [method_name, 'uploader', @object.fileupload_guid].join('_'))
32
+ @id ||= @template.dom_id(@object, [method_name, 'uploader'].join('_'))
32
33
  end
33
-
34
+
34
35
  def method_name
35
36
  @options[:method_name]
36
37
  end
37
-
38
+
38
39
  def object_name
39
40
  @options[:object_name]
40
41
  end
41
-
42
+
42
43
  def multiple?
43
44
  @object.fileupload_multiple?(method_name)
44
45
  end
45
-
46
+
46
47
  def value
47
48
  @value ||= @object.fileupload_asset(method_name)
48
49
  end
49
-
50
+
50
51
  def values
51
- if !value.nil? && value.respond_to?(:first) && value.first.respond_to?(:sort)
52
- Array.wrap(value).sort_by(&:sort)
53
- else
54
- Array.wrap(value)
55
- end
52
+ Array.wrap(value)
56
53
  end
57
-
54
+
58
55
  def exists?
59
56
  values.map(&:persisted?).any?
60
57
  end
61
58
 
59
+ def sortable?
60
+ @options[:sortable] == true
61
+ end
62
+
62
63
  def klass
63
64
  @klass ||= @object.class.fileupload_klass(method_name)
64
65
  end
65
-
66
+
66
67
  def attachments_path(options = {})
67
68
  options = {
68
69
  :guid => @object.fileupload_guid,
69
70
  :assetable_type => @object.class.base_class.name.to_s,
70
71
  :klass => klass.to_s
71
72
  }.merge(options)
72
-
73
+
73
74
  options[:assetable_id] = @object.id if @object.persisted?
74
-
75
+
75
76
  uploader.attachments_path(options)
76
77
  end
77
-
78
- def sort_path(options = {})
79
- options = {
80
- :guid => @object.fileupload_guid,
81
- :assetable_type => @object.class.base_class.name.to_s,
82
- :klass => klass.to_s
83
- }.merge(options)
84
-
85
- options[:assetable_id] = @object.id if @object.persisted?
86
-
87
- uploader.sort_attachments_path(options)
88
- end
89
-
78
+
90
79
  def input_html
91
80
  @input_html ||= {
92
81
  :"data-url" => attachments_path,
@@ -3,7 +3,7 @@ module Uploader
3
3
  module FormBuilder
4
4
  # Render uploader field
5
5
  # Usage:
6
- #
6
+ #
7
7
  # <%= form_for @article do |f| %>
8
8
  # <%= f.uploader_field :picture %>
9
9
  # <%= end %>
@@ -2,14 +2,13 @@ module Uploader
2
2
  module Helpers
3
3
  module FormTagHelper
4
4
  include ActionView::Helpers::JavaScriptHelper
5
-
5
+
6
6
  # A helper that renders file upload container
7
7
  #
8
8
  # <%= uploader_field_tag :article, :photo %>
9
9
  #
10
10
  def uploader_field_tag(object_name, method_name, options = {})
11
- uploader = FieldTag.new(object_name, method_name, self, options)
12
- uploader.to_s
11
+ FieldTag.new(object_name, method_name, self, options).render
13
12
  end
14
13
  end
15
14
  end
@@ -1,13 +1,19 @@
1
- # encoding: utf-8
2
-
3
1
  require 'formtastic'
4
2
 
5
3
  class UploaderInput
6
4
  include ::Formtastic::Inputs::Base
7
-
5
+
8
6
  def to_html
9
7
  input_wrapping do
10
- label_html << builder.uploader_field(method, input_html_options)
8
+ label_html <<
9
+ builder.uploader_field(method, input_html_options)
11
10
  end
12
11
  end
12
+
13
+ def input_html_options
14
+ data = super
15
+ data[:confirm_delete] = options[:confirm_delete]
16
+ data[:confirm_message] = localized_string(method, method, :delete_confirmation) || I18n.t('uploader.confirm_delete')
17
+ data
18
+ end
13
19
  end
@@ -1,9 +1,7 @@
1
1
  require "simple_form"
2
2
 
3
- class SimpleFormUploaderInput < SimpleForm::Inputs::Base
3
+ class UploaderInput < ::SimpleForm::Inputs::Base
4
4
  def input
5
5
  @builder.uploader_field(attribute_name, input_html_options)
6
6
  end
7
7
  end
8
-
9
- ::SimpleForm::FormBuilder.map_type :uploader, :to => SimpleFormUploaderInput
@@ -1,3 +1,3 @@
1
1
  module Uploader
2
- VERSION = "0.4.1".freeze
2
+ VERSION = "0.5.0".freeze
3
3
  end
@@ -1,11 +1,7 @@
1
- class Article
2
- include Mongoid::Document
3
- include Uploader::Fileuploads
4
-
5
- field :content
6
- field :title
1
+ class Article < ActiveRecord::Base
2
+ attr_accessible :content, :title
7
3
 
8
- has_one :picture, as: :assetable, dependent: :destroy
4
+ has_one :picture, :as => :assetable, :dependent => :destroy
9
5
 
10
6
  fileuploads :picture
11
7
  end
@@ -1,20 +1,27 @@
1
- # encoding: utf-8
2
-
3
- class Asset
4
- include Mongoid::Document
1
+ # == Schema Information
2
+ #
3
+ # Table name: assets
4
+ #
5
+ # id :integer(4) not null, primary key
6
+ # data_file_name :string(255) not null
7
+ # data_content_type :string(255)
8
+ # data_file_size :integer(4)
9
+ # assetable_id :integer(4) not null
10
+ # assetable_type :string(25) not null
11
+ # type :string(25)
12
+ # guid :string(10)
13
+ # user_id :integer(4)
14
+ # sort_order :integer(4) default(0)
15
+ # created_at :datetime
16
+ # updated_at :datetime
17
+ #
18
+ # Indexes
19
+ #
20
+ # index_assets_on_assetable_type_and_assetable_id (assetable_type,assetable_id)
21
+ # index_assets_on_user_id (user_id)
22
+ #
23
+ class Asset < ActiveRecord::Base
5
24
  include Uploader::Asset
6
-
7
- belongs_to :assetable, polymorphic: true
8
-
9
- field :guid
10
-
11
- before_save do
12
- return true if self.assetable_id.nil? || !self.assetable_id.is_a?(String)
13
- if defined?(Moped::BSON)
14
- self.assetable_id = Moped::BSON::ObjectId.from_string(self.assetable_id) if Moped::BSON::ObjectId.legal?(self.assetable_id)
15
- else
16
- self.assetable_id = BSON::ObjectId.from_string(self.assetable_id) if BSON::ObjectId.legal?(self.assetable_id)
17
- end
18
- true
19
- end
20
- end
25
+
26
+ belongs_to :assetable, :polymorphic => true
27
+ end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
-
3
1
  class Picture < Asset
4
- mount_uploader :data, PictureUploader, mount_on: :data_file_name
5
- end
2
+ mount_uploader :data, PictureUploader, :mount_on => :data_file_name
3
+
4
+ attr_accessible :data
5
+ end
@@ -1,13 +1,11 @@
1
1
  require File.expand_path('../boot', __FILE__)
2
2
 
3
- require "action_controller/railtie"
4
- require "action_mailer/railtie"
5
- require "sprockets/railtie"
3
+ require 'rails/all'
6
4
 
7
5
  Bundler.require
8
-
9
- require 'glebtv-rails-uploader'
10
- require 'carrierwave/mongoid'
6
+ require "rails-uploader"
7
+ require 'carrierwave'
8
+ require 'carrierwave/orm/activerecord'
11
9
 
12
10
  module Dummy
13
11
  class Application < Rails::Application
@@ -48,7 +46,7 @@ module Dummy
48
46
  # This will create an empty whitelist of attributes available for mass-assignment for all models
49
47
  # in your app. As such, your models will need to explicitly whitelist or blacklist accessible
50
48
  # parameters by using an attr_accessible or attr_protected declaration.
51
- # config.active_record.whitelist_attributes = true
49
+ config.active_record.whitelist_attributes = true
52
50
 
53
51
  # Enable the asset pipeline
54
52
  config.assets.enabled = true
@@ -7,7 +7,7 @@ Dummy::Application.configure do
7
7
  config.cache_classes = false
8
8
 
9
9
  # Log error messages when you accidentally call methods on nil.
10
- # config.whiny_nils = true
10
+ config.whiny_nils = true
11
11
 
12
12
  # Show full error reports and disable caching
13
13
  config.consider_all_requests_local = true
@@ -34,8 +34,4 @@ Dummy::Application.configure do
34
34
 
35
35
  # Expands the lines which load the assets
36
36
  config.assets.debug = true
37
-
38
- config.eager_load = false
39
-
40
- config.secret_key_base = 'XXX'
41
37
  end
@@ -64,8 +64,4 @@ Dummy::Application.configure do
64
64
  # Log the query plan for queries taking more than this (works
65
65
  # with SQLite, MySQL, and PostgreSQL)
66
66
  # config.active_record.auto_explain_threshold_in_seconds = 0.5
67
-
68
- config.eager_load = true
69
-
70
- config.secret_key_base = 'XXX'
71
67
  end
@@ -12,7 +12,7 @@ Dummy::Application.configure do
12
12
  config.static_cache_control = "public, max-age=3600"
13
13
 
14
14
  # Log error messages when you accidentally call methods on nil
15
- # config.whiny_nils = true
15
+ config.whiny_nils = true
16
16
 
17
17
  # Show full error reports and disable caching
18
18
  config.consider_all_requests_local = true
@@ -30,12 +30,8 @@ Dummy::Application.configure do
30
30
  config.action_mailer.delivery_method = :test
31
31
 
32
32
  # Raise exception on mass assignment protection for Active Record models
33
- # config.active_record.mass_assignment_sanitizer = :strict
33
+ config.active_record.mass_assignment_sanitizer = :strict
34
34
 
35
35
  # Print deprecation notices to the stderr
36
36
  config.active_support.deprecation = :stderr
37
-
38
- config.eager_load = false
39
-
40
- config.secret_key_base = 'XXX'
41
37
  end
@@ -7,7 +7,8 @@ class CreateAssets < ActiveRecord::Migration
7
7
  t.integer "assetable_id", :null => false
8
8
  t.string "assetable_type", :limit => 25, :null => false
9
9
  t.string "type", :limit => 25
10
- t.string "guid", :limit => 10
10
+ t.string "guid", :limit => 20
11
+ t.string "public_token", :limit => 20
11
12
  t.integer "user_id"
12
13
 
13
14
  t.timestamps
@@ -15,5 +16,6 @@ class CreateAssets < ActiveRecord::Migration
15
16
 
16
17
  add_index "assets", ["assetable_type", "assetable_id"]
17
18
  add_index "assets", ["user_id"]
19
+ add_index "assets", ["public_token"]
18
20
  end
19
21
  end
@@ -6,3 +6,4 @@ FactoryGirl.define do
6
6
  content "MyText"
7
7
  end
8
8
  end
9
+
@@ -3,6 +3,7 @@
3
3
  FactoryGirl.define do
4
4
  factory :picture, :class => Picture do
5
5
  data File.open('spec/factories/files/rails.png')
6
+ data_content_type "image/png"
6
7
  data_file_name "rails.png"
7
8
 
8
9
  association :assetable, :factory => :article
@@ -19,9 +19,9 @@ describe Uploader::Fileuploads do
19
19
  end
20
20
 
21
21
  it "should update asset target_id by guid" do
22
- Article.fileupload_update('507f1f77bcf86cd799439011', @picture.guid, :picture)
22
+ Article.fileupload_update(1000, @picture.guid, :picture)
23
23
  @picture.reload
24
- @picture.assetable_id.to_s.should == '507f1f77bcf86cd799439011'
24
+ @picture.assetable_id.should == 1000
25
25
  @picture.guid.should be_nil
26
26
  end
27
27
 
data/spec/mongoid_spec.rb CHANGED
@@ -11,14 +11,12 @@ end
11
11
 
12
12
  class MongoidPicture
13
13
  include Mongoid::Document
14
- include Uploader::Asset
15
-
16
- field :guid
14
+ include Uploader::Asset::Mongoid
17
15
 
18
16
  belongs_to :assetable, polymorphic: true
19
17
  end
20
18
 
21
- describe Uploader::Asset do
19
+ describe Uploader::Asset::Mongoid do
22
20
  before do
23
21
  @guid = 'guid'
24
22
  @picture = MongoidPicture.create!(:guid => @guid, :assetable_type => 'MongoidArticle')
@@ -30,9 +28,9 @@ describe Uploader::Asset do
30
28
  end
31
29
 
32
30
  it "should update asset target_id by guid" do
33
- MongoidArticle.fileupload_update('507f1f77bcf86cd799439011', @picture.guid, :mongoid_picture)
31
+ MongoidArticle.fileupload_update(1000, @picture.guid, :mongoid_picture)
34
32
  @picture.reload
35
- @picture.assetable_id.to_s.should == '507f1f77bcf86cd799439011'
33
+ @picture.assetable_id.should == 1000
36
34
  @picture.guid.should be_nil
37
35
  end
38
36
 
@@ -11,7 +11,7 @@ describe Uploader::AttachmentsController do
11
11
  file = Rack::Test::UploadedFile.new('spec/factories/files/rails.png', "image/png")
12
12
  post "/uploader/attachments", {
13
13
  :klass => "Picture",
14
- :assetable_id => "507f1f77bcf86cd799439011",
14
+ :assetable_id => "1",
15
15
  :assetable_type => "Article",
16
16
  :guid => "SOMESTRING",
17
17
  :asset => {:data => file}
@@ -26,9 +26,17 @@ describe Uploader::AttachmentsController do
26
26
  @asset = FactoryGirl.create(:picture)
27
27
 
28
28
  lambda {
29
- delete "/uploader/attachments/#{@asset.id}", {:klass => "Picture"}
29
+ delete "/uploader/attachments/#{@asset.public_token}", {:klass => "Picture"}
30
30
  }.should change { Picture.count }.by(-1)
31
31
  end
32
+
33
+ it "should not destroy asset with not exists guid" do
34
+ @asset = FactoryGirl.create(:picture)
35
+
36
+ lambda {
37
+ delete "/uploader/attachments/wrong", {:klass => "Picture"}
38
+ }.should raise_error(ActionController::RoutingError)
39
+ end
32
40
 
33
41
  it "should raise 404 error with wrong class" do
34
42
  lambda {
data/spec/spec_helper.rb CHANGED
@@ -18,6 +18,7 @@ ActionMailer::Base.default_url_options[:host] = "test.com"
18
18
  Rails.backtrace_cleaner.remove_silencers!
19
19
 
20
20
  # Run any available migration
21
+ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
21
22
 
22
23
  require 'carrierwave'
23
24
  CarrierWave.configure do |config|
@@ -42,14 +43,17 @@ RSpec.configure do |config|
42
43
  config.mock_with :rspec
43
44
 
44
45
  config.before(:suite) do
45
- DatabaseCleaner.strategy = :truncation
46
+ DatabaseCleaner[:active_record].strategy = :truncation
47
+ DatabaseCleaner[:mongoid].strategy = :truncation
46
48
  end
47
49
 
48
50
  config.before(:all) do
49
- DatabaseCleaner.start
51
+ DatabaseCleaner[:active_record].start
52
+ DatabaseCleaner[:mongoid].start
50
53
  end
51
54
 
52
55
  config.after(:all) do
53
- DatabaseCleaner.clean
56
+ DatabaseCleaner[:active_record].clean
57
+ DatabaseCleaner[:mongoid].clean
54
58
  end
55
59
  end