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.
- checksums.yaml +4 -4
- data/README.md +48 -146
- data/Rakefile +2 -2
- data/app/assets/javascripts/uploader/application.js +5 -6
- data/app/assets/javascripts/uploader/rails_admin.js +6 -25
- data/app/assets/stylesheets/uploader/application.css.sass +2 -0
- data/app/assets/stylesheets/uploader/{application.css → application.css.scss} +0 -0
- data/app/controllers/uploader/attachments_controller.rb +28 -50
- data/app/views/rails_admin/main/_form_rails_uploader.haml +1 -10
- data/app/views/uploader/default/_container.html.erb +49 -64
- data/app/views/uploader/default/_download.html.erb +16 -12
- data/app/views/uploader/default/_upload.html.erb +2 -2
- data/config/routes.rb +1 -5
- data/lib/glebtv-rails-uploader.rb +0 -1
- data/lib/uploader.rb +5 -5
- data/lib/uploader/asset.rb +84 -41
- data/lib/uploader/engine.rb +10 -6
- data/lib/uploader/fileuploads.rb +53 -31
- data/lib/uploader/helpers/field_tag.rb +24 -35
- data/lib/uploader/helpers/form_builder.rb +1 -1
- data/lib/uploader/helpers/form_tag_helper.rb +2 -3
- data/lib/uploader/hooks/formtastic.rb +10 -4
- data/lib/uploader/hooks/simple_form.rb +1 -3
- data/lib/uploader/version.rb +1 -1
- data/spec/dummy/app/models/article.rb +3 -7
- data/spec/dummy/app/models/asset.rb +26 -19
- data/spec/dummy/app/models/picture.rb +4 -4
- data/spec/dummy/config/application.rb +5 -7
- data/spec/dummy/config/environments/development.rb +1 -5
- data/spec/dummy/config/environments/production.rb +0 -4
- data/spec/dummy/config/environments/test.rb +2 -6
- data/spec/dummy/db/migrate/20120508093416_create_assets.rb +3 -1
- data/spec/factories/articles.rb +1 -0
- data/spec/factories/assets.rb +1 -0
- data/spec/fileuploads_spec.rb +2 -2
- data/spec/mongoid_spec.rb +4 -6
- data/spec/requests/attachments_controller_spec.rb +10 -2
- data/spec/spec_helper.rb +7 -3
- data/spec/uploader_spec.rb +1 -1
- data/{app → vendor}/assets/images/uploader/but_del_tag2.png +0 -0
- data/{app → vendor}/assets/images/uploader/ico_attach.png +0 -0
- data/{app → vendor}/assets/images/uploader/preloader.gif +0 -0
- data/{app → vendor}/assets/images/uploader/progressBarFillBg.png +0 -0
- data/vendor/assets/javascripts/uploader/jquery.fileupload-fp.js +8 -4
- data/{app → vendor}/assets/javascripts/uploader/jquery.fileupload-ui.js +219 -44
- data/{app → vendor}/assets/javascripts/uploader/jquery.fileupload.js +16 -74
- data/{app → vendor}/assets/javascripts/uploader/jquery.iframe-transport.js +3 -9
- data/vendor/assets/javascripts/uploader/load-image.min.js +1 -0
- data/{app → vendor}/assets/javascripts/uploader/locales/en.js +0 -0
- data/{app → vendor}/assets/javascripts/uploader/locales/ru.js +0 -0
- data/{app → vendor}/assets/javascripts/uploader/locales/uk.js +0 -0
- data/vendor/assets/javascripts/uploader/tmpl.min.js +1 -0
- data/{app/assets/stylesheets/uploader/default.css → vendor/assets/stylesheets/uploader/default.css.scss} +3 -11
- data/{app/assets/stylesheets/uploader/jquery.fileupload-ui.css → vendor/assets/stylesheets/uploader/jquery.fileupload-ui.css.scss} +0 -0
- metadata +78 -146
- data/app/assets/javascripts/uploader/canvas-to-blob.js +0 -95
- data/app/assets/javascripts/uploader/jquery.fileupload-angular.js +0 -348
- data/app/assets/javascripts/uploader/jquery.fileupload-process.js +0 -158
- data/app/assets/javascripts/uploader/jquery.fileupload-resize.js +0 -212
- data/app/assets/javascripts/uploader/jquery.fileupload-validate.js +0 -116
- data/app/assets/javascripts/uploader/jquery.ui.widget.js +0 -530
- data/app/assets/javascripts/uploader/load-image.js +0 -381
- data/app/assets/javascripts/uploader/tmpl.js +0 -86
- data/lib/file_size_validator.rb +0 -68
- 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.
|
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
|
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'
|
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
|
-
|
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,
|
@@ -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
|
-
|
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 <<
|
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
|
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
|
data/lib/uploader/version.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
class Article
|
2
|
-
|
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
|
4
|
+
has_one :picture, :as => :assetable, :dependent => :destroy
|
9
5
|
|
10
6
|
fileuploads :picture
|
11
7
|
end
|
@@ -1,20 +1,27 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
|
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
|
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,13 +1,11 @@
|
|
1
1
|
require File.expand_path('../boot', __FILE__)
|
2
2
|
|
3
|
-
require
|
4
|
-
require "action_mailer/railtie"
|
5
|
-
require "sprockets/railtie"
|
3
|
+
require 'rails/all'
|
6
4
|
|
7
5
|
Bundler.require
|
8
|
-
|
9
|
-
require '
|
10
|
-
require 'carrierwave/
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
+
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
|
data/spec/factories/articles.rb
CHANGED
data/spec/factories/assets.rb
CHANGED
data/spec/fileuploads_spec.rb
CHANGED
@@ -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(
|
22
|
+
Article.fileupload_update(1000, @picture.guid, :picture)
|
23
23
|
@picture.reload
|
24
|
-
@picture.assetable_id.
|
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(
|
31
|
+
MongoidArticle.fileupload_update(1000, @picture.guid, :mongoid_picture)
|
34
32
|
@picture.reload
|
35
|
-
@picture.assetable_id.
|
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 => "
|
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.
|
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
|