attachment_magick 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/.gitignore +12 -0
  2. data/Gemfile +15 -0
  3. data/Gemfile.lock +159 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +98 -0
  6. data/Rakefile +13 -0
  7. data/app/controllers/attachment_magick/images_controller.rb +50 -0
  8. data/app/helpers/attachment_magick/attachment_magick_helper.rb +57 -0
  9. data/app/models/attachment_magick/active_record_image.rb +18 -0
  10. data/app/models/attachment_magick/mongoid_image.rb +29 -0
  11. data/app/views/layouts/attachment_magick/images/_add_image.html.erb +18 -0
  12. data/app/views/layouts/attachment_magick/images/_video_upload.html.erb +2 -0
  13. data/attachment_magick.gemspec +25 -0
  14. data/lib/attachment_magick/configuration/configuration.rb +28 -0
  15. data/lib/attachment_magick/configuration/custom_style.rb +19 -0
  16. data/lib/attachment_magick/dragonfly/init.rb +20 -0
  17. data/lib/attachment_magick/dsl.rb +37 -0
  18. data/lib/attachment_magick/railtie.rb +10 -0
  19. data/lib/attachment_magick/test/attachment_magick_test_helper.rb +43 -0
  20. data/lib/attachment_magick/version.rb +3 -0
  21. data/lib/attachment_magick.rb +78 -0
  22. data/lib/generators/attachment_magick/install_generator.rb +15 -0
  23. data/lib/generators/attachment_magick/migration_generator.rb +17 -0
  24. data/lib/generators/attachment_magick/templates/attachment_magick_migration.rb +18 -0
  25. data/lib/generators/attachment_magick/templates/public/javascripts/swfupload/handlers.js +384 -0
  26. data/lib/generators/attachment_magick/templates/public/javascripts/swfupload/swfupload.js +1132 -0
  27. data/lib/generators/attachment_magick/templates/public/javascripts/swfupload/swfupload.swf +0 -0
  28. data/lib/generators/attachment_magick/templates/public/stylesheets/attachment_magick.css +10 -0
  29. data/lib/generators/attachment_magick/templates/public/stylesheets/swfupload.css +108 -0
  30. data/test/attachment_magick/controllers/images_controller_test.rb +67 -0
  31. data/test/attachment_magick/generators/install_generator_test.rb +34 -0
  32. data/test/attachment_magick/generators/migration_generator_test.rb +16 -0
  33. data/test/attachment_magick/helpers/attachment_magick_test.rb +56 -0
  34. data/test/attachment_magick/units/artist_test.rb +11 -0
  35. data/test/attachment_magick/units/attachment_magick_test.rb +105 -0
  36. data/test/attachment_magick/units/image_test.rb +26 -0
  37. data/test/attachment_magick/units/place_test.rb +8 -0
  38. data/test/dummy/Rakefile +7 -0
  39. data/test/dummy/app/controllers/application_controller.rb +4 -0
  40. data/test/dummy/app/controllers/artists_controller.rb +34 -0
  41. data/test/dummy/app/controllers/places_controller.rb +34 -0
  42. data/test/dummy/app/controllers/works_controller.rb +37 -0
  43. data/test/dummy/app/helpers/application_helper.rb +2 -0
  44. data/test/dummy/app/helpers/artists_helper.rb +2 -0
  45. data/test/dummy/app/helpers/places_helper.rb +2 -0
  46. data/test/dummy/app/helpers/works_helper.rb +2 -0
  47. data/test/dummy/app/models/artist.rb +20 -0
  48. data/test/dummy/app/models/place.rb +8 -0
  49. data/test/dummy/app/models/work.rb +13 -0
  50. data/test/dummy/app/views/artists/_form.html.erb +29 -0
  51. data/test/dummy/app/views/artists/edit.html.erb +1 -0
  52. data/test/dummy/app/views/artists/index.html.erb +39 -0
  53. data/test/dummy/app/views/artists/new.html.erb +1 -0
  54. data/test/dummy/app/views/layouts/_custom_images_list.html.erb +6 -0
  55. data/test/dummy/app/views/layouts/application.html.erb +27 -0
  56. data/test/dummy/app/views/places/_form.html.erb +12 -0
  57. data/test/dummy/app/views/places/edit.html.erb +1 -0
  58. data/test/dummy/app/views/places/index.html.erb +32 -0
  59. data/test/dummy/app/views/places/new.html.erb +1 -0
  60. data/test/dummy/app/views/works/_form.html.erb +18 -0
  61. data/test/dummy/app/views/works/edit.html.erb +1 -0
  62. data/test/dummy/app/views/works/index.html.erb +32 -0
  63. data/test/dummy/app/views/works/new.html.erb +1 -0
  64. data/test/dummy/config/application.rb +24 -0
  65. data/test/dummy/config/boot.rb +10 -0
  66. data/test/dummy/config/database.yml +22 -0
  67. data/test/dummy/config/environment.rb +5 -0
  68. data/test/dummy/config/environments/development.rb +26 -0
  69. data/test/dummy/config/environments/production.rb +49 -0
  70. data/test/dummy/config/environments/test.rb +35 -0
  71. data/test/dummy/config/initializers/attachment_magick_setup.rb +12 -0
  72. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  73. data/test/dummy/config/initializers/inflections.rb +10 -0
  74. data/test/dummy/config/initializers/mime_types.rb +5 -0
  75. data/test/dummy/config/initializers/secret_token.rb +7 -0
  76. data/test/dummy/config/initializers/session_store.rb +8 -0
  77. data/test/dummy/config/locales/en.yml +5 -0
  78. data/test/dummy/config/mongoid.yml +18 -0
  79. data/test/dummy/config/routes.rb +15 -0
  80. data/test/dummy/config.ru +4 -0
  81. data/test/dummy/db/migrate/20110310155855_create_places.rb +13 -0
  82. data/test/dummy/db/migrate/20110310210525_attachment_magick_migration.rb +18 -0
  83. data/test/dummy/db/schema.rb +33 -0
  84. data/test/dummy/public/404.html +26 -0
  85. data/test/dummy/public/422.html +26 -0
  86. data/test/dummy/public/500.html +26 -0
  87. data/test/dummy/public/favicon.ico +0 -0
  88. data/test/dummy/public/images/little_girl.jpg +0 -0
  89. data/test/dummy/public/images/swfupload/cancelbutton.gif +0 -0
  90. data/test/dummy/public/javascripts/application.js +60 -0
  91. data/test/dummy/public/javascripts/jquery-ui.js +763 -0
  92. data/test/dummy/public/javascripts/jquery.js +7179 -0
  93. data/test/dummy/public/javascripts/jquery.min.js +167 -0
  94. data/test/dummy/public/javascripts/rails.js +137 -0
  95. data/test/dummy/public/javascripts/swfupload/handlers.js +384 -0
  96. data/test/dummy/public/javascripts/swfupload/swfupload.js +1132 -0
  97. data/test/dummy/public/javascripts/swfupload/swfupload.swf +0 -0
  98. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  99. data/test/dummy/public/stylesheets/attachment_magick.css +10 -0
  100. data/test/dummy/public/stylesheets/grid.css +491 -0
  101. data/test/dummy/public/stylesheets/swfupload.css +108 -0
  102. data/test/dummy/public/stylesheets/text.css +15 -0
  103. data/test/dummy/script/rails +6 -0
  104. data/test/integration/navigation_test.rb +7 -0
  105. data/test/support/integration_case.rb +5 -0
  106. data/test/test_helper.rb +48 -0
  107. metadata +283 -0
