refinerycms-images 2.1.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/refinery/admin/images_controller.rb +62 -49
  3. data/app/helpers/refinery/admin/images_helper.rb +6 -6
  4. data/app/models/refinery/image.rb +16 -61
  5. data/app/models/refinery/thumbnail_dimensions.rb +97 -0
  6. data/app/views/refinery/admin/images/_actions.html.erb +6 -7
  7. data/app/views/refinery/admin/images/_form.html.erb +30 -12
  8. data/app/views/refinery/admin/images/_grid_view.html.erb +9 -16
  9. data/app/views/refinery/admin/images/_list_view.html.erb +4 -4
  10. data/app/views/refinery/admin/images/_list_view_image.html.erb +24 -15
  11. data/app/views/refinery/admin/images/index.html.erb +3 -3
  12. data/app/views/refinery/admin/images/insert.html.erb +1 -1
  13. data/config/locales/ca.yml +44 -0
  14. data/config/locales/cs.yml +5 -0
  15. data/config/locales/de.yml +5 -0
  16. data/config/locales/en.yml +4 -0
  17. data/config/locales/fr.yml +4 -0
  18. data/config/locales/it.yml +4 -14
  19. data/config/locales/nl.yml +1 -1
  20. data/config/routes.rb +1 -1
  21. data/db/migrate/20140814073957_add_title_and_alt_to_refinery_images.rb +8 -0
  22. data/db/migrate/20150430171341_translate_refinery_images.rb +22 -0
  23. data/lib/generators/refinery/images/templates/config/initializers/refinery/images.rb.erb +2 -5
  24. data/lib/refinery/images.rb +4 -1
  25. data/lib/refinery/images/configuration.rb +4 -6
  26. data/lib/refinery/images/dragonfly.rb +38 -27
  27. data/lib/refinery/images/engine.rb +2 -3
  28. data/license.md +1 -1
  29. data/refinerycms-images.gemspec +6 -3
  30. data/spec/factories/image.rb +6 -2
  31. data/spec/features/refinery/admin/images_spec.rb +49 -136
  32. data/spec/lib/generators/refinery/images/images_generator_spec.rb +1 -1
  33. data/spec/lib/refinery/images/dragonfly_spec.rb +34 -0
  34. data/spec/models/refinery/image_spec.rb +81 -43
  35. data/spec/models/refinery/thumbnail_dimensions_spec.rb +18 -0
  36. data/spec/support/shared contexts/admin_images_tab.rb +17 -0
  37. data/spec/support/shared contexts/many_images.rb +5 -0
  38. data/spec/support/shared contexts/no_images.rb +3 -0
  39. data/spec/support/shared contexts/one_image.rb +3 -0
  40. data/spec/support/shared contexts/visual_editor_add_image.rb +31 -0
  41. data/spec/support/shared examples/image_deleter.rb +31 -0
  42. data/spec/support/shared examples/image_editor.rb +3 -0
  43. data/spec/support/shared examples/image_indexer.rb +118 -0
  44. data/spec/support/shared examples/image_inserter.rb +53 -0
  45. data/spec/support/shared examples/image_previewer.rb +41 -0
  46. data/spec/support/shared examples/image_translator.rb +31 -0
  47. data/spec/support/shared examples/image_uploader.rb +37 -0
  48. data/spec/support/spec_helper.rb +19 -0
  49. data/test.html +126 -0
  50. metadata +64 -9
@@ -1,9 +1,11 @@
1
- <%= form_for @image, :url => (@url_override or @image.persisted? ? refinery.admin_image_path(@image) : refinery.admin_images_path),
2
- :html => { :multipart => true } do |f| %>
1
+ <%= form_for @image, url: (@url_override or @image.persisted? ? refinery.admin_image_path(@image) : refinery.admin_images_path),
2
+ html: { multipart: true } do |f| %>
3
3
 
4
4
  <%= render '/refinery/admin/error_messages',
5
- :object => @image,
6
- :include_object_name => false %>
5
+ object: @image,
6
+ include_object_name: false %>
7
+
8
+ <%= render '/refinery/admin/locale_picker', :current_locale => Globalize.locale if @image.persisted? %>
7
9
 
8
10
  <div class="field">
