administrate-field-active_storage 0.3.6 → 0.3.7

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +21 -0
  3. data/.gitignore +0 -1
  4. data/.ruby-version +1 -1
  5. data/Gemfile.lock +217 -0
  6. data/README.md +8 -1
  7. data/administrate-field-active_storage.gemspec +3 -2
  8. data/app/views/fields/active_storage/_form.html.erb +4 -1
  9. data/app/views/fields/active_storage/_index.html.erb +4 -1
  10. data/app/views/fields/active_storage/_item.html.erb +2 -1
  11. data/app/views/fields/active_storage/_show.html.erb +1 -1
  12. data/config/i18n-tasks.yml +8 -0
  13. data/config/locales/administrate-field-active_storage.en.yml +10 -0
  14. data/config/locales/administrate-field-active_storage.ru.yml +10 -0
  15. data/contribute.md +1 -0
  16. data/lib/administrate/field/active_storage.rb +1 -1
  17. data/spec/i18n_spec.rb +35 -0
  18. data/test_app/.browserslistrc +1 -0
  19. data/test_app/.gitattributes +10 -0
  20. data/{example-project → test_app}/.gitignore +9 -7
  21. data/test_app/.ruby-version +1 -0
  22. data/test_app/Gemfile +45 -0
  23. data/test_app/Gemfile.lock +237 -0
  24. data/{example-project → test_app}/README.md +0 -0
  25. data/{example-project → test_app}/Rakefile +1 -1
  26. data/test_app/app/assets/config/manifest.js +4 -0
  27. data/{example-project → test_app}/app/assets/images/.keep +0 -0
  28. data/{example-project → test_app}/app/assets/stylesheets/application.css +0 -0
  29. data/{example-project → test_app}/app/controllers/admin/application_controller.rb +3 -3
  30. data/test_app/app/controllers/admin/posts_controller.rb +46 -0
  31. data/{example-project → test_app}/app/controllers/application_controller.rb +0 -0
  32. data/{example-project/app/dashboards/user_dashboard.rb → test_app/app/dashboards/post_dashboard.rb} +29 -27
  33. data/{example-project → test_app}/app/helpers/application_helper.rb +0 -0
  34. data/test_app/app/javascript/packs/application.js +10 -0
  35. data/{example-project → test_app}/app/models/application_record.rb +0 -0
  36. data/test_app/app/models/post.rb +3 -0
  37. data/test_app/app/views/layouts/application.html.erb +16 -0
  38. data/test_app/bin/bundle +114 -0
  39. data/test_app/bin/rails +4 -0
  40. data/test_app/bin/rake +4 -0
  41. data/{example-project → test_app}/bin/setup +6 -9
  42. data/{example-project → test_app}/config.ru +2 -1
  43. data/test_app/config/application.rb +35 -0
  44. data/{example-project/bin/bundle → test_app/config/boot.rb} +2 -2
  45. data/test_app/config/credentials.yml.enc +1 -0
  46. data/{example-project → test_app}/config/database.yml +1 -1
  47. data/{example-project → test_app}/config/environment.rb +1 -1
  48. data/{example-project → test_app}/config/environments/development.rb +21 -11
  49. data/{example-project → test_app}/config/environments/production.rb +36 -24
  50. data/{example-project → test_app}/config/environments/test.rb +20 -14
  51. data/{example-project → test_app}/config/initializers/application_controller_renderer.rb +0 -0
  52. data/{example-project → test_app}/config/initializers/assets.rb +0 -0
  53. data/test_app/config/initializers/backtrace_silencers.rb +8 -0
  54. data/{example-project → test_app}/config/initializers/content_security_policy.rb +5 -0
  55. data/{example-project → test_app}/config/initializers/cookies_serializer.rb +0 -0
  56. data/{example-project → test_app}/config/initializers/filter_parameter_logging.rb +3 -1
  57. data/{example-project → test_app}/config/initializers/inflections.rb +0 -0
  58. data/{example-project → test_app}/config/initializers/mime_types.rb +0 -0
  59. data/test_app/config/initializers/permissions_policy.rb +11 -0
  60. data/{example-project → test_app}/config/initializers/wrap_parameters.rb +0 -0
  61. data/{example-project → test_app}/config/locales/en.yml +1 -1
  62. data/{example-project → test_app}/config/puma.rb +13 -4
  63. data/test_app/config/routes.rb +9 -0
  64. data/{example-project → test_app}/config/storage.yml +0 -0
  65. 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
  66. data/test_app/db/migrate/20210118122927_create_posts.rb +8 -0
  67. data/{example-project → test_app}/db/schema.rb +18 -10
  68. data/{example-project → test_app}/db/seeds.rb +1 -1
  69. data/test_app/lib/active_storage/fixture_set.rb +71 -0
  70. data/{example-project → test_app}/public/404.html +0 -0
  71. data/{example-project → test_app}/public/422.html +0 -0
  72. data/{example-project → test_app}/public/500.html +0 -0
  73. data/{example-project → test_app}/public/apple-touch-icon-precomposed.png +0 -0
  74. data/{example-project → test_app}/public/apple-touch-icon.png +0 -0
  75. data/{example-project → test_app}/public/favicon.ico +0 -0
  76. data/test_app/public/robots.txt +1 -0
  77. data/{example-project → test_app}/test/application_system_test_case.rb +0 -0
  78. data/test_app/test/controllers/admin/posts_controller_test.rb +14 -0
  79. data/test_app/test/fixtures/active_storage/attachments.yml +4 -0
  80. data/test_app/test/fixtures/active_storage/blobs.yml +2 -0
  81. data/test_app/test/fixtures/files/cover_image.jpg +0 -0
  82. data/test_app/test/fixtures/posts.yml +11 -0
  83. data/test_app/test/models/post_test.rb +9 -0
  84. data/test_app/test/test_helper.rb +20 -0
  85. metadata +97 -99
  86. data/Rakefile +0 -22
  87. data/example-project/.ruby-version +0 -1
  88. data/example-project/Gemfile +0 -67
  89. data/example-project/Gemfile.lock +0 -265
  90. data/example-project/app/assets/config/manifest.js +0 -3
  91. data/example-project/app/assets/javascripts/application.js +0 -16
  92. data/example-project/app/assets/javascripts/cable.js +0 -13
  93. data/example-project/app/assets/javascripts/channels/.keep +0 -0
  94. data/example-project/app/channels/application_cable/channel.rb +0 -4
  95. data/example-project/app/channels/application_cable/connection.rb +0 -4
  96. data/example-project/app/controllers/admin/users_controller.rb +0 -27
  97. data/example-project/app/controllers/concerns/.keep +0 -0
  98. data/example-project/app/controllers/users_controller.rb +0 -7
  99. data/example-project/app/jobs/application_job.rb +0 -2
  100. data/example-project/app/mailers/application_mailer.rb +0 -4
  101. data/example-project/app/models/concerns/.keep +0 -0
  102. data/example-project/app/models/user.rb +0 -3
  103. data/example-project/app/views/layouts/application.html.erb +0 -15
  104. data/example-project/app/views/layouts/mailer.html.erb +0 -13
  105. data/example-project/app/views/layouts/mailer.text.erb +0 -1
  106. data/example-project/bin/rails +0 -9
  107. data/example-project/bin/rake +0 -9
  108. data/example-project/bin/spring +0 -17
  109. data/example-project/bin/update +0 -31
  110. data/example-project/bin/yarn +0 -11
  111. data/example-project/config/application.rb +0 -19
  112. data/example-project/config/boot.rb +0 -4
  113. data/example-project/config/cable.yml +0 -10
  114. data/example-project/config/credentials.yml.enc +0 -1
  115. data/example-project/config/initializers/backtrace_silencers.rb +0 -7
  116. data/example-project/config/routes.rb +0 -10
  117. data/example-project/config/spring.rb +0 -6
  118. data/example-project/db/migrate/20181013145025_create_users.rb +0 -9
  119. data/example-project/lib/assets/.keep +0 -0
  120. data/example-project/lib/tasks/.keep +0 -0
  121. data/example-project/log/.keep +0 -0
  122. data/example-project/package.json +0 -5
  123. data/example-project/public/robots.txt +0 -1
  124. data/example-project/test/controllers/.keep +0 -0
  125. data/example-project/test/fixtures/.keep +0 -0
  126. data/example-project/test/fixtures/files/.keep +0 -0
  127. data/example-project/test/fixtures/users.yml +0 -7
  128. data/example-project/test/helpers/.keep +0 -0
  129. data/example-project/test/integration/.keep +0 -0
  130. data/example-project/test/mailers/.keep +0 -0
  131. data/example-project/test/models/.keep +0 -0
  132. data/example-project/test/models/user_test.rb +0 -7
  133. data/example-project/test/system/.keep +0 -0
  134. data/example-project/test/test_helper.rb +0 -10
  135. data/example-project/tmp/.keep +0 -0
  136. data/example-project/vendor/.keep +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3930e26efcb0aa795b6606100a6dd6e8da523f80e7f201def1aa5ab79219217
