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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9ea7aed1c3dc17e2923dd15546cb0a417b1309d
|
4
|
+
data.tar.gz: 38353c20fc5a4c43a19cbad8f2f8c2b50f8d8bf7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c0b5db051449405489eaaa1d65822d1c924a559f431c20cce280b4bd23914a7a4304ddaf27f6dbd980dcb1737d6973b6097ee82a212b88959f0bc413194f8e0
|
7
|
+
data.tar.gz: 55883971815eda043a179e150a78b806321dd6262b71274343c773fc9402413b0c21fd5625798db44c8d9bb58746f52f42010848eaf8310cbecf03579bb8d94e
|
data/README.md
CHANGED
@@ -1,11 +1,4 @@
|
|
1
|
-
|
2
|
-
## ActiveRecord support is dropped!
|
3
|
-
|
4
|
-
This fork works when both simple form and formtastic are loaded
|
5
|
-
|
6
|
-
Also nested associations are working
|
7
|
-
|
8
|
-
## HTML5 File uploader for rails
|
1
|
+
# HTML5 File uploader for rails
|
9
2
|
|
10
3
|
This gem use https://github.com/blueimp/jQuery-File-Upload for upload files.
|
11
4
|
|
@@ -13,12 +6,12 @@ Preview:
|
|
13
6
|
|
14
7
|

