administrate-field-active_storage 0.3.6 → 0.4.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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +21 -0
- data/.gitignore +0 -1
- data/.ruby-version +1 -1
- data/Gemfile.lock +211 -0
- data/README.md +22 -3
- data/administrate-field-active_storage.gemspec +4 -3
- data/app/assets/stylesheets/administrate-field-active_storage/application.css +15 -0
- data/app/views/fields/active_storage/_form.html.erb +4 -1
- data/app/views/fields/active_storage/_index.html.erb +20 -12
- data/app/views/fields/active_storage/_item.html.erb +2 -1
- data/app/views/fields/active_storage/_items.html.erb +8 -1
- data/app/views/fields/active_storage/_preview.html.erb +8 -4
- data/app/views/fields/active_storage/_show.html.erb +1 -1
- data/config/i18n-tasks.yml +8 -0
- data/config/locales/administrate-field-active_storage.en.yml +10 -0
- data/config/locales/administrate-field-active_storage.ru.yml +10 -0
- data/contribute.md +1 -0
- data/lib/administrate/field/active_storage.rb +10 -1
- data/spec/i18n_spec.rb +35 -0
- data/test_app/.browserslistrc +1 -0
- data/test_app/.gitattributes +10 -0
- data/{example-project → test_app}/.gitignore +9 -7
- data/test_app/.ruby-version +1 -0
- data/test_app/Gemfile +45 -0
- data/test_app/Gemfile.lock +240 -0
- data/{example-project → test_app}/README.md +0 -0
- data/{example-project → test_app}/Rakefile +1 -1
- data/test_app/app/assets/config/manifest.js +4 -0
- data/{example-project → test_app}/app/assets/images/.keep +0 -0
- data/{example-project → test_app}/app/assets/stylesheets/application.css +0 -0
- data/{example-project → test_app}/app/controllers/admin/application_controller.rb +3 -3
- data/test_app/app/controllers/admin/posts_controller.rb +46 -0
- data/{example-project → test_app}/app/controllers/application_controller.rb +0 -0
- data/{example-project/app/dashboards/user_dashboard.rb → test_app/app/dashboards/post_dashboard.rb} +29 -27
- data/{example-project → test_app}/app/helpers/application_helper.rb +0 -0
- data/test_app/app/javascript/packs/application.js +10 -0
- data/{example-project → test_app}/app/models/application_record.rb +0 -0
- data/test_app/app/models/post.rb +3 -0
- data/test_app/app/views/layouts/application.html.erb +16 -0
- data/test_app/bin/bundle +114 -0
- data/test_app/bin/rails +4 -0
- data/test_app/bin/rake +4 -0
- data/{example-project → test_app}/bin/setup +6 -9
- data/test_app/config/application.rb +35 -0
- data/{example-project/bin/bundle → test_app/config/boot.rb} +2 -2
- data/test_app/config/credentials.yml.enc +1 -0
- data/{example-project → test_app}/config/database.yml +1 -1
- data/{example-project → test_app}/config/environment.rb +1 -1
- data/{example-project → test_app}/config/environments/development.rb +21 -11
- data/{example-project → test_app}/config/environments/production.rb +36 -24
- data/{example-project → test_app}/config/environments/test.rb +20 -14
- data/{example-project → test_app}/config/initializers/application_controller_renderer.rb +0 -0
- data/{example-project → test_app}/config/initializers/assets.rb +0 -0
- data/test_app/config/initializers/backtrace_silencers.rb +8 -0
- data/{example-project → test_app}/config/initializers/content_security_policy.rb +5 -0
- data/{example-project → test_app}/config/initializers/cookies_serializer.rb +0 -0
- data/{example-project → test_app}/config/initializers/filter_parameter_logging.rb +3 -1
- data/{example-project → test_app}/config/initializers/inflections.rb +0 -0
- data/{example-project → test_app}/config/initializers/mime_types.rb +0 -0
- data/test_app/config/initializers/permissions_policy.rb +11 -0
- data/{example-project → test_app}/config/initializers/wrap_parameters.rb +0 -0
- data/{example-project → test_app}/config/locales/en.yml +1 -1
- data/{example-project → test_app}/config/puma.rb +13 -4
- data/test_app/config/routes.rb +9 -0
- data/{example-project → test_app}/config/storage.yml +0 -0
- data/{example-project → test_app}/config.ru +2 -1
- data/{example-project/db/migrate/20181221134334_create_active_storage_tables.active_storage.rb → test_app/db/migrate/20210118122804_create_active_storage_tables.active_storage.rb} +15 -5
- data/test_app/db/migrate/20210118122927_create_posts.rb +8 -0
- data/{example-project → test_app}/db/schema.rb +18 -10
- data/{example-project → test_app}/db/seeds.rb +1 -1
- data/test_app/lib/active_storage/fixture_set.rb +71 -0
- data/{example-project → test_app}/public/404.html +0 -0
- data/{example-project → test_app}/public/422.html +0 -0
- data/{example-project → test_app}/public/500.html +0 -0
- data/{example-project → test_app}/public/apple-touch-icon-precomposed.png +0 -0
- data/{example-project → test_app}/public/apple-touch-icon.png +0 -0
- data/{example-project → test_app}/public/favicon.ico +0 -0
- data/test_app/public/robots.txt +1 -0
- data/{example-project → test_app}/test/application_system_test_case.rb +0 -0
- data/test_app/test/controllers/admin/posts_controller_test.rb +14 -0
- data/test_app/test/fixtures/active_storage/attachments.yml +4 -0
- data/test_app/test/fixtures/active_storage/blobs.yml +2 -0
- data/test_app/test/fixtures/files/cover_image.jpg +0 -0
- data/test_app/test/fixtures/posts.yml +11 -0
- data/test_app/test/models/post_test.rb +9 -0
- data/test_app/test/test_helper.rb +20 -0
- metadata +100 -101
- data/Rakefile +0 -22
- data/example-project/.ruby-version +0 -1
- data/example-project/Gemfile +0 -67
- data/example-project/Gemfile.lock +0 -265
- data/example-project/app/assets/config/manifest.js +0 -3
- data/example-project/app/assets/javascripts/application.js +0 -16
- data/example-project/app/assets/javascripts/cable.js +0 -13
- data/example-project/app/assets/javascripts/channels/.keep +0 -0
- data/example-project/app/channels/application_cable/channel.rb +0 -4
- data/example-project/app/channels/application_cable/connection.rb +0 -4
- data/example-project/app/controllers/admin/users_controller.rb +0 -27
- data/example-project/app/controllers/concerns/.keep +0 -0
- data/example-project/app/controllers/users_controller.rb +0 -7
- data/example-project/app/jobs/application_job.rb +0 -2
- data/example-project/app/mailers/application_mailer.rb +0 -4
- data/example-project/app/models/concerns/.keep +0 -0
- data/example-project/app/models/user.rb +0 -3
- data/example-project/app/views/layouts/application.html.erb +0 -15
- data/example-project/app/views/layouts/mailer.html.erb +0 -13
- data/example-project/app/views/layouts/mailer.text.erb +0 -1
- data/example-project/bin/rails +0 -9
- data/example-project/bin/rake +0 -9
- data/example-project/bin/spring +0 -17
- data/example-project/bin/update +0 -31
- data/example-project/bin/yarn +0 -11
- data/example-project/config/application.rb +0 -19
- data/example-project/config/boot.rb +0 -4
- data/example-project/config/cable.yml +0 -10
- data/example-project/config/credentials.yml.enc +0 -1
- data/example-project/config/initializers/backtrace_silencers.rb +0 -7
- data/example-project/config/routes.rb +0 -10
- data/example-project/config/spring.rb +0 -6
- data/example-project/db/migrate/20181013145025_create_users.rb +0 -9
- data/example-project/lib/assets/.keep +0 -0
- data/example-project/lib/tasks/.keep +0 -0
- data/example-project/log/.keep +0 -0
- data/example-project/package.json +0 -5
- data/example-project/public/robots.txt +0 -1
- data/example-project/test/controllers/.keep +0 -0
- data/example-project/test/fixtures/.keep +0 -0
- data/example-project/test/fixtures/files/.keep +0 -0
- data/example-project/test/fixtures/users.yml +0 -7
- data/example-project/test/helpers/.keep +0 -0
- data/example-project/test/integration/.keep +0 -0
- data/example-project/test/mailers/.keep +0 -0
- data/example-project/test/models/.keep +0 -0
- data/example-project/test/models/user_test.rb +0 -7
- data/example-project/test/system/.keep +0 -0
- data/example-project/test/test_helper.rb +0 -10
- data/example-project/tmp/.keep +0 -0
- data/example-project/vendor/.keep +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 325bb9d01b865e2f1040d323dadadfdba96ef0a1dd2931392f24943012491764
|
|
4
|
+
data.tar.gz: fd8cdf3df0ba4638eea1125bb557878646cc40979c41a1522487c0af162fa052
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0fa9781cf805f7e80bf482c27ad0cf88180f014bc88a8234c6aa219855bd6d7d745b45783b2128c4482be9785cac0884b00e2e2bb401b1a158707cf6fbfded1f
|
|
7
|
+
data.tar.gz: 4dfc6fe7861abd65ff323effba94baf3485a00c43d0889e8efc6d68a3540d8a93509c762c7dd3dce94c6320b15badf2afc9b842d41cb29ec574f3c34ee9a0280
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on: [push,pull_request]
|
|
4
|
+
|
|
5
|
+
env:
|
|
6
|
+
RAILS_MASTER_KEY: ca18e029a12884a87e96cf6a64a12fb5
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v2
|
|
13
|
+
- uses: ruby/setup-ruby@v1
|
|
14
|
+
- uses: actions/cache@v2
|
|
15
|
+
with:
|
|
16
|
+
path: vendor/bundle
|
|
17
|
+
key: bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/Gemfile.lock') }}
|
|
18
|
+
restore-keys: |
|
|
19
|
+
bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-
|
|
20
|
+
- run: test_app/bin/setup
|
|
21
|
+
- run: cd test_app && bundle exec rails test
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
3.0.3
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
administrate-field-active_storage (0.3.8)
|
|
5
|
+
administrate (>= 0.2.2)
|
|
6
|
+
rails (>= 6.0)
|
|
7
|
+
|
|
8
|
+
GEM
|
|
9
|
+
remote: https://rubygems.org/
|
|
10
|
+
specs:
|
|
11
|
+
actioncable (7.0.0)
|
|
12
|
+
actionpack (= 7.0.0)
|
|
13
|
+
activesupport (= 7.0.0)
|
|
14
|
+
nio4r (~> 2.0)
|
|
15
|
+
websocket-driver (>= 0.6.1)
|
|
16
|
+
actionmailbox (7.0.0)
|
|
17
|
+
actionpack (= 7.0.0)
|
|
18
|
+
activejob (= 7.0.0)
|
|
19
|
+
activerecord (= 7.0.0)
|
|
20
|
+
activestorage (= 7.0.0)
|
|
21
|
+
activesupport (= 7.0.0)
|
|
22
|
+
mail (>= 2.7.1)
|
|
23
|
+
actionmailer (7.0.0)
|
|
24
|
+
actionpack (= 7.0.0)
|
|
25
|
+
actionview (= 7.0.0)
|
|
26
|
+
activejob (= 7.0.0)
|
|
27
|
+
activesupport (= 7.0.0)
|
|
28
|
+
mail (~> 2.5, >= 2.5.4)
|
|
29
|
+
rails-dom-testing (~> 2.0)
|
|
30
|
+
actionpack (7.0.0)
|
|
31
|
+
actionview (= 7.0.0)
|
|
32
|
+
activesupport (= 7.0.0)
|
|
33
|
+
rack (~> 2.0, >= 2.2.0)
|
|
34
|
+
rack-test (>= 0.6.3)
|
|
35
|
+
rails-dom-testing (~> 2.0)
|
|
36
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
37
|
+
actiontext (7.0.0)
|
|
38
|
+
actionpack (= 7.0.0)
|
|
39
|
+
activerecord (= 7.0.0)
|
|
40
|
+
activestorage (= 7.0.0)
|
|
41
|
+
activesupport (= 7.0.0)
|
|
42
|
+
globalid (>= 0.6.0)
|
|
43
|
+
nokogiri (>= 1.8.5)
|
|
44
|
+
actionview (7.0.0)
|
|
45
|
+
activesupport (= 7.0.0)
|
|
46
|
+
builder (~> 3.1)
|
|
47
|
+
erubi (~> 1.4)
|
|
48
|
+
rails-dom-testing (~> 2.0)
|
|
49
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
50
|
+
activejob (7.0.0)
|
|
51
|
+
activesupport (= 7.0.0)
|
|
52
|
+
globalid (>= 0.3.6)
|
|
53
|
+
activemodel (7.0.0)
|
|
54
|
+
activesupport (= 7.0.0)
|
|
55
|
+
activerecord (7.0.0)
|
|
56
|
+
activemodel (= 7.0.0)
|
|
57
|
+
activesupport (= 7.0.0)
|
|
58
|
+
activestorage (7.0.0)
|
|
59
|
+
actionpack (= 7.0.0)
|
|
60
|
+
activejob (= 7.0.0)
|
|
61
|
+
activerecord (= 7.0.0)
|
|
62
|
+
activesupport (= 7.0.0)
|
|
63
|
+
marcel (~> 1.0)
|
|
64
|
+
mini_mime (>= 1.1.0)
|
|
65
|
+
activesupport (7.0.0)
|
|
66
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
67
|
+
i18n (>= 1.6, < 2)
|
|
68
|
+
minitest (>= 5.1)
|
|
69
|
+
tzinfo (~> 2.0)
|
|
70
|
+
administrate (0.16.0)
|
|
71
|
+
actionpack (>= 5.0)
|
|
72
|
+
actionview (>= 5.0)
|
|
73
|
+
activerecord (>= 5.0)
|
|
74
|
+
datetime_picker_rails (~> 0.0.7)
|
|
75
|
+
jquery-rails (>= 4.0)
|
|
76
|
+
kaminari (>= 1.0)
|
|
77
|
+
momentjs-rails (~> 2.8)
|
|
78
|
+
sassc-rails (~> 2.1)
|
|
79
|
+
selectize-rails (~> 0.6)
|
|
80
|
+
ast (2.4.2)
|
|
81
|
+
builder (3.2.4)
|
|
82
|
+
concurrent-ruby (1.1.9)
|
|
83
|
+
crass (1.0.6)
|
|
84
|
+
datetime_picker_rails (0.0.7)
|
|
85
|
+
momentjs-rails (>= 2.8.1)
|
|
86
|
+
erubi (1.10.0)
|
|
87
|
+
ffi (1.15.4)
|
|
88
|
+
globalid (1.0.0)
|
|
89
|
+
activesupport (>= 5.0)
|
|
90
|
+
highline (2.0.3)
|
|
91
|
+
i18n (1.8.11)
|
|
92
|
+
concurrent-ruby (~> 1.0)
|
|
93
|
+
i18n-tasks (0.9.37)
|
|
94
|
+
activesupport (>= 4.0.2)
|
|
95
|
+
ast (>= 2.1.0)
|
|
96
|
+
erubi
|
|
97
|
+
highline (>= 2.0.0)
|
|
98
|
+
i18n
|
|
99
|
+
parser (>= 2.2.3.0)
|
|
100
|
+
rails-i18n
|
|
101
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
102
|
+
terminal-table (>= 1.5.1)
|
|
103
|
+
jquery-rails (4.4.0)
|
|
104
|
+
rails-dom-testing (>= 1, < 3)
|
|
105
|
+
railties (>= 4.2.0)
|
|
106
|
+
thor (>= 0.14, < 2.0)
|
|
107
|
+
kaminari (1.2.2)
|
|
108
|
+
activesupport (>= 4.1.0)
|
|
109
|
+
kaminari-actionview (= 1.2.2)
|
|
110
|
+
kaminari-activerecord (= 1.2.2)
|
|
111
|
+
kaminari-core (= 1.2.2)
|
|
112
|
+
kaminari-actionview (1.2.2)
|
|
113
|
+
actionview
|
|
114
|
+
kaminari-core (= 1.2.2)
|
|
115
|
+
kaminari-activerecord (1.2.2)
|
|
116
|
+
activerecord
|
|
117
|
+
kaminari-core (= 1.2.2)
|
|
118
|
+
kaminari-core (1.2.2)
|
|
119
|
+
loofah (2.13.0)
|
|
120
|
+
crass (~> 1.0.2)
|
|
121
|
+
nokogiri (>= 1.5.9)
|
|
122
|
+
mail (2.7.1)
|
|
123
|
+
mini_mime (>= 0.1.1)
|
|
124
|
+
marcel (1.0.2)
|
|
125
|
+
method_source (1.0.0)
|
|
126
|
+
mini_mime (1.1.2)
|
|
127
|
+
minitest (5.15.0)
|
|
128
|
+
momentjs-rails (2.29.1)
|
|
129
|
+
railties (>= 3.1)
|
|
130
|
+
nio4r (2.5.8)
|
|
131
|
+
nokogiri (1.13.3-x86_64-darwin)
|
|
132
|
+
racc (~> 1.4)
|
|
133
|
+
nokogiri (1.13.3-x86_64-linux)
|
|
134
|
+
racc (~> 1.4)
|
|
135
|
+
parser (3.0.3.2)
|
|
136
|
+
ast (~> 2.4.1)
|
|
137
|
+
racc (1.6.0)
|
|
138
|
+
rack (2.2.3)
|
|
139
|
+
rack-test (1.1.0)
|
|
140
|
+
rack (>= 1.0, < 3)
|
|
141
|
+
rails (7.0.0)
|
|
142
|
+
actioncable (= 7.0.0)
|
|
143
|
+
actionmailbox (= 7.0.0)
|
|
144
|
+
actionmailer (= 7.0.0)
|
|
145
|
+
actionpack (= 7.0.0)
|
|
146
|
+
actiontext (= 7.0.0)
|
|
147
|
+
actionview (= 7.0.0)
|
|
148
|
+
activejob (= 7.0.0)
|
|
149
|
+
activemodel (= 7.0.0)
|
|
150
|
+
activerecord (= 7.0.0)
|
|
151
|
+
activestorage (= 7.0.0)
|
|
152
|
+
activesupport (= 7.0.0)
|
|
153
|
+
bundler (>= 1.15.0)
|
|
154
|
+
railties (= 7.0.0)
|
|
155
|
+
rails-dom-testing (2.0.3)
|
|
156
|
+
activesupport (>= 4.2.0)
|
|
157
|
+
nokogiri (>= 1.6)
|
|
158
|
+
rails-html-sanitizer (1.4.2)
|
|
159
|
+
loofah (~> 2.3)
|
|
160
|
+
rails-i18n (7.0.1)
|
|
161
|
+
i18n (>= 0.7, < 2)
|
|
162
|
+
railties (>= 6.0.0, < 8)
|
|
163
|
+
railties (7.0.0)
|
|
164
|
+
actionpack (= 7.0.0)
|
|
165
|
+
activesupport (= 7.0.0)
|
|
166
|
+
method_source
|
|
167
|
+
rake (>= 12.2)
|
|
168
|
+
thor (~> 1.0)
|
|
169
|
+
zeitwerk (~> 2.5)
|
|
170
|
+
rainbow (3.0.0)
|
|
171
|
+
rake (13.0.6)
|
|
172
|
+
sassc (2.4.0)
|
|
173
|
+
ffi (~> 1.9)
|
|
174
|
+
sassc-rails (2.1.2)
|
|
175
|
+
railties (>= 4.0.0)
|
|
176
|
+
sassc (>= 2.0)
|
|
177
|
+
sprockets (> 3.0)
|
|
178
|
+
sprockets-rails
|
|
179
|
+
tilt
|
|
180
|
+
selectize-rails (0.12.6)
|
|
181
|
+
sprockets (4.0.2)
|
|
182
|
+
concurrent-ruby (~> 1.0)
|
|
183
|
+
rack (> 1, < 3)
|
|
184
|
+
sprockets-rails (3.4.2)
|
|
185
|
+
actionpack (>= 5.2)
|
|
186
|
+
activesupport (>= 5.2)
|
|
187
|
+
sprockets (>= 3.0.0)
|
|
188
|
+
sqlite3 (1.4.2)
|
|
189
|
+
terminal-table (3.0.2)
|
|
190
|
+
unicode-display_width (>= 1.1.1, < 3)
|
|
191
|
+
thor (1.1.0)
|
|
192
|
+
tilt (2.0.10)
|
|
193
|
+
tzinfo (2.0.4)
|
|
194
|
+
concurrent-ruby (~> 1.0)
|
|
195
|
+
unicode-display_width (2.1.0)
|
|
196
|
+
websocket-driver (0.7.5)
|
|
197
|
+
websocket-extensions (>= 0.1.0)
|
|
198
|
+
websocket-extensions (0.1.5)
|
|
199
|
+
zeitwerk (2.5.2)
|
|
200
|
+
|
|
201
|
+
PLATFORMS
|
|
202
|
+
x86_64-darwin-20
|
|
203
|
+
x86_64-linux
|
|
204
|
+
|
|
205
|
+
DEPENDENCIES
|
|
206
|
+
administrate-field-active_storage!
|
|
207
|
+
i18n-tasks (~> 0.9.34)
|
|
208
|
+
sqlite3 (~> 1.4)
|
|
209
|
+
|
|
210
|
+
BUNDLED WITH
|
|
211
|
+
2.2.33
|
data/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# Administrate::Field::ActiveStorage
|
|
2
2
|