9
11
  <% if action_name =~ /(edit)|(update)/ %>
@@ -16,21 +18,37 @@
16
18
  </p>
17
19
  <% else %>
18
20
  <% # we must only hint at multiple when it's a new record otherwise update fails. %>
19
- <%= f.file_field :image, :multiple => true %>
21
+ <%= f.file_field :image, multiple: true %>
20
22
  <% end %>
21
23
  </div>
22
24
 
23
25
  <div class="field">
24
- <label><%= t('.maximum_image_size', :bytes => number_to_human_size(Refinery::Images.max_image_size)) %></label>
26
+ <label><%= t('.maximum_image_size', bytes: number_to_human_size(Refinery::Images.max_image_size)) %></label>
27
+ </div>
28
+ <div class="field" id="title">
29
+ <span class='label_with_help'>
30
+ <%= f.label :image_title, t('.image_title') %>
31
+ <%= refinery_help_tag t('.image_title_help') %>
32
+ </span>
33
+ <%= f.text_field :image_title, placeholder: t('.image_title') %>
34
+ </div>
35
+
36
+ <div class="field" id="alt">
37
+ <span class='label_with_help'>
38
+ <%= f.label :image_alt, t('.image_alt') %>
39
+ <%= refinery_help_tag t('.image_alt_help') %>
40
+ </span>
41
+ <%= f.text_field :image_alt, placeholder: t('.image_alt') %>
25
42
  </div>
26
43
 
27
44
  <input type="hidden" name="wymeditor" value="<%= params[:wymeditor] %>">
28
45
 
29
- <%= render '/refinery/admin/form_actions', :f => f,
30
- :continue_editing => false,
31
- :hide_cancel => (@app_dialog or action_name == 'insert' or from_dialog?),
32
- :delete_title => t('delete', :scope => 'refinery.admin.images'),
33
- :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @image.image_name) -%>
46
+ <%= render '/refinery/admin/form_actions', f: f,
47
+ continue_editing: false,
48
+ hide_cancel: (@app_dialog or action_name == 'insert' or from_dialog?),
49
+ delete_title: t('delete', scope: 'refinery.admin.images'),
50
+ delete_confirmation: t('message', scope: 'refinery.admin.delete', title: @image.image_name),
51
+ cancel_url: refinery.admin_images_path -%>
34
52
 
35
53
  <% if @app_dialog %>
36
54
  <input type="hidden" name="app_dialog" value="<%= @app_dialog %>" />
@@ -45,6 +63,6 @@
45
63
  <% if action_name =~ /(edit)|(update)/ %>
46
64
  <div id="existing_image">
47
65
  <label><%=t('.current_image') %></label>
48
- <%= image_fu @thumbnail || @image, '225x255>', :class => 'brown_border' %>
66
+ <%= image_fu @thumbnail || @image, '225x255>', class: 'brown_border' %>
49
67
  </div>
50
68
  <% end %>
@@ -1,22 +1,15 @@
1
- <ul id="image_grid" class="<%= ['clearfix', 'pagination_frame', pagination_css_class].compact.join(' ') %>">
1
+ <ul id="image_grid" class="<%= ['clearfix', 'pagination_frame', 'images_list', pagination_css_class].compact.join(' ') %>">
2
2
  <% @images.each_with_index do |image, index| -%>
3
3
  <li id="image_<%= image.id %>" class="image_<%= index % 5 %>">
4
- <%= image_fu image, '135x135#c', :title => image.title %>
4
+ <%= image_fu image, '135x135#c', title: image.title %>
5
5
  <span class="actions">