|
15
8
|
|
16
|
-
|
17
9
|
## Install
|
18
10
|
|
19
11
|
In Gemfile:
|
20
|
-
|
21
|
-
|
12
|
+
|
13
|
+
```
|
14
|
+
gem "rails-uploader"
|
22
15
|
```
|
23
16
|
|
24
17
|
In routes:
|
@@ -27,127 +20,13 @@ In routes:
|
|
27
20
|
mount Uploader::Engine => '/uploader'
|
28
21
|
```
|
29
22
|
|
30
|
-
|
31
|
-
|
32
|
-
### Asset Parent Model (common)
|
33
|
-
``` ruby
|
34
|
-
# models/asset.rb
|
35
|
-
class Asset
|
36
|
-
include Mongoid::Document
|
37
|
-
include Uploader::Asset
|
38
|
-
|
39
|
-
field :guid, type: String
|
40
|
-
belongs_to :assetable, polymorphic: true
|
41
|
-
|
42
|
-
# this workaround is sometimes needed so IDs are ObjectIDs not strings
|
43
|
-
before_save do
|
44
|
-
return true if self.assetable_id.nil? || !self.assetable_id.is_a?(String)
|
45
|
-
if defined?(Moped::BSON)
|
46
|
-
self.assetable_id = Moped::BSON::ObjectId.from_string(self.assetable_id) if Moped::BSON::ObjectId.legal?(self.assetable_id)
|
47
|
-
else
|
48
|
-
self.assetable_id = BSON::ObjectId.from_string(self.assetable_id) if BSON::ObjectId.legal?(self.assetable_id)
|
49
|
-
end
|
50
|
-
true
|
51
|
-
end
|
52
|
-
end
|
53
|
-
```
|
54
|
-
|
55
|
-
### Your asset model
|
56
|
-
``` ruby
|
57
|
-
# models/cover.rb
|
58
|
-
class Cover < Asset
|
59
|
-
# DO NOT add this!
|
60
|
-
# belongs_to :post
|
61
|
-
|
62
|
-
# optional built-in sorting for rails_admin
|
63
|
-
field :sort, type: Integer
|
64
|
-
|
65
|
-
# field name must be 'data'
|
66
|
-
mount_uploader :data, CoverUploader
|
67
|
-
|
68
|
-
validates :data,
|
69
|
-
:presence => true,
|
70
|
-
:file_size => {
|
71
|
-
:maximum => 5.megabytes.to_i
|
72
|
-
}
|
73
|
-
|
74
|
-
def to_jq_upload
|
75
|
-
{
|
76
|
-
'id' => id.to_s,
|
77
|
-
"filename" => File.basename(data.path),
|
78
|
-
"url" => data.url,
|
79
|
-
'thumb_url' => data.thumb.url,
|
80
|
-
}
|
81
|
-
end
|
82
|
-
end
|
83
|
-
```
|
84
|
-
|
85
|
-
### Model to which you want to add assets
|
86
|
-
```ruby
|
87
|
-
# models/post.rb
|
88
|
-
class Post
|
89
|
-
include Mongoid::Document
|
90
|
-
|
91
|
-
field :fileupload_guid, type: String
|
92
|
-
|
93
|
-
include Uploader::Fileuploads
|
94
|
-
has_one :cover, as: :assetable
|
95
|
-
fileuploads :cover
|
96
|
-
end
|
97
|
-
```
|
98
|
-
|
99
|
-
### has_many
|
100
|
-
|
101
|
-
```ruby
|
102
|
-
class Album
|
103
|
-
has_many :pictures, as: :assetable, dependent: :destroy
|
104
|
-
fileuploads :pictures
|
105
|
-
|
106
|
-
accepts_nested_attributes_for :pictures
|
107
|
-
|
108
|
-
rails_admin do
|
109
|
-
edit do
|
110
|
-
...
|
111
|
-
field :fileupload_guid, :hidden # this is needed or else rails_admin sanitizes it away
|
112
|
-
field :pictures, :rails_uploader
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
```
|
118
|
-
|
119
|
-
### CarrierWave uploader - all like usual
|
120
|
-
```ruby
|
121
|
-
# uploades/cover_uploader.rb
|
122
|
-
class CoverUploader < CarrierWave::Uploader::Base
|
123
|
-
include CarrierWave::MiniMagick
|
124
|
-
|
125
|
-
storage :file
|
126
|
-
|
127
|
-
def store_dir
|
128
|
-
"uploads/covers/#{model.id}"
|
129
|
-
end
|
130
|
-
|
131
|
-
version :thumb do
|
132
|
-
process resize_to_limit: [50, 50]
|
133
|
-
end
|
134
|
-
end
|
135
|
-
```
|
136
|
-
|
137
|
-
# Active Admin and RailsAdmin are both working
|
23
|
+
Migration for ActiveRecord:
|
138
24
|
|
139
|
-
|
140
|
-
|
141
|
-
rails_admin do
|
142
|
-
edit do
|
143
|
-
...
|
144
|
-
field :fileupload_guid, :hidden # this is needed or else rails_admin sanitizes it away
|
145
|
-
field :pictures, :rails_uploader
|
146
|
-
end
|
147
|
-
end
|
25
|
+
```bash
|
26
|
+
$> rake uploader:install:migrations
|
148
27
|
```
|
149
28
|
|
150
|
-
## Usage
|
29
|
+
## Usage
|
151
30
|
|
152
31
|
Architecture to store uploaded files (cancan integration):
|
153
32
|
|
@@ -182,6 +61,17 @@ class Picture < Asset
|
|
182
61
|
|
183
62
|
validates_integrity_of :data
|
184
63
|
validates_filesize_of :data, :maximum => 2.megabytes.to_i
|
64
|
+
|
65
|
+
# structure of returned json array of files. (used in Hash.to_json operation)
|
66
|
+
def serializable_hash(options=nil)
|
67
|
+
{
|
68
|
+
"id" => id.to_s,
|
69
|
+
"filename" => File.basename(data.path),
|
70
|
+
"url" => data.url,
|
71
|
+
"thumb_url" => data.url(:thumb),
|
72
|
+
"public_token" => public_token
|
73
|
+
}
|
74
|
+
end
|
185
75
|
end
|
186
76
|
```
|
187
77
|
|
@@ -206,66 +96,78 @@ Find asset by foreign key or guid:
|
|
206
96
|
|
207
97
|
### Mongoid
|
208
98
|
|
99
|
+
No parent asset model is required, one only has to `include Uploader::Asset::Mongoid` into the
|
100
|
+
model that should act like an asset:
|
101
|
+
|
209
102
|
``` ruby
|
210
|
-
class
|
103
|
+
class Picture
|
211
104
|
include Mongoid::Document
|
212
105
|
include Uploader::Asset::Mongoid
|
213
106
|
|
214
|
-
belongs_to :
|
107
|
+
belongs_to :user
|
215
108
|
end
|
216
109
|
|
217
|
-
class
|
218
|
-
|
110
|
+
class User
|
111
|
+
include Mongoid::Document
|
112
|
+
include Uploader::Fileuploads
|
113
|
+
|
114
|
+
has_one :picture, :as => :assetable
|
219
115
|
|
220
|
-
|
116
|
+
fileuploads :picture
|
221
117
|
end
|
118
|
+
```
|
119
|
+
|
120
|
+
### Notice
|
222
121
|
|
122
|
+
User method fileuploads only once pre model. So if you have many attached files, use this:
|
123
|
+
|
124
|
+
``` ruby
|
223
125
|
class User
|
224
|
-
include
|
225
|
-
include Uploader::Fileuploads::Mongoid
|
126
|
+
include Uploader::Fileuploads
|
226
127
|
|
227
|
-
|
128
|
+
has_one :picture, :as => :assetable
|
129
|
+
has_one :avatar, :as => :assetable
|
228
130
|
|
229
|
-
fileuploads :
|
131
|
+
fileuploads :picture, :avatar
|
230
132
|
end
|
231
133
|
```
|
232
134
|
|
135
|
+
|
233
136
|
### Include assets
|
234
137
|
|
235
138
|
Javascripts:
|
236
139
|
|
237
|
-
```
|
238
|
-
//= require jquery.ui.widget
|
140
|
+
```
|
239
141
|
//= require uploader/application
|
240
142
|
```
|
241
143
|
|
242
144
|
Stylesheets:
|
243
145
|
|
244
|
-
```
|
146
|
+
```
|
245
147
|
*= require uploader/application
|
246
148
|
```
|
247
149
|
|
248
150
|
### Views
|
249
151
|
|
250
|
-
```
|
152
|
+
```erb
|
251
153
|
<%= uploader_field_tag :article, :photo %>
|
252
154
|
```
|
253
155
|
|
254
156
|
or FormBuilder:
|
255
157
|
|
256
|
-
```
|
158
|
+
```erb
|
257
159
|
<%= form.uploader_field :photo, :sortable => true %>
|
258
160
|
```
|
259
161
|
|
260
162
|
### Formtastic
|
261
163
|
|
262
|
-
```
|
164
|
+
```erb
|
263
165
|
<%= f.input :pictures, :as => :uploader %>
|
264
166
|
```
|
265
167
|
|
266
168
|
### SimpleForm
|
267
169
|
|
268
|
-
```
|
170
|
+
```erb
|
269
171
|
<%= f.input :pictures, :as => :uploader, :input_html => {:sortable => true} %>
|
270
172
|
```
|
271
173
|
|
@@ -273,7 +175,7 @@ or FormBuilder:
|
|
273
175
|
|
274
176
|
This is only working in Formtastic and FormBuilder:
|
275
177
|
|
276
|
-
```
|
178
|
+
``` erb
|
277
179
|
# formtastic
|
278
180
|
<%= f.input :picture, :as => :uploader, :confirm_delete => true %>
|
279
181
|
# the i18n lookup key would be en.formtastic.delete_confirmations.picture
|
data/Rakefile
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'bundler/gem_tasks'
|
3
|
-
|
4
2
|
require 'rake'
|
5
3
|
require 'rake/testtask'
|
6
4
|
require 'rdoc/task'
|
@@ -24,3 +22,5 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
24
22
|
rdoc.rdoc_files.include('README.rdoc')
|
25
23
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
26
24
|
end
|
25
|
+
|
26
|
+
require "bundler/gem_tasks"
|
@@ -1,9 +1,8 @@
|
|
1
|
-
//= require uploader/
|
2
|
-
//= require uploader/
|
3
|
-
//= require uploader/
|
1
|
+
//= require uploader/jquery.ui.widget
|
2
|
+
//= require uploader/locales/en
|
3
|
+
//= require uploader/tmpl.min
|
4
|
+
//= require uploader/load-image.min
|
5
|
+
//= require uploader/jquery.iframe-transport
|
4
6
|
//= require uploader/jquery.fileupload
|
5
|
-
//= require uploader/jquery.fileupload-process
|
6
|
-
//= require uploader/jquery.fileupload-resize
|
7
|
-
//= require uploader/jquery.fileupload-validate
|
8
7
|
//= require uploader/jquery.fileupload-ui
|
9
8
|
|
@@ -1,27 +1,8 @@
|
|
1
|
-
//= require uploader/
|
2
|
-
//= require uploader/
|
3
|
-
//= require uploader/
|
1
|
+
//= require uploader/jquery.ui.widget
|
2
|
+
//= require uploader/jquery.ui.sortable
|
3
|
+
//= require uploader/locales/en
|
4
|
+
//= require uploader/tmpl.min
|
5
|
+
//= require uploader/load-image.min
|
6
|
+
//= require uploader/jquery.iframe-transport
|
4
7
|
//= require uploader/jquery.fileupload
|
5
|
-
//= require uploader/jquery.fileupload-process
|
6
|
-
//= require uploader/jquery.fileupload-resize
|
7
|
-
//= require uploader/jquery.fileupload-validate
|
8
8
|
//= require uploader/jquery.fileupload-ui
|
9
|
-
|
10
|
-
$(document).off('init.sort').on('init.sort', '.uploader-files', function() {
|
11
|
-
var $t = $(this);
|
12
|
-
$t.sortable({
|
13
|
-
update: function(event, ui) {
|
14
|
-
var sort = [];
|
15
|
-
$t.children().each(function() {
|
16
|
-
sort.push($(this).data('id'));
|
17
|
-
});
|
18
|
-
$.ajax({
|
19
|
-
type: 'POST',
|
20
|
-
url: $t.data('sortPath'),
|
21
|
-
data: {sort: sort.join('|')}
|
22
|
-
})
|
23
|
-
}
|
24
|
-
})
|
25
|
-
});
|
26
|
-
|
27
|
-
$('.uploader-dnd-area input[type=file]').trigger("init.uploader");
|
File without changes
|
@@ -1,79 +1,57 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Uploader
|
3
2
|
class AttachmentsController < ActionController::Metal
|
4
3
|
include AbstractController::Callbacks
|
5
|
-
|
4
|
+
|
6
5
|
before_filter :find_klass
|
7
|
-
|
6
|
+
before_filter :find_asset, :only => [:destroy]
|
7
|
+
|
8
8
|
def create
|
9
9
|
@asset = @klass.new(params[:asset])
|
10
10
|
@asset.uploader_create(params, request)
|
11
11
|
render_resourse(@asset, 201)
|
12
12
|
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
@assets = Array.wrap(params[:assets] || [])
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
@asset = @klass.find(params[:id])
|
17
|
-
rescue
|
18
|
-
@asset = @klass.where(guid: params[:guid])
|
19
|
-
end
|
20
|
-
@asset.uploader_destroy(params, request)
|
21
|
-
render_resourse(@asset, 200)
|
22
|
-
end
|
23
|
-
|
24
|
-
def sort
|
25
|
-
@model = params[:assetable_type].safe_constantize
|
26
|
-
|
27
|
-
sort = params[:sort].split('|')
|
28
|
-
if params[:assetable_id].blank?
|
29
|
-
@finder = @klass.where(guid: params[:guid])
|
30
|
-
else
|
31
|
-
@finder = @klass.where(assetable_id: params[:assetable_id])
|
17
|
+
@assets.each_with_index do |id, index|
|
18
|
+
@klass.where(:id => id).update_all(:sort => index)
|
32
19
|
end
|
33
20
|
|
34
|
-
|
35
|
-
if asset.respond_to?(:sort=)
|
36
|
-
asset.sort = sort.index(asset.id.to_s)
|
37
|
-
asset.save!
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
self.status = 200
|
42
|
-
self.content_type = "application/json"
|
43
|
-
self.response_body = '{"ok": true}'
|
21
|
+
render_json({files: []})
|
44
22
|
end
|
45
23
|
|
24
|
+
def destroy
|
25
|
+
@asset.uploader_destroy(params, request)
|
26
|
+
render_json({success: true})
|
27
|
+
end
|
28
|
+
|
46
29
|
protected
|
47
|
-
|
48
|
-
|
49
|
-
def airbrake_request_data
|
50
|
-
{
|
51
|
-
:controller => params[:controller],
|
52
|
-
:action => params[:action],
|
53
|
-
}
|
54
|
-
end
|
55
|
-
|
30
|
+
|
56
31
|
def find_klass
|
57
|
-
@klass =
|
32
|
+
@klass = Uploader.constantize(params[:klass])
|
58
33
|
raise ActionController::RoutingError.new("Class not found #{params[:klass]}") if @klass.nil?
|
59
34
|
end
|
60
35
|
|
36
|
+
def find_asset
|
37
|
+
@asset = @klass.where(:public_token => params[:id]).first
|
38
|
+
raise ActionController::RoutingError.new("Asset not found by guid #{params[:id]}") if @asset.nil?
|
39
|
+
end
|
40
|
+
|
61
41
|
def render_resourse(record, status = 200)
|
62
42
|
if record.errors.empty?
|
63
|
-
|
64
|
-
render_json({'files' => Array.wrap(record.to_jq_upload)}.to_json, status)
|
65
|
-
else
|
66
|
-
render_json({'files' => Array.wrap(record)}.to_json, status)
|
67
|
-
end
|
43
|
+
render_json({:files => [record.to_jq_upload]}, status)
|
68
44
|
else
|
69
|
-
render_json(
|
45
|
+
render_json(record.errors, 422)
|
70
46
|
end
|
71
47
|
end
|
48
|
+
|
49
|
+
def render_json(hash_or_object, status = 200)
|
50
|
+
ctype = env["HTTP_USER_AGENT"] && env["HTTP_USER_AGENT"].include?("Android") ? "text/plain" : "application/json"
|
72
51
|
|
73
|
-
def render_json(body, status = 200)
|
74
52
|
self.status = status
|
75
|
-
self.content_type =
|
76
|
-
self.response_body =
|
53
|
+
self.content_type = ctype
|
54
|
+
self.response_body = hash_or_object.to_json(:root => false)
|
77
55
|
end
|
78
56
|
end
|
79
57
|
end
|