trestle-active_storage 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7afe155600a65f0a430762dd74d885234377f3f4587c08813f3a7b8ab2ef9e2
4
- data.tar.gz: ac66a74dac13db2f3df90b0c30591d135780f0036c9e9923a194045c5ef8074a
3
+ metadata.gz: cb04373f55898190ff541b714e60a76339a9973d6c685e0361d81372e3ac51f7
4
+ data.tar.gz: 7c21f06234ffa638875cf25053ab5cc4748a2b754ae7c26177dc989f279725b5
5
5
  SHA512:
6
- metadata.gz: 9023b24a2bda93e2441cbce24eea0bfe70dc964b5b0702fabb4b33cc1f0aa45c33d22ceca066ffd0ae152a475a63717d76479085432badd376dd7266662a1c44
7
- data.tar.gz: b9472272e26f4b3643830247b3ae5e10037aa83a71143a612877e7aaeca1f7d34489a78a752152eba00020b3171092c0e8261dfa6a52f1e6cf43bc07908624cb
6
+ metadata.gz: 1f64a0a1b8b7f3c473fc52c0bc8750f7b30ae37781298963e00a66b9162422d6234eb09d3f5164b4349150854b8d622da4c2aaa770b25d1d7305e7d818844b5a
7
+ data.tar.gz: d6b98ed4b70d17116d477ba9bcb77ffc56de015918c3bf0de9acb4ddf843e56db6187999d25d591521c4dfabf32a30b323a534729c47c4d48ed0bcef641fb15d
data/README.md CHANGED
@@ -23,6 +23,8 @@ Trestle.resource(:users) do
23
23
  end