|
|
3
|
+

|
|
3
4
|
|
|
4
5
|
## Things To Know:
|
|
5
6
|
- To preview pdf files you need to install `mupdf` or `Poppler`.
|
|
@@ -16,7 +17,7 @@ gem "image_processing"
|
|
|
16
17
|
|
|
17
18
|
for rails 5.x use the following
|
|
18
19
|
```ruby
|
|
19
|
-
gem 'administrate-field-active_storage'
|
|
20
|
+
gem 'administrate-field-active_storage', "0.1.8"
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
Install:
|
|
@@ -59,6 +60,8 @@ class ModelDashboard < Administrate::BaseDashboard
|
|
|
59
60
|
```
|
|
60
61
|
I know it is not ideal, if you have a workaround please submit a PR.
|
|
61
62
|
|
|
63
|
+
Note: Rails 6 introduced a new config to determine the behavior on updates to `has_many_attached`. Setting `Rails.application.config.active_storage.replace_on_assign_to_many` to `true` will overwrite any existing values (purging the old ones), and setting it to `false` will append the new values.
|
|
64
|
+
|
|
62
65
|
### Prevent N+1 queries
|
|
63
66
|
In order to prevent N+1 queries from active storage you have to modify your admin model controller, below an example for a model called `User` and with attached avatars
|
|
64
67
|
```ruby
|
|
@@ -187,6 +190,17 @@ for documentation.
|
|
|
187
190
|
|
|
188
191
|
Default to `[150, 150]` and `[800, 800]`, respectively.
|
|
189
192
|
|
|
193
|
+
### index_preview_variant and show_preview_variant
|
|
194
|
+
|
|
195
|
+
Use a named variant for image preview for the `index` and `show` actions, respectively.
|
|
196
|
+
Named image variants were [added in Rails 7](https://guides.rubyonrails.org/v7.0/active_storage_overview.html#has-one-attached).
|
|
197
|
+
|
|
198
|
+
It might be necessary to add to app/assets/config/manifest.js:
|
|
199
|
+
```rb
|
|
200
|
+
//= link 'administrate-field-active_storage/application.css'
|
|
201
|
+
```
|
|
202
|
+
When set, this takes precedence over `index_preview_size` and `show_preview_size`.
|
|
203
|
+
|
|
190
204
|
### index_display_count
|
|
191
205
|
|
|
192
206
|
Displays the number of attachments in the `index` action.
|
|
@@ -201,6 +215,10 @@ Defaults to `false`.
|
|
|
201
215
|
|
|
202
216
|
Don't forget to include [ActiveStorage JavaScript](https://edgeguides.rubyonrails.org/active_storage_overview.html#direct-uploads). You can use `rails generate administrate:assets:javascripts` to be able to customize Administrate JavaScripts in your application.
|
|
203
217
|
|
|
218
|
+
## I18n
|
|
219
|
+
|
|
220
|
+
You can see translation example [here](https://github.com/Dreamersoul/administrate-field-active_storage/blob/master/config/locales/administrate-field-active_storage.en.yml).
|
|
221
|
+
|
|
204
222
|
## Things To Do:
|
|
205
223
|
- [x] upload single file
|
|
206
224
|
- [x] adding image support through url_for to support 3rd party cloud storage
|
|
@@ -215,8 +233,9 @@ Don't forget to include [ActiveStorage JavaScript](https://edgeguides.rubyonrail
|
|
|
215
233
|
|
|
216
234
|
## Contribution Guide:
|
|
217
235
|
1. contributers are welcome (code, suggestions, and bugs).
|
|
218
|
-
2. please
|
|
219
|
-
3.
|
|
236
|
+
2. please test your code: `cd test_app && bundle && bundle exec rails test`.
|
|
237
|
+
3. please document your code.
|
|
238
|
+
4. add your name to the `contribute.md`.
|
|
220
239
|
|
|
221
240
|
---
|
|
222
241
|
Based on the [Administrate::Field::Image](https://github.com/thoughtbot/administrate-field-image) template, and inspired by [Administrate::Field::Paperclip](https://github.com/picandocodigo/administrate-field-paperclip).
|
|
@@ -2,7 +2,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |gem|
|
|
4
4
|
gem.name = "administrate-field-active_storage"
|
|
5
|
-
gem.version = "0.
|
|
5
|
+
gem.version = "0.4.0"
|
|
6
6
|
gem.authors = ["Hamad AlGhanim"]
|
|
7
7
|
gem.email = ["hamadyalghanim@gmail.com"]
|
|
8
8
|
gem.homepage = "https://github.com/Dreamersoul/administrate-field-active_storage"
|
|
@@ -15,7 +15,8 @@ Gem::Specification.new do |gem|
|
|
|
15
15
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
16
16
|
|
|
17
17
|
gem.add_dependency "administrate", ">= 0.2.2"
|
|
18
|
-
gem.add_dependency "rails", ">=
|
|
18
|
+
gem.add_dependency "rails", ">= 7.0"
|
|
19
19
|
|
|
20
|
-
gem.add_development_dependency
|
|
20
|
+
gem.add_development_dependency 'sqlite3', '~> 1.4'
|
|
21
|
+
gem.add_development_dependency 'i18n-tasks', '~> 0.9.34'
|
|
21
22
|
end
|
|
@@ -25,7 +25,10 @@ By default, the input is a text field for the image's URL.
|
|
|
25
25
|
<% end %>
|
|
26
26
|
|
|
27
27
|
<div>
|
|
28
|
-
<%= field.can_add_attachment? ?
|
|
28
|
+
<%= field.can_add_attachment? ?
|
|
29
|
+
I18n.t("administrate.fields.active_storage.add", default: 'Add') :
|
|
30
|
+
I18n.t("administrate.fields.active_storage.replace", default: 'Replace')
|
|
31
|
+
%>
|
|
29
32
|
<%= f.file_field field.attribute, multiple: field.many?, direct_upload: field.direct? %>
|
|
30
33
|
</div>
|
|
31
34
|
</div>
|
|
@@ -16,23 +16,31 @@ By default, the attribute is rendered as an image tag.
|
|
|
16
16
|
%>
|
|
17
17
|
|
|
18
18
|
<% if field.attached? %>
|
|
19
|
-
<style> <%# figure out a way to remove this %>
|
|
20
|
-
td img {
|
|
21
|
-
max-height: unset !important;
|
|
22
|
-
}
|
|
23
|
-
</style>
|
|
24
19
|
<% if field.index_display_preview? %>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
<% if field.many? %>
|
|
21
|
+
<%= render partial: 'fields/active_storage/items',
|
|
22
|
+
locals: {
|
|
23
|
+
field: field,
|
|
24
|
+
variant: field.index_preview_variant,
|
|
25
|
+
size: field.index_preview_size
|
|
26
|
+
} %>
|
|
27
|
+
<% else %>
|
|
28
|
+
<%= render partial: 'fields/active_storage/item',
|
|
29
|
+
locals: {
|
|
30
|
+
field: field,
|
|
31
|
+
attachment: field.data,
|
|
32
|
+
variant: field.index_preview_variant,
|
|
33
|
+
size: field.index_preview_size
|
|
34
|
+
} %>
|
|
35
|
+
<% end %>
|
|
31
36
|
<% end %>
|
|
32
37
|
|
|
33
38
|
<% if field.index_display_count? %>
|
|
34
39
|
<div class="attachments-count">
|
|
35
|
-
<%= pluralize(field.attachments.count,
|
|
40
|
+
<%= pluralize(field.attachments.count,
|
|
41
|
+
I18n.t("administrate.fields.active_storage.attachment", default: 'Attachment')
|
|
42
|
+
)
|
|
43
|
+
%>
|
|
36
44
|
</div>
|
|
37
45
|
<% end %>
|
|
38
46
|
<% end %>
|
|
@@ -36,7 +36,8 @@ controlled via a boolean local variable.
|
|
|
36
36
|
<% if field.destroy_url.present? %>
|
|
37
37
|
<% destroy_url = field.destroy_url.call(namespace, field.data.record, attachment) %>
|
|
38
38
|
<div>
|
|
39
|
-
<%= link_to
|
|
39
|
+
<%= link_to I18n.t("administrate.fields.active_storage.remove", default: 'Remove'),
|
|
40
|
+
destroy_url, method: :delete, class: 'remove-attachment-link', data: { confirm: t("administrate.actions.confirm") } %>
|
|
40
41
|
</div>
|
|
41
42
|
<hr>
|
|
42
43
|
<% end %>
|
|
@@ -11,10 +11,16 @@ This partial renders one or more attachments
|
|
|
11
11
|
- `removable`:
|
|
12
12
|
A boolean used to control the display of a `Remove` link which
|
|
13
13
|
is used to destroy a single attachment. Defaults to `false`
|
|
14
|
+
- `size`:
|
|
15
|
+
[x, y]
|
|
16
|
+
Maximum size of the ActiveStorage preview.
|
|
17
|
+
Defaults to `field.show_preview_size`.
|
|
14
18
|
%>
|
|
15
19
|
|
|
16
20
|
<%
|
|
17
21
|
removable = local_assigns.fetch(:removable, false)
|
|
22
|
+
variant = local_assigns.fetch(:variant, field.show_preview_variant)
|
|
23
|
+
size = local_assigns.fetch(:size, field.show_preview_size)
|
|
18
24
|
%>
|
|
19
25
|
|
|
20
26
|
<% field.attachments.each do |attachment| %>
|
|
@@ -24,7 +30,8 @@ This partial renders one or more attachments
|
|
|
24
30
|
field: field,
|
|
25
31
|
attachment: attachment,
|
|
26
32
|
removable: removable,
|
|
27
|
-
|
|
33
|
+
variant: variant,
|
|
34
|
+
size: size
|
|
28
35
|
} %>
|
|
29
36
|
</div>
|
|
30
37
|
<% end %>
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
<div
|
|
1
|
+
<div class="as-field as-field-<%= action_name %>">
|
|
2
2
|
<% if attachment.image? %>
|
|
3
3
|
<% if attachment.variable? %>
|
|
4
|
-
|
|
4
|
+
<% if variant.nil? %>
|
|
5
|
+
<%= image_tag(field.variant(attachment, resize_to_limit: size)) %>
|
|
6
|
+
<% else %>
|
|
7
|
+
<%= image_tag(attachment.variant(variant)) %>
|
|
8
|
+
<% end %>
|
|
5
9
|
<% else %>
|
|
6
10
|
<%= image_tag(field.url(attachment)) %>
|
|
7
11
|
<% end %>
|
|
@@ -11,9 +15,9 @@
|
|
|
11
15
|
poster: field.preview(attachment, resize_to_limit: size),
|
|
12
16
|
controls: true,
|
|
13
17
|
autobuffer: true,
|
|
14
|
-
|
|
18
|
+
id: "as-field-video-#{attachment.id}") %>
|
|
15
19
|
<% else %>
|
|
16
|
-
<%= video_tag(field.url(attachment), controls: true, autobuffer: true,
|
|
20
|
+
<%= video_tag(field.url(attachment), controls: true, autobuffer: true, class: "as-field-video") %>
|
|
17
21
|
<% end %>
|
|
18
22
|
<% elsif attachment.audio? %>
|
|
19
23
|
<%= audio_tag(field.url(attachment), autoplay: false, controls: true) %>
|
|
@@ -18,5 +18,5 @@ By default, the attribute is rendered as an image tag.
|
|
|
18
18
|
<% if field.attached? %>
|
|
19
19
|
<%= render partial: 'fields/active_storage/items', locals: { field: field } %>
|
|
20
20
|
<% else %>
|
|
21
|
-
No attachment
|
|
21
|
+
<%= I18n.t("administrate.fields.active_storage.no_attachment", default: 'No attachment') %>
|
|
22
22
|
<% end %>
|
data/contribute.md
CHANGED
|
@@ -5,6 +5,7 @@ module Administrate
|
|
|
5
5
|
module Field
|
|
6
6
|
class ActiveStorage < Administrate::Field::Base
|
|
7
7
|
class Engine < ::Rails::Engine
|
|
8
|
+
Administrate::Engine.add_stylesheet "administrate-field-active_storage/application"
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def index_display_preview?
|
|
@@ -15,6 +16,10 @@ module Administrate
|
|
|
15
16
|
options.fetch(:index_preview_size, [150, 150])
|
|
16
17
|
end
|
|
17
18
|
|
|
19
|
+
def index_preview_variant
|
|
20
|
+
options.fetch(:index_preview_variant, nil)
|
|
21
|
+
end
|
|
22
|
+
|
|
18
23
|
def index_display_count?
|
|
19
24
|
options.fetch(:index_display_count) { attached? && attachments.count != 1 }
|
|
20
25
|
end
|
|
@@ -27,6 +32,10 @@ module Administrate
|
|
|
27
32
|
options.fetch(:show_preview_size, [800, 800])
|
|
28
33
|
end
|
|
29
34
|
|
|
35
|
+
def show_preview_variant
|
|
36
|
+
options.fetch(:show_preview_variant, nil)
|
|
37
|
+
end
|
|
38
|
+
|
|
30
39
|
def many?
|
|
31
40
|
data.is_a? ::ActiveStorage::Attached::Many
|
|
32
41
|
end
|
|
@@ -70,7 +79,7 @@ module Administrate
|
|
|
70
79
|
end
|
|
71
80
|
|
|
72
81
|
def attachments
|
|
73
|
-
data.attachments if attached?
|
|
82
|
+
many? ? data.attachments : [data.attachment] if attached?
|
|
74
83
|
end
|
|
75
84
|
end
|
|
76
85
|
end
|
data/spec/i18n_spec.rb
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'i18n/tasks'
|
|
4
|
+
|
|
5
|
+
# Template i18n-tasks test file from https://github.com/glebm/i18n-tasks/blob/main/templates/rspec/i18n_spec.rb
|
|
6
|
+
RSpec.describe I18n do
|
|
7
|
+
let(:i18n) { I18n::Tasks::BaseTask.new }
|
|
8
|
+
let(:missing_keys) { i18n.missing_keys }
|
|
9
|
+
let(:unused_keys) { i18n.unused_keys }
|
|
10
|
+
let(:inconsistent_interpolations) { i18n.inconsistent_interpolations }
|
|
11
|
+
|
|
12
|
+
it 'does not have missing keys' do
|
|
13
|
+
expect(missing_keys).to be_empty,
|
|
14
|
+
"Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'does not have unused keys' do
|
|
18
|
+
expect(unused_keys).to be_empty,
|
|
19
|
+
"#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'files are normalized' do
|
|
23
|
+
non_normalized = i18n.non_normalized_paths
|
|
24
|
+
error_message = "The following files need to be normalized:\n" \
|
|
25
|
+
"#{non_normalized.map { |path| " #{path}" }.join("\n")}\n" \
|
|
26
|
+
"Please run `i18n-tasks normalize' to fix"
|
|
27
|
+
expect(non_normalized).to be_empty, error_message
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'does not have inconsistent interpolations' do
|
|
31
|
+
error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \
|
|
32
|
+
"Run `i18n-tasks check-consistent-interpolations' to show them"
|
|
33
|
+
expect(inconsistent_interpolations).to be_empty, error_message
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
defaults
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# See https://git-scm.com/docs/gitattributes for more about git attribute files.
|
|
2
|
+
|
|
3
|
+
# Mark the database schema as having been generated.
|
|
4
|
+
db/schema.rb linguist-generated
|
|
5
|
+
|
|
6
|
+
# Mark the yarn lockfile as having been generated.
|
|
7
|
+
yarn.lock linguist-generated
|
|
8
|
+
|
|
9
|
+
# Mark any vendored files as having been vendored.
|
|
10
|
+
vendor/* linguist-vendored
|
|
@@ -9,22 +9,24 @@
|
|
|
9
9
|
|
|
10
10
|
# Ignore the default SQLite database.
|
|
11
11
|
/db/*.sqlite3
|
|
12
|
-
/db/*.sqlite3
|
|
12
|
+
/db/*.sqlite3-*
|
|
13
13
|
|
|
14
14
|
# Ignore all logfiles and tempfiles.
|
|
15
15
|
/log/*
|
|
16
16
|
/tmp/*
|
|
17
|
-
!/log/.keep
|
|
18
|
-
!/tmp/.keep
|
|
19
17
|
|
|
20
|
-
# Ignore uploaded files in development
|
|
18
|
+
# Ignore uploaded files in development.
|
|
21
19
|
/storage/*
|
|
22
20
|
|
|
23
|
-
/node_modules
|
|
24
|
-
/yarn-error.log
|
|
25
|
-
|
|
26
21
|
/public/assets
|
|
27
22
|
.byebug_history
|
|
28
23
|
|
|
29
24
|
# Ignore master key for decrypting credentials and more.
|
|
30
25
|
/config/master.key
|
|
26
|
+
|
|
27
|
+
/public/packs
|
|
28
|
+
/public/packs-test
|
|
29
|
+
/node_modules
|
|
30
|
+
/yarn-error.log
|
|
31
|
+
yarn-debug.log*
|
|
32
|
+
.yarn-integrity
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby-3.0.0
|