media_magick 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/CHANGELOG.md +53 -1
- data/Gemfile +0 -2
- data/Guardfile +5 -0
- data/LICENSE +1 -1
- data/README.md +32 -22
- data/Rakefile +1 -13
- data/app/assets/javascripts/media_magick/plupload_it.js +54 -45
- data/app/controllers/media_magick/attach_controller.rb +6 -6
- data/app/helpers/media_magick/application_helper.rb +58 -48
- data/app/views/_loader.html.erb +14 -0
- data/app/views/_uploader.html.erb +13 -0
- data/app/views/_video_uploader.html.erb +2 -0
- data/config/locales/en.yml +1 -0
- data/gemfiles/mongoid-3.0.gemfile +1 -2
- data/lib/media_magick.rb +1 -1
- data/lib/media_magick/controller/helpers.rb +25 -5
- data/lib/media_magick/engine.rb +1 -1
- data/lib/media_magick/image/dimensions.rb +23 -0
- data/lib/media_magick/model.rb +22 -5
- data/lib/media_magick/version.rb +2 -2
- data/media_magick.gemspec +10 -13
- data/spec/controllers/media_magick/attach_controller_spec.rb +35 -21
- data/spec/dummy/app/assets/javascripts/store/products.js +2 -0
- data/spec/dummy/app/assets/stylesheets/store/products.css +4 -0
- data/spec/dummy/app/controllers/store/products_controller.rb +83 -0
- data/spec/dummy/app/helpers/store/products_helper.rb +2 -0
- data/spec/dummy/app/models/post.rb +1 -0
- data/spec/dummy/app/models/store/product.rb +10 -0
- data/spec/dummy/app/models/user.rb +3 -2
- data/spec/dummy/app/uploaders/post_uploader.rb +11 -3
- data/spec/dummy/app/views/posts/_form.html.erb +16 -5
- data/spec/dummy/app/views/posts/index.html.erb +1 -1
- data/spec/dummy/app/views/store/products/_form.html.erb +34 -0
- data/spec/dummy/app/views/store/products/edit.html.erb +6 -0
- data/spec/dummy/app/views/store/products/index.html.erb +21 -0
- data/spec/dummy/app/views/store/products/new.html.erb +5 -0
- data/spec/dummy/app/views/store/products/show.html.erb +5 -0
- data/spec/dummy/config/boot.rb +1 -1
- data/spec/dummy/config/environments/development.rb +2 -1
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/fixtures/example.jpg +0 -0
- data/spec/helpers/media_magick/application_helper_spec.rb +86 -33
- data/spec/lib/media_magick/controller/helper_spec.rb +40 -15
- data/spec/lib/media_magick/image/dimensions_spec.rb +62 -0
- data/spec/lib/media_magick/model_spec.rb +9 -3
- data/spec/views/_upload.html.erb_spec.rb +3 -3
- data/tmp/rspec_guard_result +1 -0
- metadata +52 -48
- data/app/views/_file.html.erb +0 -6
- data/app/views/_image.html.erb +0 -6
- data/app/views/_upload.html.erb +0 -12
- data/app/views/_video.html.erb +0 -8
@@ -4,7 +4,8 @@ class User
|
|
4
4
|
|
5
5
|
field :name, type: String
|
6
6
|
|
7
|
-
attaches_one :photo,
|
7
|
+
attaches_one :photo, uploader: PictureUploader
|
8
|
+
attaches_one :photo_and_video, uploader: PictureUploader, allow_videos: true
|
8
9
|
attaches_one :compound_name_file
|
9
10
|
attaches_one :file, type: :file
|
10
|
-
end
|
11
|
+
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require "media_magick/image/dimensions"
|
4
|
+
|
3
5
|
class PostUploader < CarrierWave::Uploader::Base
|
4
6
|
include CarrierWave::MiniMagick
|
7
|
+
include MediaMagick::Image::Dimensions
|
5
8
|
|
6
9
|
storage :file
|
7
10
|
|
@@ -9,9 +12,14 @@ class PostUploader < CarrierWave::Uploader::Base
|
|
9
12
|
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
10
13
|
end
|
11
14
|
|
12
|
-
process :resize_to_fill => [
|
15
|
+
# process :resize_to_fill => [960, 544]
|
16
|
+
|
13
17
|
version :thumb do
|
14
|
-
process :resize_to_fit => [
|
18
|
+
process :resize_to_fit => [250, 136]
|
19
|
+
end
|
20
|
+
|
21
|
+
version :big do
|
22
|
+
process :resize_to_limit => [864, 489]
|
15
23
|
end
|
16
24
|
|
17
|
-
end
|
25
|
+
end
|
@@ -22,13 +22,13 @@
|
|
22
22
|
|
23
23
|
<h3>uploads</h3>
|
24
24
|
<div class="field" style="overflow: hidden;">
|
25
|
-
<label>
|
25
|
+
<label>images and videos</label>
|
26
26
|
<%- if @post.new_record? -%>
|
27
27
|
create first
|
28
28
|
<%- else -%>
|
29
|
-
<%=
|
30
|
-
|
31
|
-
<%=
|
29
|
+
<%= attachment_uploader(@post, :images, :video) %>
|
30
|
+
<%= attachment_uploader(@post, :images, :image) %>
|
31
|
+
<%= attachment_loader(@post, :images) %>
|
32
32
|
<%- end -%>
|
33
33
|
</div>
|
34
34
|
|
@@ -37,7 +37,18 @@
|
|
37
37
|
<%- if @post.new_record? -%>
|
38
38
|
create first
|
39
39
|
<%- else -%>
|
40
|
-
<%=
|
40
|
+
<%= attachment_uploader(@post, :files, :file) %>
|
41
|
+
<%= attachment_loader(@post, :files) %>
|
42
|
+
<%- end -%>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<div class="field" style="overflow: hidden;">
|
46
|
+
<label>just videos</label>
|
47
|
+
<%- if @post.new_record? -%>
|
48
|
+
create first
|
49
|
+
<%- else -%>
|
50
|
+
<%= attachment_uploader(@post, :just_videos, :video) %>
|
51
|
+
<%= attachment_loader(@post, :just_videos) %>
|
41
52
|
<%- end -%>
|
42
53
|
</div>
|
43
54
|
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<td><%= post.text %></td>
|
16
16
|
<td><%= link_to 'Show', post %></td>
|
17
17
|
<td><%= link_to 'Edit', edit_post_path(post) %></td>
|
18
|
-
<td><%= link_to 'Destroy', post, confirm: 'Are you sure?'
|
18
|
+
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
19
19
|
</tr>
|
20
20
|
<% end %>
|
21
21
|
</table>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<%= form_for(@store_product) do |f| %>
|
2
|
+
<% if @store_product.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@store_product.errors.count, "error") %> prohibited this store_product from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @store_product.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
|
+
|
19
|
+
<h3>uploads</h3>
|
20
|
+
|
21
|
+
<div class="field">
|
22
|
+
<label>files</label>
|
23
|
+
<%- if @store_product.new_record? -%>
|
24
|
+
create first
|
25
|
+
<%- else -%>
|
26
|
+
<%= attachment_uploader(@store_product, :images, :image) %>
|
27
|
+
<%= attachment_loader(@store_product, :images) %>
|
28
|
+
<%- end -%>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="actions">
|
32
|
+
<%= f.submit %>
|
33
|
+
</div>
|
34
|
+
<% end %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<h1>Listing store_products</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th></th>
|
6
|
+
<th></th>
|
7
|
+
<th></th>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
<% @store_products.each do |store_product| %>
|
11
|
+
<tr>
|
12
|
+
<td><%= link_to 'Show', store_product %></td>
|
13
|
+
<td><%= link_to 'Edit', edit_store_product_path(store_product) %></td>
|
14
|
+
<td><%= link_to 'Destroy', store_product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
15
|
+
</tr>
|
16
|
+
<% end %>
|
17
|
+
</table>
|
18
|
+
|
19
|
+
<br />
|
20
|
+
|
21
|
+
<%= link_to 'New Product', new_store_product_path %>
|
data/spec/dummy/config/boot.rb
CHANGED
data/spec/dummy/config/routes.rb
CHANGED
Binary file
|
@@ -9,53 +9,78 @@ describe MediaMagick do
|
|
9
9
|
album.stub(id: '12345678')
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def uploader_container_html(model, relation, type, data_attributes, &block)
|
13
|
+
id = "#{model}-#{relation.to_s}-#{type.to_s}"
|
14
|
+
classes = "attachmentUploader"
|
15
|
+
|
16
|
+
content_tag(:div, nil, id: id, class: classes, data: data_attributes) do
|
17
|
+
class_eval(&block) if block_given?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def loader_container_html(model, relation, data_attributes, &block)
|
22
|
+
id = "#{model}-#{relation.to_s}-loadedAttachments"
|
23
|
+
classes = "#{relation.to_s} loadedAttachments"
|
24
|
+
|
25
|
+
content_tag(:div, nil, id: id, class: classes, data: data_attributes) do
|
14
26
|
class_eval(&block) if block_given?
|
15
27
|
end
|
16
28
|
end
|
17
29
|
|
18
30
|
context 'without block' do
|
19
31
|
before do
|
20
|
-
album.stub(id: '12345678')
|
32
|
+
# album.stub(id: '12345678')
|
21
33
|
|
22
34
|
helper.stub(:render)
|
23
35
|
end
|
24
36
|
|
25
|
-
it 'should
|
26
|
-
helper.
|
37
|
+
it 'should render /uploader partial' do
|
38
|
+
helper.should_receive(:render).with('/uploader')
|
39
|
+
|
40
|
+
helper.attachment_uploader(album, :photos, :image)
|
27
41
|
end
|
28
42
|
|
29
|
-
it 'should
|
30
|
-
|
43
|
+
it 'should create a div with data attributes' do
|
44
|
+
data_attributes = { id: 12345678, model: 'Album', relation: 'photos', partial: '/uploader' }
|
45
|
+
html = uploader_container_html('Album', 'photos', 'image', data_attributes)
|
31
46
|
|
32
|
-
helper.
|
47
|
+
helper.attachment_uploader(album, :photos, :image).should eq(html)
|
33
48
|
end
|
34
49
|
|
35
50
|
context 'using partials' do
|
36
|
-
it '
|
37
|
-
|
38
|
-
end
|
51
|
+
it 'creates a div with data-partial attribute' do
|
52
|
+
html = uploader_container_html('Album', 'photos', 'image', { id: 12345678, model: 'Album', relation: 'photos', partial: 'albums/photo'})
|
39
53
|
|
40
|
-
|
41
|
-
helper.should_receive(:render).with('/upload', model: album, relations: :photos, newAttachments: {}, loadedAttachments: {}, partial: 'albums/photo')
|
42
|
-
|
43
|
-
helper.attachment_container(album, :photos, partial: 'albums/photo')
|
54
|
+
helper.attachment_uploader(album, :photos, :image, partial: 'albums/photo').should eq(html)
|
44
55
|
end
|
45
|
-
end
|
46
56
|
|
47
|
-
|
48
|
-
|
49
|
-
|
57
|
+
it 'creates a div with data-loader_partial attribute' do
|
58
|
+
attrs = { id: 12345678, model: 'Album', relation: 'photos', partial: '/uploader', loader_partial: 'custom_loader'}
|
59
|
+
html = uploader_container_html('Album', 'photos', 'image', attrs)
|
60
|
+
|
61
|
+
helper.attachment_uploader(album, :photos, :image, loader_partial: 'custom_loader').should eq(html)
|
50
62
|
end
|
51
63
|
|
52
|
-
it '
|
53
|
-
helper.should_receive(:render).with('/
|
64
|
+
it 'includes partial option on data attributes' do
|
65
|
+
helper.should_receive(:render).with('albums/photo')
|
54
66
|
|
55
|
-
helper.
|
67
|
+
helper.attachment_uploader(album, :photos, :image, partial: 'albums/photo')
|
56
68
|
end
|
69
|
+
|
57
70
|
end
|
58
71
|
|
72
|
+
# context 'partial for images' do
|
73
|
+
# xit 'should create a div with data-partial attributes' do
|
74
|
+
# helper.attachment_container(album, :photos, as: 'file').should eq(uploader_container_html('album', 'photos', { id: 12345678, model: 'Album', relation: 'photos', partial: '/file'}))
|
75
|
+
# end
|
76
|
+
|
77
|
+
# xit 'should include partial option on data attributes' do
|
78
|
+
# helper.should_receive(:render).with('/upload', model: album, relations: :photos, newAttachments: {}, loadedAttachments: {}, partial: '/file')
|
79
|
+
|
80
|
+
# helper.attachment_container(album, :photos, as: 'file')
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
|
59
84
|
context 'embbeded models' do
|
60
85
|
let(:track) { album.tracks.new }
|
61
86
|
|
@@ -64,22 +89,24 @@ describe MediaMagick do
|
|
64
89
|
end
|
65
90
|
|
66
91
|
it 'should create a div with data-embedded-in-id and data-embedded-in-model attributes' do
|
67
|
-
|
92
|
+
html = uploader_container_html('Track', 'files', 'file', { id: 87654321, model: 'Track', embedded_in_id: 12345678, embedded_in_model: 'Album', relation: 'files', partial: '/uploader'})
|
93
|
+
|
94
|
+
helper.attachment_uploader(track, :files, :file, embedded_in: album).should eq(html)
|
68
95
|
end
|
69
96
|
|
70
|
-
|
71
|
-
helper.should_receive(:render).with('/upload', model: track, relations: :files, newAttachments: {}, loadedAttachments: {}, partial: '/
|
97
|
+
xit 'should render /upload partial' do
|
98
|
+
helper.should_receive(:render).with('/upload', model: track, relations: :files, newAttachments: {}, loadedAttachments: {}, partial: '/uploader')
|
72
99
|
|
73
100
|
helper.attachment_container(track, :files, embedded_in: album)
|
74
101
|
end
|
75
102
|
end
|
76
103
|
|
77
104
|
context 'customizing newAttachments element' do
|
78
|
-
|
79
|
-
helper.attachment_container(album, :photos, newAttachments: { class: 'thumbnails' }).should eq(
|
105
|
+
xit 'should create a div with data attributes' do
|
106
|
+
helper.attachment_container(album, :photos, newAttachments: { class: 'thumbnails' }).should eq(uploader_container_html('album', 'photos', { id: 12345678, model: 'Album', relation: 'photos', partial: '/image' }))
|
80
107
|
end
|
81
108
|
|
82
|
-
|
109
|
+
xit 'should render /upload partial with newAttachments attributes' do
|
83
110
|
helper.should_receive(:render).with('/upload', model: album, relations: :photos, newAttachments: { class: 'thumbnails' }, loadedAttachments: {}, partial: '/image')
|
84
111
|
|
85
112
|
helper.attachment_container(album, :photos, newAttachments: { class: 'thumbnails' })
|
@@ -87,11 +114,11 @@ describe MediaMagick do
|
|
87
114
|
end
|
88
115
|
|
89
116
|
context 'customizing loadedAttachments element' do
|
90
|
-
|
91
|
-
helper.attachment_container(album, :photos, loadedAttachments: { class: 'span3' }).should eq(
|
117
|
+
xit 'should create a div with data attributes' do
|
118
|
+
helper.attachment_container(album, :photos, loadedAttachments: { class: 'span3' }).should eq(uploader_container_html('album', 'photos', { id: 12345678, model: 'Album', relation: 'photos', partial: '/image' }))
|
92
119
|
end
|
93
120
|
|
94
|
-
|
121
|
+
xit 'should render /upload partial with loadedAttachments attributes' do
|
95
122
|
helper.should_receive(:render).with('/upload', model: album, relations: :photos, newAttachments: {}, loadedAttachments: { class: 'span3' }, partial: '/image')
|
96
123
|
|
97
124
|
helper.attachment_container(album, :photos, loadedAttachments: { class: 'span3' })
|
@@ -100,12 +127,38 @@ describe MediaMagick do
|
|
100
127
|
end
|
101
128
|
|
102
129
|
context 'with block' do
|
103
|
-
|
104
|
-
expected =
|
130
|
+
xit 'should create a div with data attributes and content inside' do
|
131
|
+
expected = uploader_container_html('album', 'photos', { id: 12345678, model: 'Album', relation: 'photos', partial: '/image' }) { 'template here' }
|
105
132
|
|
106
133
|
helper.attachment_container(album, :photos) { 'template here' }.should eq(expected)
|
107
134
|
end
|
108
135
|
end
|
136
|
+
|
137
|
+
context 'when model is inside a module' do
|
138
|
+
let(:model) { Store::Product.new }
|
139
|
+
|
140
|
+
before do
|
141
|
+
helper.stub(:render)
|
142
|
+
end
|
143
|
+
|
144
|
+
describe 'uploader' do
|
145
|
+
it 'converts string :: to - from model name to create id attribute' do
|
146
|
+
data_attributes = { id: model.id.to_s, model: 'Store::Product', relation: 'images', partial: '/uploader' }
|
147
|
+
html = uploader_container_html('Store-Product', 'images', 'image', data_attributes)
|
148
|
+
|
149
|
+
helper.attachment_uploader(model, :images, :image).should eq(html)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'loader' do
|
154
|
+
it 'converts string :: to - from model name to create id attribute' do
|
155
|
+
data_attributes = { id: model.id.to_s, model: 'Store::Product', relation: 'images', partial: '/loader' }
|
156
|
+
html = loader_container_html('Store-Product', :images, data_attributes)
|
157
|
+
|
158
|
+
helper.attachment_loader(model, :images).should eq(html)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
109
162
|
end
|
110
163
|
end
|
111
164
|
end
|
@@ -1,37 +1,62 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe MediaMagick::Controller::Helpers do
|
4
|
+
let(:controller) { Class.new }
|
5
|
+
|
4
6
|
before do
|
5
|
-
|
6
|
-
@controller.extend MediaMagick::Controller::Helpers
|
7
|
+
controller.extend MediaMagick::Controller::Helpers
|
7
8
|
end
|
8
9
|
|
9
10
|
describe "getting doc by params" do
|
10
|
-
|
11
|
-
|
12
|
-
@album = Album.create(tracks: [@track])
|
13
|
-
end
|
11
|
+
let(:track) { Track.new }
|
12
|
+
let!(:album) { Album.create(tracks: [track]) }
|
14
13
|
|
15
14
|
context "document is embedded" do
|
16
15
|
it "should get parent by params" do
|
17
16
|
params = {
|
18
|
-
:embedded_in_model => "album",
|
19
|
-
:embedded_in_id => "#{
|
20
|
-
:model => "track",
|
21
|
-
:model_id => "#{
|
17
|
+
:embedded_in_model => "album",
|
18
|
+
:embedded_in_id => "#{album.id.to_s}",
|
19
|
+
:model => "track",
|
20
|
+
:model_id => "#{track.id.to_s}"
|
22
21
|
}
|
23
|
-
|
22
|
+
controller.find_doc_by_params(params).should eq(track)
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
context "document is root" do
|
28
27
|
it "should get parent by params" do
|
29
28
|
params = {
|
30
|
-
:model => "album",
|
31
|
-
:model_id => "#{
|
29
|
+
:model => "album",
|
30
|
+
:model_id => "#{album.id.to_s}"
|
32
31
|
}
|
33
|
-
|
32
|
+
controller.find_doc_by_params(params).should eq(album)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "creating video" do
|
38
|
+
context "relation is attaches many" do
|
39
|
+
let(:video_url) { "youtube.com/watch?v=FfUHkPf9D9k" }
|
40
|
+
let!(:album) { Album.create }
|
41
|
+
|
42
|
+
it "should create video" do
|
43
|
+
params = {relation: "photos_and_videos", video: video_url}
|
44
|
+
|
45
|
+
controller.create_video(album, params).should be_true
|
46
|
+
album.reload.photos_and_videos.first.video.should eq(video_url)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "relation is attaches one" do
|
51
|
+
let(:video_url) { "youtube.com/watch?v=FfUHkPf9D9k" }
|
52
|
+
let!(:user) { User.create }
|
53
|
+
|
54
|
+
it "should create video" do
|
55
|
+
params = {relation: "photo_and_video", video: video_url}
|
56
|
+
|
57
|
+
controller.create_video(user, params).should be_true
|
58
|
+
user.reload.photo_and_video.video.should eq(video_url)
|
34
59
|
end
|
35
60
|
end
|
36
61
|
end
|
37
|
-
end
|
62
|
+
end
|