6
- <%= link_to refinery_icon_tag('eye.png'), image.url,
7
- :target => '_blank',
8
- :title => t('view_live_html', :scope => 'refinery.admin.images') %>
9
- <%= link_to refinery_icon_tag('application_edit.png'),
10
- refinery.edit_admin_image_path(image),
11
- :title => t('edit', :scope => 'refinery.admin.images') %>
12
- <%= link_to refinery_icon_tag('delete.png'),
13
- refinery.admin_image_path(image, params.slice(:page)),
14
- :class => 'cancel confirm-delete',
15
- :title => t('delete', :scope => 'refinery.admin.images'),
16
- :data => {
17
- :confirm => t('message', :scope => 'refinery.admin.delete', :title => image.title)
18
- },
19
- :method => :delete %>
6
+
7
+ <%= action_icon :preview, image.url, t('view_live_html', scope: 'refinery.admin.images') %>
8
+ <%= action_icon :edit, refinery.edit_admin_image_path(image), t('edit', scope: 'refinery.admin.images') %>
9
+ <%= action_icon :delete, refinery.admin_image_path(image, params.slice(:page)), t('delete', scope: 'refinery.admin.images'), class: 'confirm-delete',
10
+ data: { confirm: t('message', scope: 'refinery.admin.delete', title: image.title) } %>
11
+ <%= action_icon :info, '#', "Title: #{image.title} Alt text: #{image.alt}" %>
12
+
20
13
  </span>
21
14
  </li>
22
15
  <% end -%>
@@ -1,10 +1,10 @@
1
- <div class="<%= ['clearfix', 'pagination_frame', pagination_css_class].compact.join(' ') %>">
1
+ <div id= 'image_list' class="<%= ['clearfix', 'pagination_frame', pagination_css_class].compact.join(' ') %>">
2
2
  <% group_by_date(@images).each do |container| %>
3
3
  <% date_time = (image_group = container.last).first.created_at %>
4
4
  <% date = Date.parse(date_time.to_s) %>
5
- <h3><%= l(date, :format => :long ) %></h3>
6
- <ul>
7
- <%= render :partial => 'list_view_image', :collection => image_group %>
5
+ <h3><%= l(date, format: :long ) %></h3>
6
+ <ul class='images_list'>
7
+ <%= render partial: 'list_view_image', collection: image_group %>
8
8
  </ul>
9
9
  <% end %>
10
10
  </div>
@@ -1,21 +1,30 @@
1
1
  <li id="sortable_<%= list_view_image.id %>" class="clearfix record <%= cycle('on', 'on-hover') %>">
2
2
  <span class="title">
3
- <%= list_view_image.title %> <span class="preview">&nbsp;</span>
3
+ <%= list_view_image.title %>
4
4
  </span>
5
+
6
+ <% if Refinery::I18n.frontend_locales.many? %>
7
+ <span class='locales'>
8
+ <% list_view_image.translations.sort_by{ |t| Refinery::I18n.frontend_locales.index(t.locale)}.each do |translation| %>
9
+ <% if translation.image_title.present? %>
10
+ <%= link_to refinery.edit_admin_image_path(list_view_image, switch_locale: translation.locale),
11
+ class: 'locale', title: translation.locale.upcase do %>
12
+
13
+ <div class="<%=translation.locale %> locale_marker">
14
+ <%= locale_text_icon(translation.locale.upcase) %>
15
+ </div>
16
+ <% end %>
17
+ <% end %>
18
+ <% end %>
19
+ </span>
20
+ <% end %>
21
+
22
+ <span class="preview"><%= list_view_image.image_name %></span>
5
23
  <span class="actions">
6
- <%= link_to refinery_icon_tag('eye.png'), list_view_image.url,
7
- :target => '_blank',
8
- :title => t('view_live_html', :scope => 'refinery.admin.images') %>
9
- <%= link_to refinery_icon_tag('application_edit.png'),
10
- refinery.edit_admin_image_path(list_view_image),
11
- :title => t('edit', :scope => 'refinery.admin.images') %>
12
- <%= link_to refinery_icon_tag('delete.png'),
13
- refinery.admin_image_path(list_view_image),
14
- :class => 'cancel confirm-delete',
15
- :title => t('delete', :scope => 'refinery.admin.images'),
16
- :data => {
17
- :confirm => t('message', :scope => 'refinery.admin.delete', :title => list_view_image.title)
18
- },
19
- :method => :delete %>
24
+
25
+ <%= action_icon :preview, list_view_image.url, t('view_live_html', scope: 'refinery.admin.images') %>
26
+ <%= action_icon :edit, refinery.edit_admin_image_path(list_view_image), t('edit', scope: 'refinery.admin.images') %>
27
+ <%= action_icon :delete, refinery.admin_image_path(list_view_image), t('delete', scope: 'refinery.admin.images'), class: 'confirm-delete',
28
+ data: { confirm: t('message', scope: 'refinery.admin.delete', title: list_view_image.title)} %>
20
29
  </span>