4
- data.tar.gz: '0286fd8dcca57e38402f283fef4971b62cb88d909d4a6d00255aaffa3581286e'
3
+ metadata.gz: 400847147cef13ebaf2becff0f8d6f60ab159e42373aab67e39d7823900b7061
4
+ data.tar.gz: 28dcb24685789156e988f3aa1a2065a50c6d147e1863b277cc93c6ce73d91f56
5
5
  SHA512:
6
- metadata.gz: 2942162811a236a3adc02f9607a2d941f002e40b422b3a39c83a148666390542eb15235ae3a6f65d906b3a2075b19e7946e4278091af55ce254ad423886ae923
7
- data.tar.gz: 4e7800b780d17f2bf6ee6faa0d0b11a1e22e1456397d46d8e38a04d619be800ae7fc2778364c23f1041ef1e42c34276b11db8ca58fd34906db5822d42a99ccb1
6
+ metadata.gz: a4395b379fb47e7efc923ef5c69cdc7d85f26f0cb1aa0efde7b31cd8f7dd4916f6ca650d94a8772d1a522510669fc0f125a02e69399e6d7ee0c68972c232934f
7
+ data.tar.gz: c9966fd2cc8194963455def07ea138d28a19394d680c14edad1ec7d05740eedd7856dd1484ad4f16dd8db76eefaf0dab0993dde43e907d92a7a330798f53531f
@@ -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
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.5
1
+ 3.0.0
data/Gemfile.lock ADDED
@@ -0,0 +1,217 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ administrate-field-active_storage (0.3.6)
5
+ administrate (>= 0.2.2)
6
+ rails (>= 6.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actioncable (6.1.1)
12
+ actionpack (= 6.1.1)
13
+ activesupport (= 6.1.1)
14
+ nio4r (~> 2.0)
15
+ websocket-driver (>= 0.6.1)
16
+ actionmailbox (6.1.1)
17
+ actionpack (= 6.1.1)
18
+ activejob (= 6.1.1)
19
+ activerecord (= 6.1.1)
20
+ activestorage (= 6.1.1)
21
+ activesupport (= 6.1.1)
22
+ mail (>= 2.7.1)
23
+ actionmailer (6.1.1)
24
+ actionpack (= 6.1.1)
25
+ actionview (= 6.1.1)
26
+ activejob (= 6.1.1)
27
+ activesupport (= 6.1.1)
28
+ mail (~> 2.5, >= 2.5.4)
29
+ rails-dom-testing (~> 2.0)
30
+ actionpack (6.1.1)
31
+ actionview (= 6.1.1)
32
+ activesupport (= 6.1.1)
33
+ rack (~> 2.0, >= 2.0.9)
34
+ rack-test (>= 0.6.3)
35
+ rails-dom-testing (~> 2.0)
36
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
37
+ actiontext (6.1.1)
38
+ actionpack (= 6.1.1)
39
+ activerecord (= 6.1.1)
40
+ activestorage (= 6.1.1)
41
+ activesupport (= 6.1.1)
42
+ nokogiri (>= 1.8.5)
43
+ actionview (6.1.1)
44
+ activesupport (= 6.1.1)
45
+ builder (~> 3.1)
46
+ erubi (~> 1.4)
47
+ rails-dom-testing (~> 2.0)
48
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
49
+ activejob (6.1.1)
50
+ activesupport (= 6.1.1)
51
+ globalid (>= 0.3.6)
52
+ activemodel (6.1.1)
53
+ activesupport (= 6.1.1)
54
+ activerecord (6.1.1)
55
+ activemodel (= 6.1.1)
56
+ activesupport (= 6.1.1)
57
+ activestorage (6.1.1)
58
+ actionpack (= 6.1.1)
59
+ activejob (= 6.1.1)
60
+ activerecord (= 6.1.1)
61
+ activesupport (= 6.1.1)
62
+ marcel (~> 0.3.1)
63
+ mimemagic (~> 0.3.2)
64
+ activesupport (6.1.1)
65
+ concurrent-ruby (~> 1.0, >= 1.0.2)
66
+ i18n (>= 1.6, < 2)
67
+ minitest (>= 5.1)
68
+ tzinfo (~> 2.0)
69
+ zeitwerk (~> 2.3)
70
+ administrate (0.14.0)
71
+ actionpack (>= 4.2)
72
+ actionview (>= 4.2)
73
+ activerecord (>= 4.2)
74
+ autoprefixer-rails (>= 6.0)
75
+ datetime_picker_rails (~> 0.0.7)
76
+ jquery-rails (>= 4.0)
77
+ kaminari (>= 1.0)
78
+ momentjs-rails (~> 2.8)
79
+ sassc-rails (~> 2.1)
80
+ selectize-rails (~> 0.6)
81
+ ast (2.4.2)
82
+ autoprefixer-rails (10.2.0.0)
83
+ execjs
84
+ builder (3.2.4)
85
+ concurrent-ruby (1.1.8)
86
+ crass (1.0.6)
87
+ datetime_picker_rails (0.0.7)
88
+ momentjs-rails (>= 2.8.1)
89
+ erubi (1.10.0)
90
+ execjs (2.7.0)
91
+ ffi (1.14.2)
92
+ globalid (0.4.2)
93
+ activesupport (>= 4.2.0)
94
+ highline (2.0.3)
95
+ i18n (1.8.7)
96
+ concurrent-ruby (~> 1.0)
97
+ i18n-tasks (0.9.34)
98
+ activesupport (>= 4.0.2)
99
+ ast (>= 2.1.0)
100
+ erubi
101
+ highline (>= 2.0.0)
102
+ i18n
103
+ parser (>= 2.2.3.0)
104
+ rails-i18n
105
+ rainbow (>= 2.2.2, < 4.0)
106
+ terminal-table (>= 1.5.1)
107
+ jquery-rails (4.4.0)
108
+ rails-dom-testing (>= 1, < 3)
109
+ railties (>= 4.2.0)
110
+ thor (>= 0.14, < 2.0)
111
+ kaminari (1.2.1)
112
+ activesupport (>= 4.1.0)
113
+ kaminari-actionview (= 1.2.1)
114
+ kaminari-activerecord (= 1.2.1)
115
+ kaminari-core (= 1.2.1)
116
+ kaminari-actionview (1.2.1)
117
+ actionview
118
+ kaminari-core (= 1.2.1)
119
+ kaminari-activerecord (1.2.1)
120
+ activerecord
121
+ kaminari-core (= 1.2.1)
122
+ kaminari-core (1.2.1)
123
+ loofah (2.9.0)
124
+ crass (~> 1.0.2)
125
+ nokogiri (>= 1.5.9)
126
+ mail (2.7.1)
127
+ mini_mime (>= 0.1.1)
128
+ marcel (0.3.3)
129
+ mimemagic (~> 0.3.2)
130
+ method_source (1.0.0)
131
+ mimemagic (0.3.5)
132
+ mini_mime (1.0.2)
133
+ minitest (5.14.3)
134
+ momentjs-rails (2.20.1)
135
+ railties (>= 3.1)
136
+ nio4r (2.5.4)
137
+ nokogiri (1.11.1-x86_64-darwin)
138
+ racc (~> 1.4)
139
+ nokogiri (1.11.1-x86_64-linux)
140
+ racc (~> 1.4)
141
+ parser (3.0.0.0)
142
+ ast (~> 2.4.1)
143
+ racc (1.5.2)
144
+ rack (2.2.3)
145
+ rack-test (1.1.0)
146
+ rack (>= 1.0, < 3)
147
+ rails (6.1.1)
148
+ actioncable (= 6.1.1)
149
+ actionmailbox (= 6.1.1)
150
+ actionmailer (= 6.1.1)
151
+ actionpack (= 6.1.1)
152
+ actiontext (= 6.1.1)
153
+ actionview (= 6.1.1)
154
+ activejob (= 6.1.1)
155
+ activemodel (= 6.1.1)
156
+ activerecord (= 6.1.1)
157
+ activestorage (= 6.1.1)
158
+ activesupport (= 6.1.1)
159
+ bundler (>= 1.15.0)
160
+ railties (= 6.1.1)
161
+ sprockets-rails (>= 2.0.0)
162
+ rails-dom-testing (2.0.3)
163
+ activesupport (>= 4.2.0)
164
+ nokogiri (>= 1.6)
165
+ rails-html-sanitizer (1.3.0)
166
+ loofah (~> 2.3)
167
+ rails-i18n (6.0.0)
168
+ i18n (>= 0.7, < 2)
169
+ railties (>= 6.0.0, < 7)
170
+ railties (6.1.1)
171
+ actionpack (= 6.1.1)
172
+ activesupport (= 6.1.1)
173
+ method_source
174
+ rake (>= 0.8.7)
175
+ thor (~> 1.0)
176
+ rainbow (3.0.0)
177
+ rake (13.0.3)
178
+ sassc (2.4.0)
179
+ ffi (~> 1.9)
180
+ sassc-rails (2.1.2)
181
+ railties (>= 4.0.0)
182
+ sassc (>= 2.0)
183
+ sprockets (> 3.0)
184
+ sprockets-rails
185
+ tilt
186
+ selectize-rails (0.12.6)
187
+ sprockets (4.0.2)
188
+ concurrent-ruby (~> 1.0)
189
+ rack (> 1, < 3)
190
+ sprockets-rails (3.2.2)
191
+ actionpack (>= 4.0)
192
+ activesupport (>= 4.0)
193
+ sprockets (>= 3.0.0)
194
+ sqlite3 (1.4.2)
195
+ terminal-table (3.0.0)
196
+ unicode-display_width (~> 1.1, >= 1.1.1)
197
+ thor (1.1.0)
198
+ tilt (2.0.10)
199
+ tzinfo (2.0.4)
200
+ concurrent-ruby (~> 1.0)
201
+ unicode-display_width (1.7.0)
202
+ websocket-driver (0.7.3)
203
+ websocket-extensions (>= 0.1.0)
204
+ websocket-extensions (0.1.5)
205
+ zeitwerk (2.4.2)
206
+
207
+ PLATFORMS
208
+ x86_64-darwin-20
209
+ x86_64-linux
210
+
211
+ DEPENDENCIES
212
+ administrate-field-active_storage!
213
+ i18n-tasks (~> 0.9.34)
214
+ sqlite3 (~> 1.4)
215
+
216
+ BUNDLED WITH
217
+ 2.2.14
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Administrate::Field::ActiveStorage
2
2
  ![rails](https://img.shields.io/badge/rails-%3E%3D5.2.0-red.svg)
3
+ ![CI](https://github.com/Dreamersoul/administrate-field-active_storage/workflows/CI/badge.svg)
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' -v 0.1.8
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
@@ -201,6 +204,10 @@ Defaults to `false`.
201
204
 
202
205
  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
206
 
207
+ ## I18n
208
+
209
+ You can see translation example [here](https://github.com/Dreamersoul/administrate-field-active_storage/blob/master/config/locales/administrate-field-active_storage.en.yml).
210
+
204
211
  ## Things To Do:
205
212
  - [x] upload single file
206
213
  - [x] adding image support through url_for to support 3rd party cloud storage
@@ -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.3.6"
5
+ gem.version = "0.3.7"
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"
@@ -17,5 +17,6 @@ Gem::Specification.new do |gem|
17
17
  gem.add_dependency "administrate", ">= 0.2.2"
18
18
  gem.add_dependency "rails", ">= 6.0"
19
19
 
20
- gem.add_development_dependency "rspec", "~> 3.4"
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? ? "Add:" : "Replace:" %>
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>
@@ -32,7 +32,10 @@ By default, the attribute is rendered as an image tag.
32
32
 
33
33
  <% if field.index_display_count? %>
34
34
  <div class="attachments-count">
35
- <%= pluralize(field.attachments.count, 'Attachment') %>
35
+ <%= pluralize(field.attachments.count,
36
+ I18n.t("administrate.fields.active_storage.attachment", default: 'Attachment')
37
+ )
38
+ %>
36
39
  </div>
37
40
  <% end %>
38
41
  <% 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 'Remove', destroy_url, method: :delete, class: 'remove-attachment-link', data: { confirm: t("administrate.actions.confirm") } %>
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 %>
@@ -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 %>
@@ -0,0 +1,8 @@
1
+ base_locale: en
2
+
3
+ data:
4
+ read:
5
+ - config/locales/administrate-field-active_storage.%{locale}.yml
6
+
7
+ ignore:
8
+ - 'administrate.actions.*'
@@ -0,0 +1,10 @@
1
+ ---
2
+ en:
3
+ administrate:
4
+ fields:
5
+ active_storage:
6
+ add: Add
7
+ attachment: Attachment
8
+ no_attachment: No attachment
9
+ remove: Remove
10
+ replace: Replace
@@ -0,0 +1,10 @@
1
+ ---
2
+ ru:
3
+ administrate:
4
+ fields:
5
+ active_storage:
6
+ add: Добавить
7
+ attachment: Вложение
8
+ no_attachment: Нет
9
+ remove: Удалить
10
+ replace: Заменить
data/contribute.md CHANGED
@@ -13,3 +13,4 @@
13
13
  - Sébastien Dubois [@sedubois](https://github.com/sedubois)
14
14
  - Jazzy Gasper [@jazzygasper](https://github.com/jazzygasper)
15
15
  - David Ma [@taikon](https://github.com/taikon)
16
+ - Dmitry Davydov [@haukot](https://github.com/haukot)
@@ -70,7 +70,7 @@ module Administrate
70
70
  end
71
71
 
72
72
  def attachments
73
- data.attachments if attached?
73
+ many? ? data.attachments : [data.attachment] if attached?
74
74
  end
75
75
  end
76
76
  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