@@ -0,0 +1,10 @@
1
+ .thumbnails {margin-top:5px; font-size: 12px; line-height: 16px; font-family: Helvetica, Arial, Sans-serif; color:#000;}
2
+ .thumbnails h4 {margin:15px 0px 15px 0px; border-top:2px solid #CCC;}
3
+ .attachment_magick_image {border-bottom: 1px solid #CCC; margin:15px 0px 0px 0px; clear:left; padding: 3px 3px 3px 3px;cursor:pointer;}
4
+ .attachment_magick_image:hover {background:#EEE;}
5
+
6
+ .attachment_magick_image p {margin:0px;}
7
+ .attachment_magick_image a {float:right;}
8
+ .attachment_magick_image input[type="text"] {width:inherit; font-family:inherit; font-size:1em; border:1px solid #999; -webkit-border-radius:3px; -moz-border-radius:3px; margin-left:-2px;}
9
+
10
+ .grid_19 img {margin-left:5px; margin-right:5px;}
@@ -0,0 +1,108 @@
1
+
2
+
3
+ #btnSubmit { margin: 0 0 0 155px ; }
4
+ /* -- Table Styles ------------------------------- */
5
+ td {
6
+ font: 10pt Helvetica, Arial, sans-serif;
7
+ vertical-align: top;
8
+ }
9
+
10
+ .progressWrapper {
11
+ overflow: hidden;
12
+ }
13
+
14
+ .progressContainer {
15
+ margin-bottom: 5px;
16
+ padding: 4px;
17
+ border: solid 1px #E8E8E8;
18
+ background-color: #F7F7F7;
19
+ overflow: hidden;
20
+ }
21
+ /* Message */
22
+ .message {
23
+ margin: 1em 0;
24
+ padding: 10px 20px;
25
+ border: solid 1px #FFDD99;
26
+ background-color: #FFFFCC;
27
+ overflow: hidden;
28
+ }
29
+ /* Error */
30
+ .red {
31
+ border: solid 1px #B50000;
32
+ background-color: #FFEBEB;
33
+ }
34
+
35
+ /* Current */
36
+ .green {
37
+ border: solid 1px #DDF0DD;
38
+ background-color: #EBFFEB;
39
+ }
40
+
41
+ /* Complete */
42
+ .blue {
43
+ border: solid 1px #CEE2F2;
44
+ background-color: #F0F5FF;
45
+ }
46
+
47
+ .progressName {
48
+ font-size: 8pt;
49
+ font-weight: 700;
50
+ color: #555;
51
+ width: 323px;
52
+ height: 14px;
53
+ text-align: left;
54
+ white-space: nowrap;
55
+ overflow: hidden;
56
+ }
57
+
58
+ .progressBarInProgress,
59
+ .progressBarComplete,
60
+ .progressBarError {
61
+ font-size: 0;
62
+ width: 0%;
63
+ height: 2px;
64
+ background-color: blue;
65
+ margin-top: 2px;
66
+ }
67
+
68
+ .progressBarComplete {
69
+ width: 100%;
70
+ background-color: green;
71
+ visibility: hidden;
72
+ }
73
+
74
+ .progressBarError {
75
+ width: 100%;
76
+ background-color: red;
77
+ visibility: hidden;
78
+ }
79
+
80
+ .progressBarStatus {
81
+ margin-top: 2px;
82
+ width: 337px;
83
+ font-size: 7pt;
84
+ font-family: Arial;
85
+ text-align: left;
86
+ white-space: nowrap;
87
+ }
88
+
89
+ a.progressCancel {
90
+ font-size: 0;
91
+ display: block;
92
+ height: 14px;
93
+ width: 14px;
94
+ background-image: url(/images/swfupload/cancelbutton.gif);
95
+ background-repeat: no-repeat;
96
+ background-position: -14px 0px;
97
+ float: right;
98
+ }
99
+
100
+ a.progressCancel:hover {
101
+ background-position: 0px 0px;
102
+ }
103
+
104
+
105
+ /* -- SWFUpload Object Styles ------------------------------- */
106
+ .swfupload {
107
+ vertical-align: top;
108
+ }
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ class AttachmentMagick::ImagesControllerTest < ActionController::TestCase
4
+
5
+ setup do
6
+ create_artist
7
+ create_work(@artist)
8
+ create_place
9
+ end
10
+
11
+ test "should create artist image" do
12
+ post :create, artist_hash.merge({ :Filedata => exemple_file })
13
+ assert_response :success
14
+ assert assert_element_in(response.body, "img")
15
+ end
16
+
17
+ test "should create work image" do
18
+ post :create, work_hash.merge({ :Filedata => exemple_file })
19
+ assert_response :success
20
+ assert assert_element_in(response.body, "img")
21
+ end
22
+
23
+ test "should create place image" do
24
+ post :create, place_hash.merge({ :Filedata => exemple_file })
25
+ assert_response :success
26
+ assert assert_element_in(response.body, "img")
27
+ end
28
+
29
+ test "should update priority order" do
30
+ 4.times{ @artist.images.create(:photo => exemple_file) }
31
+ @artist.save
32
+ @artist.reload
33
+
34
+ image_first = @artist.images.first
35
+ image_last = @artist.images.last
36
+
37
+ post :update_sortable, artist_hash.merge({ :images => @artist.images.map(&:id).reverse })
38
+
39
+ @artist.reload
40
+
41
+ assert_equal image_first, @artist.images.order_by(:priority.asc).last
42
+ assert_equal image_last, @artist.images.order_by(:priority.asc).first
43
+ end
44
+
45
+ test "should destroy image" do
46
+ get :destroy, artist_hash.merge({ :id => @artist.images.first.to_param })
47
+
48
+ @artist.reload
49
+ assert_response :success
50
+ assert_nil @artist.images.first
51
+ end
52
+
53
+
54
+ private
55
+
56
+ def artist_hash
57
+ {:data_attachment => "#{@artist.class.name}_#{@artist.id}"}
58
+ end
59
+
60
+ def work_hash
61
+ {:data_attachment => "#{@artist.class.name}_#{@artist.id}_works_#{@artist.works.last.id}", :data_partial => exemple_partial}
62
+ end
63
+
64
+ def place_hash
65
+ {:data_attachment => "#{@place.class.name}_#{@place.id}"}
66
+ end
67
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class InstallGeneratorTest < Rails::Generators::TestCase
4
+ tests AttachmentMagick::Generators::InstallGenerator
5
+ destination File.expand_path("../../tmp", __FILE__)
6
+
7
+ setup do
8
+ prepare_destination
9
+ create_route_file
10
+ end
11
+
12
+ test "Assert all files are properly created" do
13
+ run_generator
14
+
15
+ assert_file "public/javascripts/swfupload/handlers.js"
16
+ assert_file "public/javascripts/swfupload/swfupload.js"
17
+ assert_file "public/javascripts/swfupload/swfupload.swf"
18
+ assert_file "public/stylesheets/swfupload.css"
19
+ assert_file "public/stylesheets/attachment_magick.css"
20
+
21
+ assert_file "config/routes.rb" do |route|
22
+ assert_match /'attachment_magick\/images#create'/, route
23
+ assert_match /'attachment_magick\/images#update_sortable'/, route
24
+ assert_match /'attachment_magick\/images#destroy'/, route
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def create_route_file
31
+ mkdir File.join(InstallGeneratorTest.destination_root, 'config')
32
+ copy_file File.join(InstallGeneratorTest.destination_root, '../../dummy/config/routes.rb'), File.join(InstallGeneratorTest.destination_root, 'config/routes.rb')
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class MigrationGeneratorTest < Rails::Generators::TestCase
4
+ tests AttachmentMagick::Generators::MigrationGenerator
5
+ destination File.expand_path("../../tmp", __FILE__)
6
+
7
+ setup do
8
+ prepare_destination
9
+ end
10
+
11
+ test "Assert all files are properly created" do
12
+ run_generator
13
+
14
+ assert Dir["#{File.expand_path("../../tmp", __FILE__)}/**/*.rb"].first.include?("attachment_magick_migration.rb")
15
+ end
16
+ end
@@ -0,0 +1,56 @@
1
+ require "test_helper"
2
+
3
+ class AttachmentMagick::AttachmentMagickHelperTest < ActionView::TestCase
4
+ setup do
5
+ create_artist
6
+ create_work(@artist)
7
+ create_place
8
+ end
9
+
10
+ def test_attachment_progress_container
11
+ html = attachment_progress_container(@artist)
12
+ assert assert_element_in(html, "div[@id='attachmentProgressContainer']")
13
+ assert assert_element_in(html, "span[@id='attachmentButton']")
14
+ assert assert_element_in(html, "input[@id='attachmentmagick_key']")
15
+ assert_equal "Artist_#{@artist.id}", assert_element_value(html, "input[@id='attachmentmagick_key']", "data_attachment")
16
+
17
+ html = attachment_progress_container(@artist.works.first)
18
+ assert assert_element_in(html, "div[@id='attachmentProgressContainer']")
19
+ assert assert_element_in(html, "span[@id='attachmentButton']")
20
+ assert assert_element_in(html, "input[@id='attachmentmagick_key']")
21
+ assert_equal "Artist_#{@artist.id}_works_#{@artist.works.first.id}", assert_element_value(html, "input[@id='attachmentmagick_key']", "data_attachment")
22
+
23
+ html = attachment_progress_container(@place)
24
+ assert assert_element_in(html, "div[@id='attachmentProgressContainer']")
25
+ assert assert_element_in(html, "span[@id='attachmentButton']")
26
+ assert assert_element_in(html, "input[@id='attachmentmagick_key']")
27
+ assert_equal "Place_#{@place.id}", assert_element_value(html, "input[@id='attachmentmagick_key']", "data_attachment")
28
+ end
29
+
30
+ def test_attachment_for_view
31
+ html = attachment_for_view(@artist)
32
+ assert assert_element_in(html, "a[@class='remove_image']")
33
+ assert assert_element_in(html, "input[@id='image_id']")
34
+
35
+ html = attachment_for_view(@artist, exemple_partial)
36
+ assert assert_element_in(html, "div[@class='image_caption']")
37
+ assert assert_element_in(html, "div[@class='image_thumb']")
38
+ assert assert_element_in(html, "img")
39
+
40
+ html = attachment_for_view(@place)
41
+ assert assert_element_in(html, "a[@class='remove_image']")
42
+ assert assert_element_in(html, "input[@id='image_id']")
43
+
44
+ html = attachment_for_view(@place, exemple_partial)
45
+ assert assert_element_in(html, "div[@class='image_caption']")
46
+ assert assert_element_in(html, "div[@class='image_thumb']")
47
+ assert assert_element_in(html, "img")
48
+ end
49
+
50
+ def test_attachment_for_video
51
+ html = attachment_for_video
52
+
53
+ assert assert_element_in(html, "input")
54
+ assert assert_element_in(html, "a[@class='video_upload']")
55
+ end
56
+ end
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class ArtistTest < ActiveSupport::TestCase
4
+ def test_access_grid_method
5
+ assert_equal "36x36", Artist.style_thumb
6
+ assert_equal "54x", Artist.style_grid_1
7
+ assert_equal "150x", Artist.style_grid_10
8
+ assert_equal "200x300#", Artist.style_grid_15
9
+ assert_equal "909x230#", Artist.style_grid_16
10
+ end
11
+ end
@@ -0,0 +1,105 @@
1
+ require 'test_helper'
2
+ require 'open-uri'
3
+
4
+ class AttachmentMagickTest < ActiveSupport::TestCase
5
+
6
+ class Dog
7
+ include Mongoid::Document
8
+ include AttachmentMagick
9
+
10
+ field :name
11
+
12
+ attachment_magick do
13
+ grid_1
14
+ end
15
+ end
16
+
17
+ class Cat
18
+ include Mongoid::Document
19
+ include AttachmentMagick
20
+
21
+ field :name
22
+
23
+ attachment_magick do
24
+ grid_1 "300x150"
25
+ end
26
+ end
27
+
28
+ test "deveria manter o valor do grid original" do
29
+ assert_equal "300x150#", Cat.style_grid_1
30
+ assert_equal "54x", Dog.style_grid_1
31
+ end
32
+
33
+ def test_has_attachment_magick
34
+ grids = Artist.send(:generate_grids)
35
+
36
+ Artist.attachment_magick do
37
+ grid_1
38
+ grid_5 "120x240"
39
+ grid_7 :height => 200
40
+ grid_10 :height => 200, :width => 100
41
+ end
42
+
43
+ assert_equal [:grid_1, :grid_5, :grid_7, :grid_10], order_array(Artist.attachment_magick_default_options[:styles].keys)
44
+
45
+ assert_equal grids[:grid_1][:width], Artist.attachment_magick_default_options[:styles][:grid_1][:width]
46
+ assert_equal grids[:grid_1][:height], Artist.attachment_magick_default_options[:styles][:grid_1][:height]
47
+
48
+ assert_equal 120, Artist.attachment_magick_default_options[:styles][:grid_5][:width]
49
+ assert_equal 240, Artist.attachment_magick_default_options[:styles][:grid_5][:height]
50
+
51
+ assert_equal grids[:grid_7][:width], Artist.attachment_magick_default_options[:styles][:grid_7][:width]
52
+ assert_equal 200, Artist.attachment_magick_default_options[:styles][:grid_7][:height]
53
+
54
+ assert_equal 100, Artist.attachment_magick_default_options[:styles][:grid_10][:width]
55
+ assert_equal 200, Artist.attachment_magick_default_options[:styles][:grid_10][:height]
56
+ end
57
+
58
+ def test_generate_grids
59
+ column_width = 29
60
+ column_amount = 10
61
+ gutter = 3
62
+
63
+ grid_system = open("http://www.spry-soft.com/grids/grid/?column_width=#{column_width}&column_amount=#{column_amount}&gutter_width=#{gutter}") { |url| Hpricot(url) }
64
+ grids = Artist.send(:generate_grids, column_amount, column_width, gutter)
65
+
66
+ assert_equal grids.size, column_amount + AttachmentMagick.configuration.custom_styles.styles.size
67
+
68
+ grids.keys.each do |key|
69
+ assert_equal grids[key][:width], grid_system.search(".#{key} p").first.inner_html.gsub(/\D/, "").to_i if key.to_s.include?("grid")
70
+ end
71
+ end
72
+
73
+ def test_setup
74
+ AttachmentMagick.setup do |config|
75
+ config.columns_amount = 19
76
+ config.columns_width = 54
77
+ config.gutter = 3
78
+
79
+ config.custom_styles do
80
+ small "36x46"
81
+ full :width => 1024
82
+ end
83
+ end
84
+
85
+ Artist.attachment_magick do
86
+ small
87
+ full
88
+ end
89
+
90
+ assert_equal 19, AttachmentMagick.configuration.columns_amount
91
+ assert_equal 54, AttachmentMagick.configuration.columns_width
92
+ assert_equal 3, AttachmentMagick.configuration.gutter
93
+
94
+ assert_equal 36, Artist.attachment_magick_default_options[:styles][:small][:width]
95
+ assert_equal 46, Artist.attachment_magick_default_options[:styles][:small][:height]
96
+
97
+ assert_equal 1024, Artist.attachment_magick_default_options[:styles][:full][:width]
98
+ end
99
+
100
+ private
101
+
102
+ def order_array(array)
103
+ array.sort{|x, y| x.to_s.split("_")[1].to_i <=> y.to_s.split("_")[1].to_i}
104
+ end
105
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class AttachmentMagick::ImageTest < ActiveSupport::TestCase
4
+ setup do
5
+ create_artist
6
+ create_place
7
+ end
8
+
9
+ def test_create_thumb_for_vimeo_in_a_new_field
10
+ @artist_image = @artist.images.create({:source => 'http://vimeo.com/14074949'})
11
+ @place_image = @place.images.create({:source => 'http://vimeo.com/14074949'})
12
+
13
+ assert_equal %'<iframe src=\"http://player.vimeo.com/video/14074949?title=0&byline=0&portrait=0\" width=\"620\" height=\"465\" frameborder=\"0\"></iframe>', @artist_image.source_to_html
14
+ assert_equal 'http://b.vimeocdn.com/ts/937/359/93735969_640.jpg', @artist_image.source_to_image
15
+ assert_equal %'<iframe src=\"http://player.vimeo.com/video/14074949?title=0&byline=0&portrait=0\" width=\"620\" height=\"465\" frameborder=\"0\"></iframe>', @place_image.source_to_html
16
+ assert_equal 'http://b.vimeocdn.com/ts/937/359/93735969_640.jpg', @place_image.source_to_image
17
+
18
+ @artist_image = @artist.images.create({:source => 'http://www.youtube.com/watch?v=FUe83k3t_0s'})
19
+ @place_image = @place.images.create({:source => 'http://www.youtube.com/watch?v=FUe83k3t_0s'})
20
+
21
+ assert_equal %'<iframe class="youtube-player" type="text/html" width="620" height="465" src="http://www.youtube.com/embed/FUe83k3t_0s" frameborder="0">\n</iframe>', @artist_image.source_to_html
22
+ assert_equal 'http://i1.ytimg.com/vi/FUe83k3t_0s/default.jpg', @artist_image.source_to_image
23
+ assert_equal %'<iframe class="youtube-player" type="text/html" width="620" height="465" src="http://www.youtube.com/embed/FUe83k3t_0s" frameborder="0">\n</iframe>', @place_image.source_to_html
24
+ assert_equal 'http://i1.ytimg.com/vi/FUe83k3t_0s/default.jpg', @place_image.source_to_image
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class PlaceTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+ require 'rake'
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,4 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ helper :all
4
+ end
@@ -0,0 +1,34 @@
1
+ class ArtistsController < ApplicationController
2
+ before_filter :load_artist, :only => [:edit, :update, :destroy]
3
+
4
+ def index
5
+ @artists = Artist.all
6
+ end
7
+
8
+ def new
9
+ @artist = Artist.new
10
+ end
11
+
12
+ def create
13
+ @artist = Artist.new(params[:artist])
14
+ @artist.save
15
+
16
+ redirect_to edit_artist_path(@artist)
17
+ end
18
+
19
+ def update
20
+ @artist.update_attributes(params[:artist])
21
+ redirect_to edit_artist_path(@artist)
22
+ end
23
+
24
+ def destroy
25
+ @artist.destroy
26
+ redirect_to artists_path
27
+ end
28
+
29
+ private
30
+
31
+ def load_artist
32
+ @artist = Artist.find(params[:id])
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ class PlacesController < ApplicationController
2
+ before_filter :load_place, :only => [:edit, :update, :destroy]
3
+
4
+ def index
5
+ @places = Place.all
6
+ end
7
+
8
+ def new
9
+ @place = Place.new
10
+ end
11
+
12
+ def create
13
+ @place = Place.new(params[:place])
14
+ @place.save
15
+
16
+ redirect_to edit_place_path(@place)
17
+ end
18
+
19
+ def update
20
+ @place.update_attributes(params[:place])
21
+ redirect_to edit_place_path(@place)
22
+ end
23
+
24
+ def destroy
25
+ @place.destroy
26
+ redirect_to places_path
27
+ end
28
+
29
+ private
30
+
31
+ def load_place
32
+ @place = Place.find(params[:id])
33
+ end
34
+ end
@@ -0,0 +1,37 @@
1
+ class WorksController < ApplicationController
2
+ before_filter :load_artist
3
+
4
+ def index
5
+ @works = @artist.works
6
+ end
7
+
8
+ def new
9
+ @work = @artist.works.build
10
+ end
11
+
12
+ def edit
13
+ @work = @artist.works.find(params[:id])
14
+ end
15
+
16
+ def create
17
+ @work = @artist.works.create(params[:work])
18
+ redirect_to edit_artist_work_path(@artist, @work)
19
+ end
20
+
21
+ def update
22
+ @work = @artist.works.find(params[:id])
23
+ @work.update_attributes(params[:work])
24
+ redirect_to edit_artist_work_path(@artist, @work)
25
+ end
26
+
27
+ def destroy
28
+ @artist.works.find(params[:id]).destroy
29
+ redirect_to artists_path
30
+ end
31
+
32
+ private
33
+
34
+ def load_artist
35
+ @artist = Artist.find(params[:artist_id])
36
+ end
37
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module ArtistsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module PlacesHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module WorksHelper
2
+ end
@@ -0,0 +1,20 @@
1
+ class Artist
2
+ include Mongoid::Document
3
+ include AttachmentMagick
4
+
5
+ field :name
6
+ field :lastname
7
+ embeds_many :works
8
+
9
+ validates_presence_of :name, :lastname
10
+
11
+ attachment_magick do
12
+ grid_1
13
+ grid_10 :width => 150
14
+ grid_15 "200x300"
15
+ grid_16 :height => 230
16
+ thumb :crop => false
17
+ fullscreen
18
+ publisher
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ class Place < ActiveRecord::Base
2
+ include AttachmentMagick
3
+
4
+ attachment_magick do
5
+ grid_3
6
+ publisher
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ class Work
2
+ include Mongoid::Document
3
+ include AttachmentMagick
4
+
5
+ field :name
6
+ field :local
7
+ embedded_in :artist, :inverse_of => :works
8
+
9
+ attachment_magick do
10
+ grid_5
11
+ publisher
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ <%unless @artist.new_record?%>
2
+ <div class="grid_3 tpush_2">
3
+ <%= link_to "Novo trabalho", new_artist_work_path(@artist)%>
4
+ <br />
5
+ <br />
6
+ <span>trabalhos</span>
7
+ <%@artist.works.each do |work|%>
8
+ <br />
9
+ <%=link_to work.name, edit_artist_work_path(@artist, work)%>
10
+ <% end %>
11
+ </div>
12
+
13
+ <div class="grid_13 tpush_2">
14
+ <%=form_for @artist, :html => {:multipart => true} do |form|%>
15
+ <%=form.label :name%>
16
+ <%=form.text_field :name%>
17
+
18
+ <%=form.label :lastname%>
19
+ <%=form.text_field :lastname%>
20
+ <%=form.submit%>
21
+ <br />
22
+ <br />
23
+
24
+ <%= attachment_progress_container @artist%>
25
+ <%= attachment_for_view @artist%>
26
+ <%= attachment_for_video%>
27
+ <% end %>
28
+ </div>
29
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>