21
30
  </li>
@@ -1,6 +1,6 @@
1
- <section id="records">
2
- <%= render 'records' %>
1
+ <section id="records" class="images">
2
+ <%= render "records" %>
3
3
  </section>
4
4
  <section id="actions">
5
- <%= render 'actions' %>
5
+ <%= render "actions" %>
6
6
  </section>
@@ -1,4 +1,4 @@
1
- <% user_can_modify_images = ::Refinery::Plugins.active.names.include?('refinery_images') %>
1
+ <% user_can_modify_images = current_refinery_user.has_plugin?('refinery_images') %>
2
2
  <div id="dialog_menu_left">
3
3
  <% if (any_images = @images.any?) or searching? %>
4
4
  <span id="existing_image_radio" class="radio<%= ' selected_radio' if (no_errors = @image.errors.empty?) %>">
@@ -0,0 +1,44 @@
1
+ ca:
2
+ refinery:
3
+ plugins:
4
+ refinery_images:
5
+ title: Imatges
6
+ description: Gestionar imatges
7
+ article: femení
8
+ admin:
9
+ images:
10
+ delete: Esborrar aquesta imatge per sempre
11
+ edit: Editar aquesta imatge
12
+ form:
13
+ image: Imatge
14
+ use_current_image: Usar imatge actual
15
+ or: o
16
+ replace_image: " reemplaçar-la amb aquesta altra..."
17
+ current_image: Imatge actual
18
+ maximum_image_size: "El pes màxim per a una imatge són %{bytes}."
19
+ actions:
20
+ create_new_image: Crear nova imatge
21
+ records:
22
+ no_images_yet: Encara no hi ha imatges. Fes clic a "Crear nova imatge" per afegir la primera.
23
+ index:
24
+ view:
25
+ switch_to: "Canviar a vista %{view_name}"
26
+ list: llista
27
+ grid: quadrícula
28
+ view_live_html: Veure imatge <br/><em>Obre en finestra nova</em>
29
+ existing_image:
30
+ button_text: Inserir
31
+ resize_image: Redimensionar la imatge?
32
+ size: Mida
33
+ insert:
34
+ existing_image: Imatge existent
35
+ new_image: Nova imatge
36
+ activerecord:
37
+ models:
38
+ refinery/image: "imatge"
39
+ errors:
40
+ models:
41
+ refinery/image:
42
+ blank: Has d'indicar què imatge vols pujar
43
+ too_big: "La imatge ha de pesar menys de %{size} bytes"
44
+ incorrect_format: "La teva imatge ha de ser un arxiu JPG, PNG o GIF"
@@ -15,6 +15,10 @@ cs:
15
15
  replace_image: " nahradit jej tímto..."
16
16
  current_image: Vybraný obrázek
17
17
  maximum_image_size: Maximální velikost obrázku je %{bytes}.
18
+ image_title: Název
19
+ image_title_help: Extra informace o obrázku
20
+ image_alt: Alternativní text
21
+ image_alt_help: "Text místo obrázku, když nemůže být obrázek zobrazen."
18
22
  actions:
19
23
  create_new_image: Přidat nový obrázek
20
24
  records:
@@ -41,3 +45,4 @@ cs:
41
45
  blank: Musíte zadat obrázek který chcete nahrát
42
46
  too_big: Maximální velikost obrázku je %{size} MB
43
47
  incorrect_format: 'Obrázek musí být ve formátu JPG, PNG nebo GIF'
48
+ different_file_name: Nový obrázek nesmí mít jiný název
@@ -15,6 +15,10 @@ de:
15
15
  replace_image: " mit diesem ersetzen..."
16
16
  current_image: Aktuelles Bild
17
17
  maximum_image_size: Die maximale Größe eines Bildes beträgt %{bytes}.
18
+ image_title: Titel
19
+ image_title_help: Zusatzinformationen über das Bild
20
+ image_alt: Alt-Attribut
21
+ image_alt_help: Platzhalter-Text, der angezeigt wird, wenn Bild nicht ordenltich dargestellt werden kann.
18
22
  actions:
19
23
  create_new_image: Neues Bild anlegen
