refinerycms-images 2.1.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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