media_magick 0.0.1 → 0.1.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.
- data/.rvmrc +1 -0
- data/CHANGELOG.md +49 -0
- data/README.md +77 -6
- data/app/assets/javascripts/media_magick/plupload_it.js +8 -2
- data/app/controllers/media_magick/attach_controller.rb +40 -7
- data/app/helpers/media_magick/application_helper.rb +20 -3
- data/app/views/_file.html.erb +2 -0
- data/app/views/_image.html.erb +2 -0
- data/app/views/_upload.html.erb +5 -3
- data/lib/media_magick/model.rb +60 -3
- data/lib/media_magick/version.rb +1 -1
- data/media_magick.gemspec +2 -2
- data/spec/controllers/media_magick/attach_controller_spec.rb +65 -0
- data/spec/dummy/app/assets/javascripts/users.js +2 -0
- data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/spec/dummy/app/assets/stylesheets/users.css +4 -0
- data/spec/dummy/app/controllers/users_controller.rb +84 -0
- data/spec/dummy/app/helpers/users_helper.rb +2 -0
- data/spec/dummy/app/models/album.rb +7 -5
- data/spec/dummy/app/models/product.rb +2 -2
- data/spec/dummy/app/models/track.rb +8 -0
- data/spec/dummy/app/models/user.rb +10 -0
- data/spec/dummy/app/views/albums/_photo.html.erb +1 -0
- data/spec/dummy/app/views/layouts/application.html.erb +1 -1
- data/spec/dummy/app/views/users/_form.html.erb +29 -0
- data/spec/dummy/app/views/users/edit.html.erb +6 -0
- data/spec/dummy/app/views/users/index.html.erb +23 -0
- data/spec/dummy/app/views/users/new.html.erb +5 -0
- data/spec/dummy/app/views/users/show.html.erb +15 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/helpers/media_magick/application_helper_spec.rb +19 -0
- data/spec/integration/images_spec.rb +64 -28
- data/spec/lib/media_magick/model_spec.rb +65 -10
- metadata +36 -10
- data/spec/dummy/app/models/.gitkeep +0 -0
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3@media_magick --create
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
## 0.1.0 - June 11, 2012
|
2
|
+
|
3
|
+
### Improvements
|
4
|
+
|
5
|
+
* Implementation of `attaches_one`
|
6
|
+
|
7
|
+
``` ruby
|
8
|
+
class Album
|
9
|
+
include Mongoid::Document
|
10
|
+
include MediaMagick::Model
|
11
|
+
|
12
|
+
attaches_one :photo
|
13
|
+
end
|
14
|
+
|
15
|
+
album = Album.create
|
16
|
+
album.photo.create(photo: params[:file])
|
17
|
+
album.reload.photo.url
|
18
|
+
album.reload.photo.filename
|
19
|
+
```
|
20
|
+
|
21
|
+
* `attachment_container` can personalize the partial
|
22
|
+
|
23
|
+
``` erb
|
24
|
+
<%= attachment_container @album, :photos, {}, {}, partial: 'albums/photo' %>
|
25
|
+
```
|
26
|
+
|
27
|
+
* Allows to create an image without a father in related relations
|
28
|
+
|
29
|
+
``` ruby
|
30
|
+
class Album
|
31
|
+
include Mongoid::Document
|
32
|
+
include MediaMagick::Model
|
33
|
+
|
34
|
+
attaches_many :photos, :relation => :referenced
|
35
|
+
end
|
36
|
+
|
37
|
+
album = Album.new
|
38
|
+
photo = album.photos.create(photo: params[:file])
|
39
|
+
```
|
40
|
+
|
41
|
+
* Allow the `attachs_many` to be used in embedded documents
|
42
|
+
|
43
|
+
### Deprecations
|
44
|
+
|
45
|
+
* `MediaMagick::Model#attachs_many` is deprecated in favor of `attaches_many`.
|
46
|
+
|
47
|
+
## 0.0.1 - April 11, 2012
|
48
|
+
|
49
|
+
Initial release.
|
data/README.md
CHANGED
@@ -12,11 +12,42 @@ And then execute:
|
|
12
12
|
|
13
13
|
$ bundle
|
14
14
|
|
15
|
-
|
15
|
+
## Getting Started
|
16
16
|
|
17
|
-
|
17
|
+
### Model
|
18
18
|
|
19
|
-
|
19
|
+
``` ruby
|
20
|
+
class Album
|
21
|
+
include Mongoid::Document
|
22
|
+
include MediaMagick::Model
|
23
|
+
|
24
|
+
attachs_many :photos
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
### Controller
|
29
|
+
|
30
|
+
``` ruby
|
31
|
+
def new
|
32
|
+
@album = Album.new
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
### View
|
37
|
+
|
38
|
+
``` erb
|
39
|
+
<%= attachment_container @album, :files %>
|
40
|
+
```
|
41
|
+
|
42
|
+
### Javascript
|
43
|
+
|
44
|
+
``` javascript
|
45
|
+
$(document).ready(function () {
|
46
|
+
$(".attachmentUploader").pluploadIt();
|
47
|
+
});
|
48
|
+
```
|
49
|
+
|
50
|
+
## Configuring
|
20
51
|
|
21
52
|
### Model
|
22
53
|
|
@@ -25,7 +56,7 @@ class Album
|
|
25
56
|
include Mongoid::Document
|
26
57
|
include MediaMagick::Model
|
27
58
|
|
28
|
-
|
59
|
+
attaches_many :photos, type: 'image'
|
29
60
|
end
|
30
61
|
|
31
62
|
album = Album.create
|
@@ -34,6 +65,22 @@ album.reload.photos.first.url
|
|
34
65
|
album.reload.photos.first.filename
|
35
66
|
```
|
36
67
|
|
68
|
+
#### attaches One
|
69
|
+
|
70
|
+
``` ruby
|
71
|
+
class Album
|
72
|
+
include Mongoid::Document
|
73
|
+
include MediaMagick::Model
|
74
|
+
|
75
|
+
attaches_one :photo, type: 'image'
|
76
|
+
end
|
77
|
+
|
78
|
+
album = Album.create
|
79
|
+
album.photo.create(photo: params[:file])
|
80
|
+
album.reload.photo.url
|
81
|
+
album.reload.photo.filename
|
82
|
+
```
|
83
|
+
|
37
84
|
#### Custom classes
|
38
85
|
|
39
86
|
``` ruby
|
@@ -41,7 +88,7 @@ class Album
|
|
41
88
|
include Mongoid::Document
|
42
89
|
include MediaMagick::Model
|
43
90
|
|
44
|
-
|
91
|
+
attaches_many :photos, type: 'image' do
|
45
92
|
field :tags, type: Array
|
46
93
|
end
|
47
94
|
end
|
@@ -53,6 +100,8 @@ album.reload.photos.first.tags #=> ['ruby', 'guru']
|
|
53
100
|
|
54
101
|
#### Custom uploader
|
55
102
|
|
103
|
+
You also need to add `mini_magick` to your **Gemfile** in order to use it for thumbnail generation.
|
104
|
+
|
56
105
|
``` ruby
|
57
106
|
class PhotoUploader < CarrierWave::Uploader::Base
|
58
107
|
include CarrierWave::MiniMagick
|
@@ -74,7 +123,7 @@ class Album
|
|
74
123
|
include Mongoid::Document
|
75
124
|
include MediaMagick::Model
|
76
125
|
|
77
|
-
|
126
|
+
attaches_many :photos, type: 'image', uploader: PhotoUploader
|
78
127
|
end
|
79
128
|
|
80
129
|
album = Album.create
|
@@ -82,6 +131,28 @@ album.photos.create(photo: params[:file])
|
|
82
131
|
album.reload.photos.first.thumb.url
|
83
132
|
```
|
84
133
|
|
134
|
+
### Form View
|
135
|
+
|
136
|
+
``` erb
|
137
|
+
<%= attachment_container @album, :files %>
|
138
|
+
|
139
|
+
<%= attachment_container @album, :files, newAttachments: { class: 'thumbnails' }, loadedAttachments: { class: 'span3' } %>
|
140
|
+
```
|
141
|
+
|
142
|
+
or use a custom layout:
|
143
|
+
|
144
|
+
``` html
|
145
|
+
<%= attachment_container @album, :photos do %>
|
146
|
+
|
147
|
+
<a class="pickAttachments btn" href="javascript://">select files</a>
|
148
|
+
<a class="uploadAttachments btn" href="javascript://">upload files</a>
|
149
|
+
|
150
|
+
<ul class="loadedAttachments">
|
151
|
+
<%= render :partial => 'photos', :collection => @album.photos, :as => 'photo' %>
|
152
|
+
</ul>
|
153
|
+
<% end %>
|
154
|
+
```
|
155
|
+
|
85
156
|
## Contributing
|
86
157
|
|
87
158
|
1. Fork it
|
@@ -56,7 +56,10 @@
|
|
56
56
|
multipart_params: {
|
57
57
|
id: $container.data('id'),
|
58
58
|
relation: $container.data('relation'),
|
59
|
-
model: $container.data('model')
|
59
|
+
model: $container.data('model'),
|
60
|
+
partial: $container.data('partial'),
|
61
|
+
embedded_in_model: $container.data('embedded-in-model'),
|
62
|
+
embedded_in_id: $container.data('embedded-in-id')
|
60
63
|
},
|
61
64
|
resize: settings.resize,
|
62
65
|
runtimes: settings.runtimes,
|
@@ -72,12 +75,15 @@
|
|
72
75
|
$("a.remove").live('click', function() {
|
73
76
|
|
74
77
|
var $attachment = $(this).parents('.attachment');
|
78
|
+
var $attachmentUploader = $(this).parents('.attachmentUploader');
|
75
79
|
|
76
80
|
$.get('/remove', {
|
77
81
|
model: $container.data('model'),
|
78
82
|
id: $container.data('id'),
|
79
83
|
relation: $container.data('relation'),
|
80
|
-
relation_id: $attachment.data('id')
|
84
|
+
relation_id: $attachment.data('id'),
|
85
|
+
embedded_in_model: $attachmentUploader.data('embedded-in-model'),
|
86
|
+
embedded_in_id: $attachmentUploader.data('embedded-in-id')
|
81
87
|
}, function(data) {
|
82
88
|
$attachment.remove();
|
83
89
|
});
|
@@ -3,15 +3,40 @@ require 'action_controller/railtie'
|
|
3
3
|
module MediaMagick
|
4
4
|
class AttachController < ActionController::Base
|
5
5
|
def create
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
if !params[:embedded_in_model].blank?
|
7
|
+
embedded_in = params[:embedded_in_model].constantize.find(params[:embedded_in_id])
|
8
|
+
klass = embedded_in.send(params[:model].pluralize.downcase).find(params[:id])
|
9
|
+
attachment = klass.send(params[:relation].pluralize).create(params[:relation].singularize => params[:file])
|
10
|
+
klass.save
|
11
|
+
else
|
12
|
+
if params[:model].constantize.relations[params[:relation]][:relation] == Mongoid::Relations::Referenced::Many
|
13
|
+
klass = params[:model].constantize.where(id: params[:id])
|
14
|
+
klass = klass.empty? ? nil : klass.first
|
15
|
+
|
16
|
+
if klass
|
17
|
+
attachment = klass.send(params[:relation].pluralize).create(params[:relation].singularize => params[:file])
|
18
|
+
else
|
19
|
+
attachment = params[:model].constantize.relations[params[:relation]][:class_name].constantize.create!(params[:relation].singularize => params[:file])
|
20
|
+
end
|
21
|
+
else
|
22
|
+
klass = params[:model].constantize.find(params[:id])
|
23
|
+
attachment = klass.send(params[:relation].pluralize).create(params[:relation].singularize => params[:file])
|
24
|
+
klass.save
|
25
|
+
end
|
26
|
+
end
|
9
27
|
|
10
|
-
|
28
|
+
partial = params[:partial].blank? ? "/#{attachment.class::TYPE}" : params[:partial]
|
29
|
+
|
30
|
+
render :partial => partial, :locals => {:model => params[:model], :relation => params[:relation], :attachment => attachment}
|
11
31
|
end
|
12
32
|
|
13
33
|
def destroy
|
14
|
-
|
34
|
+
if !params[:embedded_in_model].blank?
|
35
|
+
attachment = params[:embedded_in_model].classify.constantize.find(params[:embedded_in_id]).send(params[:model].pluralize.downcase).find(params[:id]).send(params[:relation].pluralize).find(params[:relation_id])
|
36
|
+
else
|
37
|
+
attachment = params[:model].classify.constantize.find(params[:id]).send(params[:relation].pluralize).find(params[:relation_id])
|
38
|
+
end
|
39
|
+
|
15
40
|
attachment.destroy
|
16
41
|
render nothing: true
|
17
42
|
end
|
@@ -20,7 +45,11 @@ module MediaMagick
|
|
20
45
|
attachments = params[:elements]
|
21
46
|
attachments = attachments.split(',') unless attachments.kind_of?(Array)
|
22
47
|
|
23
|
-
|
48
|
+
if !params[:embedded_in_model].blank?
|
49
|
+
parent = params[:embedded_in_model].classify.constantize.find(params[:embedded_in_id]).send(params[:model].pluralize.downcase).find(params[:model_id])
|
50
|
+
else
|
51
|
+
parent = params[:model].constantize.find(params[:model_id])
|
52
|
+
end
|
24
53
|
|
25
54
|
attachments.each_with_index do |id, i|
|
26
55
|
attachment = parent.send(params[:relation]).find(id)
|
@@ -32,7 +61,11 @@ module MediaMagick
|
|
32
61
|
end
|
33
62
|
|
34
63
|
def recreate_versions
|
35
|
-
|
64
|
+
if !params[:embedded_in_model].blank?
|
65
|
+
parent = params[:embedded_in_model].classify.constantize.find(params[:embedded_in_id]).send(params[:model].pluralize.downcase).find(params[:model_id])
|
66
|
+
else
|
67
|
+
parent = params[:model].classify.constantize.find(params[:model_id])
|
68
|
+
end
|
36
69
|
|
37
70
|
errors = []
|
38
71
|
parent.send(params[:relation].pluralize).each do |attachment|
|
@@ -1,11 +1,28 @@
|
|
1
1
|
module MediaMagick
|
2
2
|
module ApplicationHelper
|
3
|
-
def attachment_container(model, relation, newAttachments = {}, loadedAttachments= {})
|
4
|
-
|
3
|
+
def attachment_container(model, relation, newAttachments = {}, loadedAttachments = {}, options = {})
|
4
|
+
data_attributes = {
|
5
|
+
model: model.class.to_s,
|
6
|
+
id: model.id.to_s,
|
7
|
+
relation: relation.to_s
|
8
|
+
}
|
9
|
+
|
10
|
+
data_attributes.merge!(:partial => options[:partial]) if options[:partial]
|
11
|
+
data_attributes.merge!(:embedded_in_id => options[:embedded_in].id.to_s, :embedded_in_model => options[:embedded_in].class.to_s) if options[:embedded_in]
|
12
|
+
|
13
|
+
content_tag :div, id: model.class.to_s.downcase << '-' << relation.to_s, class: 'attachmentUploader ' << relation.to_s, data: data_attributes do
|
5
14
|
if block_given?
|
6
15
|
yield
|
7
16
|
else
|
8
|
-
|
17
|
+
partial_attributes = {
|
18
|
+
model: model,
|
19
|
+
relations: relation,
|
20
|
+
newAttachments: newAttachments,
|
21
|
+
loadedAttachments: loadedAttachments,
|
22
|
+
partial: options[:partial]
|
23
|
+
}
|
24
|
+
|
25
|
+
render '/upload', partial_attributes
|
9
26
|
end
|
10
27
|
end
|
11
28
|
end
|
data/app/views/_file.html.erb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
<li class="attachment" data-id="<%= attachment.to_param %>">
|
2
2
|
<%= link_to attachment.filename, attachment.url unless attachment.file.nil? %>
|
3
3
|
<%= link_to t('media_magick.remove'), "javascript://", method: "delete", confirm: t('media_magick.confirm_removal'), class: "remove btn btn-mini btn-danger" %>
|
4
|
+
|
5
|
+
<%= hidden_field_tag "#{model.parameterize}[#{relation.singularize}_ids][]", attachment.id if model && relation %>
|
4
6
|
</li>
|
data/app/views/_image.html.erb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
<li class="attachment" id="<%= attachment.to_param %>" data-id="<%= attachment.to_param %>">
|
2
2
|
<%= image_tag attachment.url, alt: attachment.filename %>
|
3
3
|
<%= link_to t('media_magick.remove'), "javascript://", method: "delete", confirm: t('media_magick.confirm_removal'), class: "remove btn btn-mini btn-danger" %>
|
4
|
+
|
5
|
+
<%= hidden_field_tag "#{model.parameterize}[#{relation.singularize}_ids][]", attachment.id if model && relation %>
|
4
6
|
</li>
|
data/app/views/_upload.html.erb
CHANGED
@@ -7,11 +7,13 @@
|
|
7
7
|
<a class="uploadAttachments btn" href="javascript://"><%= t('media_magick.upload') %></a>
|
8
8
|
</div>
|
9
9
|
<ul class="loadedAttachments <%= loadedAttachments[:class] %>">
|
10
|
-
<%
|
11
|
-
<% if
|
10
|
+
<% model.send(relations).each do |attachment| %>
|
11
|
+
<% if partial %>
|
12
|
+
<%= render partial, attachment: attachment %>
|
13
|
+
<% elsif attachment.class::TYPE.to_s == 'file' %>
|
12
14
|
<%= render :partial => "/file", :locals => { :attachment => attachment } %>
|
13
15
|
<% elsif attachment.class::TYPE.to_s == 'image' %>
|
14
|
-
<%= render :partial => "/image", :locals => { :attachment => attachment } %>
|
16
|
+
<%= render :partial => "/image", :locals => { :attachment => attachment, :model => nil, :relation => nil } %>
|
15
17
|
<% end %>
|
16
18
|
<% end %>
|
17
19
|
</ul>
|
data/lib/media_magick/model.rb
CHANGED
@@ -8,6 +8,15 @@ module MediaMagick
|
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def attachs_many(name, options = {}, &block)
|
11
|
+
warn "[DEPRECATION] `attachs_many` is deprecated. Please use `attaches_many` instead."
|
12
|
+
attaches_many(name, options, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# TODO
|
17
|
+
# * refactor these methods to remove duplication
|
18
|
+
#
|
19
|
+
def attaches_many(name, options = {}, &block)
|
11
20
|
klass = Class.new do
|
12
21
|
include Mongoid::Document
|
13
22
|
extend CarrierWave::Mount
|
@@ -15,9 +24,57 @@ module MediaMagick
|
|
15
24
|
field :priority, type: Integer, default: 0
|
16
25
|
default_scope asc(:priority)
|
17
26
|
|
18
|
-
|
27
|
+
if options[:relation] == :referenced
|
28
|
+
belongs_to :attachmentable, polymorphic: true
|
29
|
+
else
|
30
|
+
embedded_in :attachmentable, polymorphic: true
|
31
|
+
end
|
32
|
+
|
33
|
+
mount_uploader name.to_s.singularize, (options[:uploader] || AttachmentUploader)
|
34
|
+
|
35
|
+
self.const_set "TYPE", options[:type] || :image
|
36
|
+
self.const_set "ATTACHMENT", name.to_s.singularize
|
37
|
+
|
38
|
+
class_eval(&block) if block_given?
|
39
|
+
|
40
|
+
def method_missing(method, args = nil)
|
41
|
+
return self.send(self.class::ATTACHMENT).file.filename if method == :filename
|
42
|
+
self.send(self.class::ATTACHMENT).send(method)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
name_camelcase = name.to_s.camelcase
|
47
|
+
Object.const_set "#{self}#{name_camelcase}", klass
|
48
|
+
|
49
|
+
if options[:relation] == :referenced
|
50
|
+
klass.collection_name = "#{self.name}_#{name.to_s.camelcase}".parameterize
|
51
|
+
|
52
|
+
has_many(name, :as => :attachmentable, class_name: "#{self}#{name_camelcase}")
|
53
|
+
|
54
|
+
field "#{name.to_s.singularize}_ids", type: Array
|
55
|
+
|
56
|
+
before_create do
|
57
|
+
ids = self.send("#{name.to_s.singularize}_ids") || []
|
58
|
+
|
59
|
+
ids.each do |id|
|
60
|
+
"#{self.class}#{name_camelcase}".constantize.find(id).update_attributes(attachmentable: self)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
else
|
64
|
+
embeds_many(name, :as => :attachmentable, class_name: "#{self}#{name_camelcase}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def attaches_one(name, options = {}, &block)
|
69
|
+
klass = Class.new do
|
70
|
+
include Mongoid::Document
|
71
|
+
extend CarrierWave::Mount
|
72
|
+
|
73
|
+
embedded_in name
|
19
74
|
mount_uploader name.to_s.singularize, (options[:uploader] || AttachmentUploader)
|
20
75
|
|
76
|
+
accepts_nested_attributes_for name.to_s.singularize
|
77
|
+
|
21
78
|
self.const_set "TYPE", options[:type] || :image
|
22
79
|
self.const_set "ATTACHMENT", name.to_s.singularize
|
23
80
|
|
@@ -30,9 +87,9 @@ module MediaMagick
|
|
30
87
|
end
|
31
88
|
|
32
89
|
name_camelcase = name.to_s.camelcase
|
33
|
-
Object.const_set "#{self
|
90
|
+
Object.const_set "#{self}#{name_camelcase}", klass
|
34
91
|
|
35
|
-
|
92
|
+
embeds_one name, class_name: "#{self}#{name_camelcase}", cascade_callbacks: true
|
36
93
|
end
|
37
94
|
end
|
38
95
|
end
|
data/lib/media_magick/version.rb
CHANGED
data/media_magick.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.email = ['contato@lucasrenan.com', 'rbrancher@gmail.com', 'tiagogodinho3@gmail.com']
|
7
7
|
gem.description = %q{MediaMagick aims to make dealing with multimedia resources a very easy task – like magic.}
|
8
8
|
gem.summary = %q{MediaMagick aims to make dealing with multimedia resources a very easy task – like magic. It wraps up robust solutions for upload, associate and display images, videos, audios and files to any model in your rails app.}
|
9
|
-
gem.homepage = ''
|
9
|
+
gem.homepage = 'https://github.com/nudesign/media_magick'
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($\)
|
12
12
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -23,6 +23,6 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_development_dependency 'bson_ext', '~> 1.6.0'
|
24
24
|
gem.add_development_dependency 'mini_magick', '~> 3.4'
|
25
25
|
gem.add_development_dependency 'rake', '~> 0.9'
|
26
|
-
gem.add_development_dependency 'rspec-rails', '~> 2.
|
26
|
+
gem.add_development_dependency 'rspec-rails', '~> 2.10.1'
|
27
27
|
gem.add_development_dependency 'simplecov', '~> 0.6.1'
|
28
28
|
end
|
@@ -16,6 +16,36 @@ describe MediaMagick::AttachController do
|
|
16
16
|
|
17
17
|
response.body.should =~ /nu.jpg/m
|
18
18
|
end
|
19
|
+
|
20
|
+
it "creates a new photo for embedded models" do
|
21
|
+
album = Album.create
|
22
|
+
track = album.tracks.create
|
23
|
+
|
24
|
+
expect {
|
25
|
+
post :create, { embedded_in_id: album.id, embedded_in_model: 'Album', model: 'Track', id: track.id, relation: 'files', file: fixture_file_upload("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg") }
|
26
|
+
}.to change { track.reload.files.count }.by(1)
|
27
|
+
|
28
|
+
response.should render_template('_image')
|
29
|
+
|
30
|
+
response.body.should =~ /nu.jpg/m
|
31
|
+
end
|
32
|
+
|
33
|
+
it "render a personalized partial" do
|
34
|
+
album = Album.create
|
35
|
+
post :create, { model: 'Album', id: album.id, relation: 'photos', partial: 'albums/photo', file: fixture_file_upload("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg") }
|
36
|
+
response.should render_template('albums/_photo')
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'creates a new photo without parent' do
|
40
|
+
album = Album.new
|
41
|
+
album_files = AlbumFiles.create(file: File.new("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg"))
|
42
|
+
|
43
|
+
AlbumFiles.should_receive(:create!).and_return(album_files)
|
44
|
+
|
45
|
+
post :create, { model: 'Album', id: album.id, relation: 'files', file: fixture_file_upload("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg") }
|
46
|
+
|
47
|
+
response.body.should =~ /nu.jpg/m
|
48
|
+
end
|
19
49
|
end
|
20
50
|
end
|
21
51
|
|
@@ -28,6 +58,16 @@ describe MediaMagick::AttachController do
|
|
28
58
|
delete :destroy, { model: 'Album', id: album.id, relation: 'photos', relation_id: photo.id }
|
29
59
|
}.to change { album.reload.photos.count }.by(-1)
|
30
60
|
end
|
61
|
+
|
62
|
+
it "destroys the requested photo for embedded models" do
|
63
|
+
album = Album.create
|
64
|
+
track = album.tracks.create
|
65
|
+
file = track.files.create(file: File.new(fixture_file_upload("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg")))
|
66
|
+
|
67
|
+
expect {
|
68
|
+
delete :destroy, { embedded_in_model: 'Album', embedded_in_id: album.id, model: 'Track', id: track.id, relation: 'files', relation_id: file.id }
|
69
|
+
}.to change { track.reload.files.count }.by(-1)
|
70
|
+
end
|
31
71
|
end
|
32
72
|
|
33
73
|
describe "update priority" do
|
@@ -44,6 +84,21 @@ describe MediaMagick::AttachController do
|
|
44
84
|
photo1.reload.priority.should eq(0)
|
45
85
|
photo2.reload.priority.should eq(1)
|
46
86
|
end
|
87
|
+
|
88
|
+
it "updates the attachments priority for embedded models" do
|
89
|
+
album = Album.create
|
90
|
+
track = album.tracks.create
|
91
|
+
file1 = track.files.create(file: File.new(fixture_file_upload("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg")))
|
92
|
+
file2 = track.files.create(file: File.new(fixture_file_upload("#{File.expand_path('../../..', __FILE__)}/support/fixtures/nu.jpg")))
|
93
|
+
|
94
|
+
id1 = file1.id.to_s
|
95
|
+
id2 = file2.id.to_s
|
96
|
+
|
97
|
+
put :update_priority, { elements: [id1, id2], embedded_in_model: 'Album', embedded_in_id: album.id, model: 'Track', model_id: track.id.to_s, relation: 'files' }
|
98
|
+
|
99
|
+
file1.reload.priority.should eq(0)
|
100
|
+
file2.reload.priority.should eq(1)
|
101
|
+
end
|
47
102
|
end
|
48
103
|
|
49
104
|
describe "recriate versions" do
|
@@ -55,5 +110,15 @@ describe MediaMagick::AttachController do
|
|
55
110
|
|
56
111
|
response.status.should be(302)
|
57
112
|
end
|
113
|
+
|
114
|
+
it "recriate images versions for embedded models" do
|
115
|
+
album = Album.create
|
116
|
+
track = album.tracks.create
|
117
|
+
|
118
|
+
request.env["HTTP_REFERER"] = "/"
|
119
|
+
put :recreate_versions, { embedded_in_model: 'album', embedded_in_id: album.id, model: 'track', model_id: track.id.to_s, relation: 'files' }
|
120
|
+
|
121
|
+
response.status.should be(302)
|
122
|
+
end
|
58
123
|
end
|
59
124
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
div.field, div.actions {
|
20
|
+
margin-bottom: 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
#notice {
|
24
|
+
color: green;
|
25
|
+
}
|
26
|
+
|
27
|
+
.field_with_errors {
|
28
|
+
padding: 2px;
|
29
|
+
background-color: red;
|
30
|
+
display: table;
|
31
|
+
}
|
32
|
+
|
33
|
+
#error_explanation {
|
34
|
+
width: 450px;
|
35
|
+
border: 2px solid red;
|
36
|
+
padding: 7px;
|
37
|
+
padding-bottom: 0;
|
38
|
+
margin-bottom: 20px;
|
39
|
+
background-color: #f0f0f0;
|
40
|
+
}
|
41
|
+
|
42
|
+
#error_explanation h2 {
|
43
|
+
text-align: left;
|
44
|
+
font-weight: bold;
|
45
|
+
padding: 5px 5px 5px 15px;
|
46
|
+
font-size: 12px;
|
47
|
+
margin: -7px;
|
48
|
+
margin-bottom: 0px;
|
49
|
+
background-color: #c00;
|
50
|
+
color: #fff;
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul li {
|
54
|
+
font-size: 12px;
|
55
|
+
list-style: square;
|
56
|
+
}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class UsersController < ApplicationController
|
2
|
+
# GET /users
|
3
|
+
# GET /users.json
|
4
|
+
def index
|
5
|
+
@users = User.all
|
6
|
+
|
7
|
+
respond_to do |format|
|
8
|
+
format.html # index.html.erb
|
9
|
+
format.json { render json: @users }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# GET /users/1
|
14
|
+
# GET /users/1.json
|
15
|
+
def show
|
16
|
+
@user = User.find(params[:id])
|
17
|
+
|
18
|
+
respond_to do |format|
|
19
|
+
format.html # show.html.erb
|
20
|
+
format.json { render json: @user }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# GET /users/new
|
25
|
+
# GET /users/new.json
|
26
|
+
def new
|
27
|
+
@user = User.new
|
28
|
+
@user.build_photo
|
29
|
+
|
30
|
+
respond_to do |format|
|
31
|
+
format.html # new.html.erb
|
32
|
+
format.json { render json: @user }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# GET /users/1/edit
|
37
|
+
def edit
|
38
|
+
@user = User.find(params[:id])
|
39
|
+
end
|
40
|
+
|
41
|
+
# POST /users
|
42
|
+
# POST /users.json
|
43
|
+
def create
|
44
|
+
@user = User.new(params[:user])
|
45
|
+
|
46
|
+
respond_to do |format|
|
47
|
+
if @user.save
|
48
|
+
format.html { redirect_to @user, notice: 'User was successfully created.' }
|
49
|
+
format.json { render json: @user, status: :created, location: @user }
|
50
|
+
else
|
51
|
+
format.html { render action: "new" }
|
52
|
+
format.json { render json: @user.errors, status: :unprocessable_entity }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# PUT /users/1
|
58
|
+
# PUT /users/1.json
|
59
|
+
def update
|
60
|
+
@user = User.find(params[:id])
|
61
|
+
|
62
|
+
respond_to do |format|
|
63
|
+
if @user.update_attributes(params[:user])
|
64
|
+
format.html { redirect_to @user, notice: 'User was successfully updated.' }
|
65
|
+
format.json { head :no_content }
|
66
|
+
else
|
67
|
+
format.html { render action: "edit" }
|
68
|
+
format.json { render json: @user.errors, status: :unprocessable_entity }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# DELETE /users/1
|
74
|
+
# DELETE /users/1.json
|
75
|
+
def destroy
|
76
|
+
@user = User.find(params[:id])
|
77
|
+
@user.destroy
|
78
|
+
|
79
|
+
respond_to do |format|
|
80
|
+
format.html { redirect_to users_url }
|
81
|
+
format.json { head :no_content }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -2,13 +2,15 @@ class Album
|
|
2
2
|
include Mongoid::Document
|
3
3
|
include MediaMagick::Model
|
4
4
|
|
5
|
-
|
6
|
-
attachs_many :files
|
7
|
-
attachs_many :compound_name_files
|
5
|
+
embeds_many :tracks
|
8
6
|
|
9
|
-
|
7
|
+
attaches_many :photos
|
8
|
+
attaches_many :files, :relation => :referenced
|
9
|
+
attaches_many :compound_name_files
|
10
|
+
|
11
|
+
attaches_many :images do
|
10
12
|
field :tags, type: Array
|
11
13
|
end
|
12
14
|
|
13
|
-
|
15
|
+
attaches_many :pictures, uploader: PictureUploader
|
14
16
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
albums/photo
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<%= form_for(@user, html: {multipart: true}) do |f| %>
|
2
|
+
<% if @user.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @user.errors.full_messages.each do |msg| %>
|
8
|
+
<li><%= msg %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :name %><br />
|
16
|
+
<%= f.text_field :name %>
|
17
|
+
</div>
|
18
|
+
<%= f.fields_for :photo do |p| %>
|
19
|
+
<div class="field">
|
20
|
+
<%= p.label :photo %><br />
|
21
|
+
<%= p.file_field :photo %>
|
22
|
+
<%= p.hidden_field :photo_cache %>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<div class="actions">
|
27
|
+
<%= f.submit %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1>Listing users</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Name</th>
|
6
|
+
<th></th>
|
7
|
+
<th></th>
|
8
|
+
<th></th>
|
9
|
+
</tr>
|
10
|
+
|
11
|
+
<% @users.each do |user| %>
|
12
|
+
<tr>
|
13
|
+
<td><%= user.name %></td>
|
14
|
+
<td><%= link_to 'Show', user %></td>
|
15
|
+
<td><%= link_to 'Edit', edit_user_path(user) %></td>
|
16
|
+
<td><%= link_to 'Destroy', user, confirm: 'Are you sure?', method: :delete %></td>
|
17
|
+
</tr>
|
18
|
+
<% end %>
|
19
|
+
</table>
|
20
|
+
|
21
|
+
<br />
|
22
|
+
|
23
|
+
<%= link_to 'New User', new_user_path %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<b>Name:</b>
|
5
|
+
<%= @user.name %>
|
6
|
+
</p>
|
7
|
+
|
8
|
+
<p>
|
9
|
+
<b>Photo:</b>
|
10
|
+
<%= image_tag @user.photo.url if @user.photo %>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
|
14
|
+
<%= link_to 'Edit', edit_user_path(@user) %> |
|
15
|
+
<%= link_to 'Back', users_path %>
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -11,6 +11,25 @@ describe MediaMagick do
|
|
11
11
|
end.should eq('<div class="attachmentUploader photos" data-id="12345678" data-model="Album" data-relation="photos" id="album-photos"></div>')
|
12
12
|
end
|
13
13
|
|
14
|
+
it 'should include partial option on data attributes' do
|
15
|
+
album = Album.new
|
16
|
+
album.stub(id: '12345678')
|
17
|
+
|
18
|
+
helper.attachment_container(album, :photos, {}, {}, partial: 'albums/photo') do
|
19
|
+
end.should eq('<div class="attachmentUploader photos" data-id="12345678" data-model="Album" data-partial="albums/photo" data-relation="photos" id="album-photos"></div>')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should create a div.attachmentUploader.photos for embedded models' do
|
23
|
+
album = Album.new
|
24
|
+
album.stub(id: '12345678')
|
25
|
+
|
26
|
+
track = album.tracks.new
|
27
|
+
track.stub(id: '87654321')
|
28
|
+
|
29
|
+
helper.attachment_container(track, :files, {}, {}, embedded_in: album) do
|
30
|
+
end.should eq('<div class="attachmentUploader files" data-embedded-in-id="12345678" data-embedded-in-model="Album" data-id="87654321" data-model="Track" data-relation="files" id="track-files"></div>')
|
31
|
+
end
|
32
|
+
|
14
33
|
it 'should renders default partial if block is not given' do
|
15
34
|
photo = AlbumPhotos.new
|
16
35
|
photo.stub(filename: 'photo.jpg', url: 'url/photo.jpg')
|
@@ -4,44 +4,80 @@ describe 'Images' do
|
|
4
4
|
let(:image_file) { File.new("#{File.expand_path('../..', __FILE__)}/support/fixtures/nu.jpg") }
|
5
5
|
let(:non_image_file) { File.new("#{File.expand_path('../..', __FILE__)}/support/fixtures/nu.txt") }
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
context "when uploading many files" do
|
8
|
+
it 'should save the image on mongoid document' do
|
9
|
+
product = Product.create
|
10
|
+
product.images.create(image: image_file)
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
product.reload.images.first.filename.should eq('nu.jpg')
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
it 'should save the file on mongoid document' do
|
16
|
+
product = Product.create
|
17
|
+
file = product.files.create(file: non_image_file)
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
product.reload.files.first.url.should eq("/uploads/product_files/file/#{file.id}/nu.txt")
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
it 'should access Uploader methods from relation class' do
|
23
|
+
product = Product.create
|
24
|
+
image = product.images.create(image: image_file)
|
24
25
|
|
25
|
-
|
26
|
-
|
26
|
+
image.url.should eq("/uploads/product_images/image/#{image.id}/nu.jpg")
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
it 'should access filename from relation class' do
|
30
|
+
product = Product.create
|
31
|
+
product.images.create(image: image_file)
|
31
32
|
|
32
|
-
|
33
|
-
|
33
|
+
product.reload.images.first.filename.should eq('nu.jpg')
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
it 'should add fields on relation class' do
|
37
|
+
product = Product.create
|
38
|
+
product.images.create(image: image_file, tags: ['ruby', 'guru'])
|
38
39
|
|
39
|
-
|
40
|
+
product.reload.images.first.tags.should eq(['ruby', 'guru'])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should create version of images' do
|
44
|
+
product = Product.create
|
45
|
+
image = product.images.create(image: image_file)
|
46
|
+
product.reload.images.first.thumb.url.should eq("/uploads/product_images/image/#{image.id}/thumb_nu.jpg")
|
47
|
+
end
|
40
48
|
end
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
50
|
+
context "when uploading one file" do
|
51
|
+
let(:user) { User.create }
|
52
|
+
|
53
|
+
it 'should save the image on mongoid document' do
|
54
|
+
user.create_photo(photo: image_file)
|
55
|
+
|
56
|
+
user.photo.filename.should eq('nu.jpg')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should save the file on mongoid document' do
|
60
|
+
file = user.create_file(file: non_image_file)
|
61
|
+
|
62
|
+
user.file.url.should eq("/uploads/user_file/file/#{file.id}/nu.txt")
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should access Uploader methods from relation class' do
|
66
|
+
photo = user.create_photo(photo: image_file)
|
67
|
+
|
68
|
+
photo.url.should eq("/uploads/user_photo/photo/#{photo.id}/nu.jpg")
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should access filename from relation class' do
|
72
|
+
user.create_photo(photo: image_file)
|
73
|
+
|
74
|
+
user.photo.filename.should eq('nu.jpg')
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should create version of images' do
|
78
|
+
photo = user.create_photo(photo: image_file)
|
79
|
+
|
80
|
+
user.photo.thumb.url.should eq("/uploads/user_photo/photo/#{photo.id}/thumb_nu.jpg")
|
81
|
+
end
|
46
82
|
end
|
47
83
|
end
|
@@ -3,18 +3,36 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe MediaMagick::Model do
|
6
|
-
describe '
|
6
|
+
describe 'including class methods' do
|
7
7
|
before(:all) do
|
8
|
-
@
|
9
|
-
|
8
|
+
@klass = User
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should includes .attaches_many" do
|
12
|
+
@klass.should respond_to(:attaches_many)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should includes .attaches_one" do
|
16
|
+
@klass.should respond_to(:attaches_one)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.attaches_many' do
|
21
|
+
before(:all) do
|
22
|
+
@klass = Album
|
23
|
+
@instance = @klass.new
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should create a "has_many" relationship with photos' do
|
27
|
+
@klass.relations['files'].relation.should eq(Mongoid::Relations::Referenced::Many)
|
10
28
|
end
|
11
29
|
|
12
30
|
it 'should create a "embeds_many" relationship with photos' do
|
13
|
-
@
|
31
|
+
@klass.relations['photos'].relation.should eq(Mongoid::Relations::Embedded::Many)
|
14
32
|
end
|
15
33
|
|
16
34
|
it 'should create a relationship with photos through AlbumPhotos model' do
|
17
|
-
@
|
35
|
+
@klass.relations['photos'].class_name.should eq('AlbumPhotos')
|
18
36
|
end
|
19
37
|
|
20
38
|
describe "naming relations" do
|
@@ -30,16 +48,15 @@ describe MediaMagick::Model do
|
|
30
48
|
it { should be_an_instance_of(AlbumPhotos) }
|
31
49
|
|
32
50
|
it 'should perform a block in the context of the class' do
|
33
|
-
@
|
34
|
-
def test_method
|
35
|
-
end
|
51
|
+
@klass.attaches_many(:documents) do
|
52
|
+
def test_method; end
|
36
53
|
end
|
37
54
|
|
38
55
|
@instance.documents.new.should respond_to(:test_method)
|
39
56
|
end
|
40
57
|
|
41
58
|
it "should be ordered by ascending priority" do
|
42
|
-
@instance = @
|
59
|
+
@instance = @klass.new
|
43
60
|
|
44
61
|
photo2 = @instance.photos.create(priority: 1)
|
45
62
|
photo1 = @instance.photos.create(priority: 0)
|
@@ -66,7 +83,7 @@ describe MediaMagick::Model do
|
|
66
83
|
storage :file
|
67
84
|
end
|
68
85
|
|
69
|
-
@
|
86
|
+
@klass.attaches_many :musics, uploader: AmazonS3Uploader
|
70
87
|
end
|
71
88
|
|
72
89
|
subject { @instance.musics.new }
|
@@ -77,4 +94,42 @@ describe MediaMagick::Model do
|
|
77
94
|
end
|
78
95
|
end
|
79
96
|
end
|
97
|
+
|
98
|
+
describe '.attaches_one' do
|
99
|
+
before(:all) do
|
100
|
+
@klass = User
|
101
|
+
@instance = @klass.new
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should create an embedded model' do
|
105
|
+
@klass.relations['photo'].class_name.should eq('UserPhoto')
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'should create a "embeds_one" relation' do
|
109
|
+
@klass.relations['photo'].relation.should eq(Mongoid::Relations::Embedded::One)
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "naming relations" do
|
113
|
+
it "should transform related compound name classe to camel case" do
|
114
|
+
@instance.should respond_to(:compound_name_file)
|
115
|
+
@instance.build_compound_name_file.class.should eq(UserCompoundNameFile)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "related method" do
|
120
|
+
subject { @instance.build_photo }
|
121
|
+
|
122
|
+
it { should be_an_instance_of(UserPhoto) }
|
123
|
+
|
124
|
+
it 'should perform a block in the context of the class' do
|
125
|
+
@klass.attaches_one(:image) do
|
126
|
+
def test_method; end
|
127
|
+
end
|
128
|
+
|
129
|
+
@instance.build_image.should respond_to(:test_method)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
80
135
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: media_magick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-06-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: carrierwave
|
@@ -132,7 +132,7 @@ dependencies:
|
|
132
132
|
requirements:
|
133
133
|
- - ~>
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: 2.
|
135
|
+
version: 2.10.1
|
136
136
|
type: :development
|
137
137
|
prerelease: false
|
138
138
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -140,7 +140,7 @@ dependencies:
|
|
140
140
|
requirements:
|
141
141
|
- - ~>
|
142
142
|
- !ruby/object:Gem::Version
|
143
|
-
version: 2.
|
143
|
+
version: 2.10.1
|
144
144
|
- !ruby/object:Gem::Dependency
|
145
145
|
name: simplecov
|
146
146
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,7 +169,9 @@ extra_rdoc_files: []
|
|
169
169
|
files:
|
170
170
|
- .gitignore
|
171
171
|
- .rspec
|
172
|
+
- .rvmrc
|
172
173
|
- .travis.yml
|
174
|
+
- CHANGELOG.md
|
173
175
|
- Gemfile
|
174
176
|
- LICENSE
|
175
177
|
- README.md
|
@@ -202,15 +204,27 @@ files:
|
|
202
204
|
- spec/dummy/README.rdoc
|
203
205
|
- spec/dummy/Rakefile
|
204
206
|
- spec/dummy/app/assets/javascripts/application.js
|
207
|
+
- spec/dummy/app/assets/javascripts/users.js
|
205
208
|
- spec/dummy/app/assets/stylesheets/application.css
|
209
|
+
- spec/dummy/app/assets/stylesheets/scaffold.css
|
210
|
+
- spec/dummy/app/assets/stylesheets/users.css
|
206
211
|
- spec/dummy/app/controllers/application_controller.rb
|
212
|
+
- spec/dummy/app/controllers/users_controller.rb
|
207
213
|
- spec/dummy/app/helpers/application_helper.rb
|
214
|
+
- spec/dummy/app/helpers/users_helper.rb
|
208
215
|
- spec/dummy/app/mailers/.gitkeep
|
209
|
-
- spec/dummy/app/models/.gitkeep
|
210
216
|
- spec/dummy/app/models/album.rb
|
211
217
|
- spec/dummy/app/models/product.rb
|
218
|
+
- spec/dummy/app/models/track.rb
|
219
|
+
- spec/dummy/app/models/user.rb
|
212
220
|
- spec/dummy/app/uploaders/picture_uploader.rb
|
221
|
+
- spec/dummy/app/views/albums/_photo.html.erb
|
213
222
|
- spec/dummy/app/views/layouts/application.html.erb
|
223
|
+
- spec/dummy/app/views/users/_form.html.erb
|
224
|
+
- spec/dummy/app/views/users/edit.html.erb
|
225
|
+
- spec/dummy/app/views/users/index.html.erb
|
226
|
+
- spec/dummy/app/views/users/new.html.erb
|
227
|
+
- spec/dummy/app/views/users/show.html.erb
|
214
228
|
- spec/dummy/config.ru
|
215
229
|
- spec/dummy/config/application.rb
|
216
230
|
- spec/dummy/config/boot.rb
|
@@ -241,7 +255,7 @@ files:
|
|
241
255
|
- spec/spec_helper.rb
|
242
256
|
- spec/support/fixtures/nu.jpg
|
243
257
|
- spec/support/fixtures/nu.txt
|
244
|
-
homepage:
|
258
|
+
homepage: https://github.com/nudesign/media_magick
|
245
259
|
licenses: []
|
246
260
|
post_install_message:
|
247
261
|
rdoc_options: []
|
@@ -255,7 +269,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
255
269
|
version: '0'
|
256
270
|
segments:
|
257
271
|
- 0
|
258
|
-
hash:
|
272
|
+
hash: -141377081064224492
|
259
273
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
260
274
|
none: false
|
261
275
|
requirements:
|
@@ -264,10 +278,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
264
278
|
version: '0'
|
265
279
|
segments:
|
266
280
|
- 0
|
267
|
-
hash:
|
281
|
+
hash: -141377081064224492
|
268
282
|
requirements: []
|
269
283
|
rubyforge_project:
|
270
|
-
rubygems_version: 1.8.
|
284
|
+
rubygems_version: 1.8.24
|
271
285
|
signing_key:
|
272
286
|
specification_version: 3
|
273
287
|
summary: MediaMagick aims to make dealing with multimedia resources a very easy task
|
@@ -278,15 +292,27 @@ test_files:
|
|
278
292
|
- spec/dummy/README.rdoc
|
279
293
|
- spec/dummy/Rakefile
|
280
294
|
- spec/dummy/app/assets/javascripts/application.js
|
295
|
+
- spec/dummy/app/assets/javascripts/users.js
|
281
296
|
- spec/dummy/app/assets/stylesheets/application.css
|
297
|
+
- spec/dummy/app/assets/stylesheets/scaffold.css
|
298
|
+
- spec/dummy/app/assets/stylesheets/users.css
|
282
299
|
- spec/dummy/app/controllers/application_controller.rb
|
300
|
+
- spec/dummy/app/controllers/users_controller.rb
|
283
301
|
- spec/dummy/app/helpers/application_helper.rb
|
302
|
+
- spec/dummy/app/helpers/users_helper.rb
|
284
303
|
- spec/dummy/app/mailers/.gitkeep
|
285
|
-
- spec/dummy/app/models/.gitkeep
|
286
304
|
- spec/dummy/app/models/album.rb
|
287
305
|
- spec/dummy/app/models/product.rb
|
306
|
+
- spec/dummy/app/models/track.rb
|
307
|
+
- spec/dummy/app/models/user.rb
|
288
308
|
- spec/dummy/app/uploaders/picture_uploader.rb
|
309
|
+
- spec/dummy/app/views/albums/_photo.html.erb
|
289
310
|
- spec/dummy/app/views/layouts/application.html.erb
|
311
|
+
- spec/dummy/app/views/users/_form.html.erb
|
312
|
+
- spec/dummy/app/views/users/edit.html.erb
|
313
|
+
- spec/dummy/app/views/users/index.html.erb
|
314
|
+
- spec/dummy/app/views/users/new.html.erb
|
315
|
+
- spec/dummy/app/views/users/show.html.erb
|
290
316
|
- spec/dummy/config.ru
|
291
317
|
- spec/dummy/config/application.rb
|
292
318
|
- spec/dummy/config/boot.rb
|
File without changes
|