20
24
  records:
@@ -41,3 +45,4 @@ de:
41
45
  blank: Sie müssen ein Bild zum Hochladen angeben
42
46
  too_big: Bild sollte kleiner als %{size} Megabytes sein
43
47
  incorrect_format: 'Ihr Bild sollte ein JPG, PNG oder GIF sein'
48
+ different_file_name: Neues Bild kann keinen anderen Dateinamen haben
@@ -15,6 +15,10 @@ en:
15
15
  replace_image: " replace it with this one..."
16
16
  current_image: Current Image
17
17
  maximum_image_size: The maximum image size is %{bytes}.
18
+ image_title: Title
19
+ image_title_help: Extra information about the image
20
+ image_alt: Alt
21
+ image_alt_help: Text to use if the image cannot be displayed.
18
22
  actions:
19
23
  create_new_image: Add new image
20
24
  records:
@@ -15,6 +15,10 @@ fr:
15
15
  replace_image: " la remplacer par celle-ci..."
16
16
  current_image: Image actuelle
17
17
  maximum_image_size: "La taille de l'image ne doit pas excéder %{bytes}."
18
+ image_title: Titre
19
+ image_title_help: Information complémentaire sur l'image
20
+ image_alt: Alt
21
+ image_alt_help: Texte utilise si l'image ne peut pas être affichée.
18
22
  actions:
19
23
  create_new_image: Ajouter une image
20
24
  records:
@@ -24,28 +24,18 @@ it:
24
24
  switch_to: 'Passa alla modalità di visualizzazione "%{view_name}"'
25
25
  list: Lista
26
26
  grid: Griglia
27
- grid_view:
28
- edit: Modifica questa immagine
29
27
  view_live_html: Visualizza questa immagine <br/><em>Apri in una nuova finestra</em>
30
28
  existing_image:
31
29
  button_text: Inserisci
32
30
  resize_image: "Ridimensionare l'immagine?"
33
31
  size: Dimensioni
34
- list_view_image:
35
- edit_this_image: Modifica questa immagine
36
32
  insert:
37
33
  existing_image: Immagine Esistente
38
34
  new_image: Nuova immagine
39
- previous: Precedente
40
- next: Successivo
41
- submit_insert: Inserire
42
- or: o
43
- cancel: Annullare
44
35
  activerecord:
45
36
  errors:
46
37
  models:
47
- refinery:
48
- image:
49
- blank: "Devi selezionare un'immagine da caricare"
50
- too_big: 'I files devono essere di dimensioni inferiori a %{size} bytes'
51
- incorrect_format: "L'immagine deve essere in formato JPEG, PNG o GIF"
38
+ refinery/image:
39
+ blank: "Devi selezionare un'immagine da caricare"
40
+ too_big: 'I files devono essere di dimensioni inferiori a %{size} bytes'
41
+ incorrect_format: "L'immagine deve essere in formato JPEG, PNG o GIF"
@@ -18,7 +18,7 @@ nl:
18
18
  actions:
19
19
  create_new_image: Nieuwe afbeelding toevoegen
20
20
  records:
21
- no_images_yet: Er zijn nog geen afbeeldingen. Klik op "Nieuwe afbeelding toevoegen" om uw eerste afbleelding toe te voegen.
21
+ no_images_yet: Er zijn nog geen afbeeldingen. Klik op "Nieuwe afbeelding toevoegen" om uw eerste afbeelding toe te voegen.
22
22
  index:
23
23
  view:
24
24
  switch_to: De %{view_name}versie bekijken
@@ -1,5 +1,5 @@
1
1
  Refinery::Core::Engine.routes.draw do
2
- get '/system/images/*dragonfly', :to => Dragonfly[:refinery_images]
2
+ get '/system/images/*dragonfly', :to => Dragonfly.app(:refinery_images)
3
3
 
4
4
  namespace :admin, :path => Refinery::Core.backend_route do
5
5
  resources :images, :except => :show do
