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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88efe49c0d42aff2f12db2360479b4251fedc7a6
4
- data.tar.gz: 6878df72b63fca3d0196d14fb5d4c3cc9c478b51
3
+ metadata.gz: c9ea7aed1c3dc17e2923dd15546cb0a417b1309d
4
+ data.tar.gz: 38353c20fc5a4c43a19cbad8f2f8c2b50f8d8bf7
5
5
  SHA512:
6
- metadata.gz: fc980ceee75826bfd9d73ac15a4ed178575bc7fb99b9e6ada11f6024cfefe70bb6bd7bc53e0d6efcb1fdc0ae682f69447e668dd78f0e1c80d04cb98cc7ed46c6
7
- data.tar.gz: beb74c354fa43d79cd95dd9ac9a2744c7c54bba1823e154d9d2d74a214cf8a76f0c8303155ab5faf95540fa046783f10f1783cc63d74983c83880f1206147c6c
6
+ metadata.gz: 8c0b5db051449405489eaaa1d65822d1c924a559f431c20cce280b4bd23914a7a4304ddaf27f6dbd980dcb1737d6973b6097ee82a212b88959f0bc413194f8e0
7
+ data.tar.gz: 55883971815eda043a179e150a78b806321dd6262b71274343c773fc9402413b0c21fd5625798db44c8d9bb58746f52f42010848eaf8310cbecf03579bb8d94e
data/README.md CHANGED
@@ -1,11 +1,4 @@
1
- ## this fork adds mongoid and rails_admin support.
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
  ![Uploader in use](http://img39.imageshack.us/img39/2206/railsuploader.png)
15
8
 
16
-
17
9
  ## Install
18
10
 
19
11
  In Gemfile:
20
- ``` ruby
21
- gem "glebtv-rails-uploader"
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
- ## HowTo for mongoid / carrierwave:
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
- # RailsAdmin Integration
140
- ``` ruby
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 (Original description)
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 Asset
103
+ class Picture
211
104
  include Mongoid::Document
212
105
  include Uploader::Asset::Mongoid
213
106
 
214
- belongs_to :assetable, polymorphic: true
107
+ belongs_to :user
215
108
  end
216
109
 
217
- class Picture < Asset
218
- mount_uploader :data, ImageUploader
110
+ class User
111
+ include Mongoid::Document
112
+ include Uploader::Fileuploads
113
+
114
+ has_one :picture, :as => :assetable
219
115
 
220
- default_scope asc( :sort_order )
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 Mongoid::Document
225
- include Uploader::Fileuploads::Mongoid
126
+ include Uploader::Fileuploads
226
127
 
227
- has_many :pictures, :as => :assetable
128
+ has_one :picture, :as => :assetable
129
+ has_one :avatar, :as => :assetable
228
130
 
229
- fileuploads :pictures
131
+ fileuploads :picture, :avatar
230
132
  end
231
133
  ```
232
134
 
135
+
233
136
  ### Include assets
234
137
 
235
138
  Javascripts:
236
139
 
237
- ``` ruby
238
- //= require jquery.ui.widget
140
+ ```
239
141
  //= require uploader/application
240
142
  ```
241
143
 
242
144
  Stylesheets:
243
145
 
244
- ``` ruby
146
+ ```
245
147
  *= require uploader/application
246
148
  ```
247
149
 
248
150
  ### Views
249
151
 
250
- ``` ruby
152
+ ```erb
251
153
  <%= uploader_field_tag :article, :photo %>
252
154
  ```
253
155
 
254
156
  or FormBuilder:
255
157
 
256
- ``` ruby
158
+ ```erb
257
159
  <%= form.uploader_field :photo, :sortable => true %>
258
160
  ```
259
161
 
260
162
  ### Formtastic
261
163
 
262
- ``` ruby
164
+ ```erb
263
165
  <%= f.input :pictures, :as => :uploader %>
264
166
  ```
265
167
 
266
168
  ### SimpleForm
267
169
 
268
- ``` ruby
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
- ``` ruby
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/tmpl
2
- //= require uploader/canvas-to-blob
3
- //= require uploader/load-image
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/tmpl
2
- //= require uploader/canvas-to-blob
3
- //= require uploader/load-image
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");
@@ -0,0 +1,2 @@
1
+ @import uploader/jquery.fileupload-ui
2
+ @import uploader/default
@@ -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
- def destroy
15
- begin
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
- @finder.each do |asset|
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 = params[:klass].blank? ? nil : params[:klass].safe_constantize
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
- if record.respond_to?(:to_jq_upload)
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([record.errors].to_json, 422)
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 = "application/json"
76
- self.response_body = 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