24
24
  ```
25
25
 
26
+ You can use the `active_storage_field` field type for both `has_one_attached` and `has_many_attached` attachments.
27
+
26
28
  ## Installation
27
29
 
28
30
  These instructions assume you have a working Trestle application. To integrate trestle-active_storage, first add it to your application's Gemfile:
@@ -41,11 +43,33 @@ If you'd like to get up and running on Heroku, check out their [documentation on
41
43
 
42
44
  ## TODO / Wishlist
43
45
 
44
- - [ ] Support for `has_many_attached` attachments
46
+ - [x] Support for `has_many_attached` attachments
45
47
  - [x] Support for Active Storage previews
46
48
  - [ ] Preview of selected local file ([#1](https://github.com/richardvenneman/trestle-active_storage/issues/1))
47
49
  - [ ] Integration tests
48
50
 
51
+ ## Contributors
52
+
53
+ Thanks goes out to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
54
+ <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
55
+ <!-- prettier-ignore-start -->
56
+ <!-- markdownlint-disable -->
57
+ <table>
58
+ <tr>
59
+ <td align="center"><a href="https://www.cityspotters.com"><img src="https://avatars1.githubusercontent.com/u/75705?v=4" width="100px;" alt=""/><br /><sub><b>Richard Venneman</b></sub></a><br /><a href="#ideas-richardvenneman" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/richardvenneman/trestle-active_storage/commits?author=richardvenneman" title="Code">💻</a> <a href="https://github.com/richardvenneman/trestle-active_storage/commits?author=richardvenneman" title="Documentation">📖</a> <a href="#question-richardvenneman" title="Answering Questions">💬</a> <a href="https://github.com/richardvenneman/trestle-active_storage/pulls?q=is%3Apr+reviewed-by%3Arichardvenneman" title="Reviewed Pull Requests">👀</a></td>
60
+ <td align="center"><a href="http://aboobacker.in"><img src="https://avatars1.githubusercontent.com/u/3112976?v=4" width="100px;" alt=""/><br /><sub><b>Aboobacker MK</b></sub></a><br /><a href="#ideas-tachyons" title="Ideas, Planning, & Feedback">🤔</a></td>
61
+ <td align="center"><a href="http://euodeiovoce.com.br"><img src="https://avatars2.githubusercontent.com/u/1027961?v=4" width="100px;" alt=""/><br /><sub><b>Rafael Porto</b></sub></a><br /><a href="https://github.com/richardvenneman/trestle-active_storage/commits?author=PunkMaldito" title="Code">💻</a></td>
62
+ <td align="center"><a href="https://github.com/hoenth"><img src="https://avatars2.githubusercontent.com/u/62977?v=4" width="100px;" alt=""/><br /><sub><b>Tom Hoen</b></sub></a><br /><a href="https://github.com/richardvenneman/trestle-active_storage/issues?q=author%3Ahoenth" title="Bug reports">🐛</a> <a href="https://github.com/richardvenneman/trestle-active_storage/commits?author=hoenth" title="Code">💻</a></td>
63
+ <td align="center"><a href="https://github.com/basharabdullah"><img src="https://avatars3.githubusercontent.com/u/167290?v=4" width="100px;" alt=""/><br /><sub><b>Bashar Abdullah</b></sub></a><br /><a href="https://github.com/richardvenneman/trestle-active_storage/issues?q=author%3Abasharabdullah" title="Bug reports">🐛</a></td>
64
+ <td align="center"><a href="https://github.com/McRipper"><img src="https://avatars2.githubusercontent.com/u/58031?v=4" width="100px;" alt=""/><br /><sub><b>Emanuele Barban</b></sub></a><br /><a href="https://github.com/richardvenneman/trestle-active_storage/commits?author=McRipper" title="Code">💻</a></td>
65
+ </tr>
66
+ </table>
67
+
68
+ <!-- markdownlint-enable -->
69
+ <!-- prettier-ignore-end -->
70
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
71
+ This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification.
72
+
49
73
  ## License
50
74
 
51
75
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,35 @@
1
+ <div class='nested-fields-container'>
2
+ <%= builder.fields_for field_name do %>
3
+ <div class="active-storage">
4
+ <% if attachments.attached? && builder.object.persisted? %>
5
+ <% attachments.each do |attachment| %>
6
+ <div class="active-storage__preview">
7
+ <% if attachment.previewable? %>
8
+ <%= link_to image_tag(main_app.url_for(attachment.preview(resize: "300x300>")), class: "active-storage__image"),
9
+ main_app.rails_blob_path(attachment, disposition: "attachment") %>
10
+ <% elsif attachment.variable? %>
11
+ <%= link_to image_tag(main_app.url_for(attachment.variant(resize: "300x300>")), class: "active-storage__image"),
12
+ main_app.rails_blob_path(attachment, disposition: "attachment") %>
13
+ <% else %>
14
+ <%= link_to main_app.rails_blob_path(attachment, disposition: "attachment"), class: "btn btn-info" do %>
15
+ <i class="fa fa-download"></i>
16
+ <span class="btn-label">Download <%= field_name %></span>
17
+ <% end %>
18
+ <% end %>
19
+
20
+ <div>
21
+ <small><%= attachment.blob.filename %></small>
22
+ <%= builder.check_box("delete_#{field_name}_#{attachment.blob_id}", label: "Delete this #{field_name.to_s.singularize}") %>
23
+ </div>
24
+ </div>
25
+ <hr>
26
+ <% end %>
27
+ <% end %>
28
+ </div>
29
+
30
+ <%= builder.raw_file_field(field_name, class: 'active-storage__field', multiple: true, direct_upload: true) %>
31
+ <% end %>
32
+ </div>
33
+
34
+
35
+
@@ -1,5 +1,5 @@
1
1
  <div class="active-storage">
2
- <% if attachment.attached? %>
2
+ <% if attachment.attached? && builder.object.persisted? %>
3
3
  <div class="active-storage__preview">
4
4
  <% if attachment.previewable? %>
5
5
  <%= link_to image_tag(main_app.url_for(attachment.preview(resize: "300x300>")), class: "active-storage__image"),
@@ -1,14 +1,15 @@
1
- require 'trestle/active_storage/version'
1
+ require_relative 'active_storage/version'
2
+
2
3
  require 'trestle'
3
4
 
4
5
  module Trestle
5
6
  module ActiveStorage
6
- extend ActiveSupport::Autoload
7
7
 
8
- autoload :Builder
9
- autoload :ControllerConcern
10
- autoload :Resource
8
+ require_relative "active_storage/builder"
9
+ require_relative "active_storage/resource"
10
+ require_relative "active_storage/controller_concern"
11
+
11
12
  end
12
13
  end
13
14
 
14
- require 'trestle/active_storage/engine' if defined?(Rails)
15
+ require_relative 'active_storage/engine' if defined?(Rails)
@@ -13,13 +13,29 @@ module Trestle
13
13
  self.instance = admin.find_instance(params)
14
14
 
15
15
  admin.active_storage_fields.each do |field|
16
- instance.class.send(:attr_accessor, "delete_#{field}")
16
+ attachment = instance.send(field)
17
+
18
+ if attachment.respond_to?(:each)
19
+ attachment.each do |att|
20
+ instance.class.send(:attr_accessor, "delete_#{field}_#{att.blob_id}")
21
+ end
22
+ else
23
+ instance.class.send(:attr_accessor, "delete_#{field}")
24
+ end
17
25
  end
18
26
  end
19
27
 
20
28
  def purge_attachments
21
29
  admin.active_storage_fields.each do |field|
22
- instance.send(field).purge if instance.try("delete_#{field}") == '1'
30
+ attachment = instance.send(field)
31
+
32
+ if attachment.respond_to?(:each)
33
+ attachment.each do |att|
34
+ att.purge if instance.try("delete_#{field}_#{att.blob_id}") == '1'
35
+ end
36
+ else
37
+ instance.send(field).purge if instance.try("delete_#{field}") == '1'
38
+ end
23
39
  end
24
40
  end
25
41
  end
@@ -3,10 +3,13 @@ module Trestle
3
3
  class Engine < Rails::Engine
4
4
  config.assets.precompile << 'activestorage.js' << 'trestle/active_storage_fields.js'
5
5
 
6
+ config.to_prepare do
7
+ Trestle::ResourceController.send(:include, Trestle::ActiveStorage::ControllerConcern)
8
+ end
9
+
6
10
  initializer :extensions do
7
11
  Trestle::Resource.send(:include, Trestle::ActiveStorage::Resource)
8
12
  Trestle::Resource::Builder.send(:include, Trestle::ActiveStorage::Builder)
9
- Trestle::Resource::Controller.send(:include, Trestle::ActiveStorage::ControllerConcern)
10
13
  end
11
14
  end
12
15
  end
@@ -5,12 +5,22 @@ module Trestle
5
5
  instance = builder.object
6
6
  attachment = instance.send(name)
7
7
 
8
- @template.render partial: 'trestle/active_storage/field',
9
- locals: {
10
- builder: builder,
11
- field_name: name,
12
- attachment: attachment
13
- }
8
+ rendering_options = {}.tap do |hash|
9
+ hash[:locals] = {}.tap do |locals|
10
+ locals[:builder] = builder
11
+ locals[:field_name] = name
12
+
13
+ if attachment.respond_to?(:each)
14
+ hash[:partial] = 'trestle/active_storage/has_many_field'
15
+ locals[:attachments] = attachment
16
+ else
17
+ hash[:partial] = 'trestle/active_storage/has_one_field'
18
+ locals[:attachment] = attachment
19
+ end
20
+ end
21
+ end
22
+
23
+ @template.render rendering_options
14
24
  end
15
25
  end
16
26
  end
@@ -1,5 +1,5 @@
1
1
  module Trestle
2
2
  module ActiveStorage
3
- VERSION = '2.0.0'
3
+ VERSION = '3.0.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trestle-active_storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Venneman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-04 00:00:00.000000000 Z
11
+ date: 2020-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,34 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0.beta2
19
+ version: '5.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6'
22
+ version: '7'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 5.2.0.beta2
29
+ version: '5.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6'
32
+ version: '7'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: trestle
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.8'
39
+ version: 0.9.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.9.3
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
47
  - - "~>"
45
48
  - !ruby/object:Gem::Version
46
- version: '0.8'
49
+ version: 0.9.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.9.3
47
53
  description: ActiveStorage integration plugin for the Trestle admin framework.
48
54
  email:
49
55
  - richardvenneman@me.com
@@ -55,9 +61,9 @@ files:
55
61
  - README.md
56
62
  - Rakefile
57
63
  - app/assets/javascripts/trestle/active_storage_fields.js
58
- - app/views/trestle/active_storage/_field.html.erb
64
+ - app/views/trestle/active_storage/_has_many_field.html.erb
65
+ - app/views/trestle/active_storage/_has_one_field.html.erb
59
66
  - config/initializers/trestle.rb
60
- - config/routes.rb
61
67
  - lib/tasks/trestle/active_storage_tasks.rake
62
68
  - lib/trestle/active_storage.rb
63
69
  - lib/trestle/active_storage/builder.rb
@@ -85,8 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
91
  - !ruby/object:Gem::Version
86
92
  version: '0'
87
93
  requirements: []
88
- rubyforge_project:
89
- rubygems_version: 2.7.3
94
+ rubygems_version: 3.1.2
90
95
  signing_key:
91
96
  specification_version: 4
92
97
  summary: ActiveStorage integration plugin for the Trestle admin framework
@@ -1,3 +0,0 @@
1
- Trestle::Engine.routes.draw do
2
- post '/active_storage/direct_uploads' => 'active_storage/direct_uploads#create', as: :rails_direct_uploads
3
- end