@@ -0,0 +1,8 @@
1
+ class AddTitleAndAltToRefineryImages < ActiveRecord::Migration
2
+ def change
3
+ change_table :refinery_images do |t|
4
+ t.string :image_title
5
+ t.string :image_alt
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ class TranslateRefineryImages < ActiveRecord::Migration
2
+ def self.up
3
+ begin
4
+ ::Refinery::Image.create_translation_table!({
5
+ image_alt: :string,
6
+ image_title: :string
7
+ }, {
8
+ :migrate_data => true
9
+ })
10
+ rescue NameError
11
+ warn "Refinery::Image was not defined!"
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ begin
17
+ Refinery::Image.drop_translation_table! migrate_data: true
18
+ rescue NameError
19
+ warn "Refinery::Image was not defined!"
20
+ end
21
+ end
22
+ end
@@ -34,14 +34,11 @@ Refinery::Images.configure do |config|
34
34
  # config.s3_region = ENV['S3_REGION']
35
35
 
36
36
  # Configure Dragonfly
37
- # This is where in the middleware stack to insert the Dragonfly middleware
38
- # config.dragonfly_insert_before = <%= Refinery::Images.dragonfly_insert_before.inspect %>
39
- # config.dragonfly_secret = <%= Refinery::Images.dragonfly_secret.inspect %>
40
- # If you decide to trust file extensions replace :ext below with :format
37
+ # config.dragonfly_verify_urls = <%= Refinery::Images.dragonfly_verify_urls %>
38
+ config.dragonfly_secret = <%= Refinery::Images.dragonfly_secret.inspect %>
41
39
  # config.dragonfly_url_format = <%= Refinery::Images.dragonfly_url_format.inspect %>
42
40
  # config.dragonfly_url_host = <%= Refinery::Images.dragonfly_url_host.inspect %>
43
41
  # config.datastore_root_path = <%= Refinery::Images.datastore_root_path.inspect %>
44
- # config.trust_file_extensions = <%= Refinery::Images.trust_file_extensions.inspect %>
45
42
 
46
43
  # Configure Dragonfly custom storage backend
47
44
  # The custom_backend setting by default defers to the core setting for this but can be set just for images.
@@ -1,6 +1,5 @@
1
1
  require 'refinerycms-core'
2
2
  require 'dragonfly'
3
- require 'rack/cache'
4
3
 
5
4
  module Refinery
6
5
  autoload :ImagesGenerator, 'generators/refinery/images/images_generator'
@@ -23,3 +22,7 @@ module Refinery
23
22
  end
24
23
  end
25
24
  end
25
+
26
+ ActiveSupport.on_load(:active_record) do
27
+ require 'globalize'
28
+ end
@@ -2,23 +2,21 @@ module Refinery
2
2
  module Images
3
3
  include ActiveSupport::Configurable
4
4
 
5
- config_accessor :dragonfly_insert_before, :dragonfly_secret, :dragonfly_url_format, :dragonfly_url_host,
5
+ config_accessor :dragonfly_secret, :dragonfly_url_format, :dragonfly_url_host, :dragonfly_verify_urls,
6
6
  :max_image_size, :pages_per_dialog, :pages_per_admin_index,
7
7
  :pages_per_dialog_that_have_size_options, :user_image_sizes,
8
8
  :image_views, :preferred_image_view, :datastore_root_path,
9
9
  :s3_backend, :s3_bucket_name, :s3_region,
10
- :s3_access_key_id, :s3_secret_access_key, :trust_file_extensions,
10
+ :s3_access_key_id, :s3_secret_access_key,
11
11
  :whitelisted_mime_types,
12
12
  :custom_backend_class, :custom_backend_opts
13
13
 
14
- self.dragonfly_insert_before = 'ActionDispatch::Callbacks'
15
14
  self.dragonfly_secret = Core.dragonfly_secret
16
- # If you decide to trust file extensions replace :ext below with :format
17
15
  self.dragonfly_url_format = '/system/images/:job/:basename.:ext'
18
16
  self.dragonfly_url_host = ''
19
- self.trust_file_extensions = false
17
+ self.dragonfly_verify_urls = true
20
18
 
21
- self.max_image_size = 5242880
19
+ self.max_image_size = 5_242_880
22
20
  self.pages_per_dialog = 18
23
21
  self.pages_per_dialog_that_have_size_options = 12
24
22
  self.pages_per_admin_index = 20
@@ -5,35 +5,39 @@ module Refinery
5
5
  module Dragonfly
6
6
 
7
7
  class << self
8
- def setup!
9
- app_images = ::Dragonfly[:refinery_images]
10
-
11
- app_images.define_macro(::Refinery::Image, :image_accessor)
8
+ def configure!
9
+ ActiveRecord::Base.extend ::Dragonfly::Model
10
+ ActiveRecord::Base.extend ::Dragonfly::Model::Validations
12
11
 
13
- app_images.analyser.register(::Dragonfly::ImageMagick::Analyser)
14
- app_images.analyser.register(::Dragonfly::Analysis::FileCommandAnalyser)
15
- end
12
+ app_images = ::Dragonfly.app(:refinery_images)
16
13
 
17
- def configure!
18
- app_images = ::Dragonfly[:refinery_images]
19
- app_images.configure_with(:imagemagick)
20
- app_images.configure_with(:rails) do |c|
21
- c.datastore.root_path = Refinery::Images.datastore_root_path
22
- c.url_format = Refinery::Images.dragonfly_url_format
23
- c.url_host = Refinery::Images.dragonfly_url_host
24
- c.secret = Refinery::Images.dragonfly_secret
25
- c.trust_file_extensions = Refinery::Images.trust_file_extensions
14
+ app_images.configure do
15
+ plugin :imagemagick
16
+ datastore :file, {
17
+ :root_path => Refinery::Images.datastore_root_path
18
+ }
19
+ url_format Refinery::Images.dragonfly_url_format
20
+ url_host Refinery::Images.dragonfly_url_host
21
+ verify_urls Refinery::Images.dragonfly_verify_urls
22
+ if Refinery::Images.dragonfly_verify_urls
23
+ secret Refinery::Images.dragonfly_secret
24
+ end
25
+ dragonfly_url nil
26
+ processor :strip do |content|
27
+ content.process!(:convert, '-strip')
28
+ end
26
29
  end
27
30
 
28
31
  if ::Refinery::Images.s3_backend
29
- app_images.datastore = ::Dragonfly::DataStorage::S3DataStore.new
30
- app_images.datastore.configure do |s3|
31
- s3.bucket_name = Refinery::Images.s3_bucket_name
32
- s3.access_key_id = Refinery::Images.s3_access_key_id
33
- s3.secret_access_key = Refinery::Images.s3_secret_access_key
34
- # S3 Region otherwise defaults to 'us-east-1'
35
- s3.region = Refinery::Images.s3_region if Refinery::Images.s3_region
36
- end
32
+ require 'dragonfly/s3_data_store'
33
+ options = {
34
+ bucket_name: Refinery::Images.s3_bucket_name,
35
+ access_key_id: Refinery::Images.s3_access_key_id,
36
+ secret_access_key: Refinery::Images.s3_secret_access_key
37
+ }
38
+ # S3 Region otherwise defaults to 'us-east-1'
39
+ options.update(region: Refinery::Images.s3_region) if Refinery::Images.s3_region
40
+ app_images.use_datastore :s3, options
37
41
  end
38
42
 
39
43
  if Images.custom_backend?
@@ -44,10 +48,17 @@ module Refinery
44
48
  ##
45
49
  # Injects Dragonfly::Middleware for Refinery::Images into the stack
46
50
  def attach!(app)
47
- if ::Rails.application.config.action_controller.perform_caching
48
- app.config.middleware.insert_after 'Rack::Cache', 'Dragonfly::Middleware', :refinery_images
51
+ if defined?(::Rack::Cache)
52
+ unless app.config.action_controller.perform_caching && app.config.action_dispatch.rack_cache
53
+ app.config.middleware.insert 0, ::Rack::Cache, {
54
+ verbose: true,
55
+ metastore: URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/meta"), # URI encoded in case of spaces
56
+ entitystore: URI.encode("file:#{Rails.root}/tmp/dragonfly/cache/body")
57
+ }
58
+ end
59
+ app.config.middleware.insert_after ::Rack::Cache, ::Dragonfly::Middleware, :refinery_images
49
60
  else
50
- app.config.middleware.use 'Dragonfly::Middleware', :refinery_images
61
+ app.config.middleware.use ::Dragonfly::Middleware, :refinery_images
51
62
  end
52
63
  end
53
64
  end