tessa 2.0 → 6.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -4
- data/app/assets/javascripts/tessa.esm.js +212 -173
- data/app/assets/javascripts/tessa.js +206 -167
- data/app/javascript/activestorage/file_checksum.ts +76 -0
- data/app/javascript/tessa/index.ts +264 -0
- data/app/javascript/tessa/types.ts +34 -0
- data/config/routes.rb +0 -1
- data/lib/tessa/simple_form/asset_input.rb +24 -25
- data/lib/tessa/version.rb +1 -1
- data/lib/tessa.rb +0 -80
- data/package.json +7 -2
- data/rollup.config.js +5 -5
- data/spec/dummy/app/models/single_asset_model.rb +1 -1
- data/spec/dummy/app/models/single_asset_model_form.rb +3 -5
- data/spec/dummy/bin/rails +2 -2
- data/spec/dummy/bin/rake +2 -2
- data/spec/dummy/bin/setup +14 -6
- data/spec/dummy/bin/yarn +9 -3
- data/spec/dummy/config/application.rb +11 -9
- data/spec/dummy/config/boot.rb +1 -1
- data/spec/dummy/config/environment.rb +1 -1
- data/spec/dummy/config/environments/development.rb +34 -5
- data/spec/dummy/config/environments/production.rb +49 -10
- data/spec/dummy/config/environments/test.rb +28 -12
- data/spec/dummy/config/initializers/backtrace_silencers.rb +4 -3
- data/spec/dummy/config/initializers/content_security_policy.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +3 -1
- data/spec/dummy/config/initializers/new_framework_defaults_6_1.rb +67 -0
- data/spec/dummy/config/initializers/permissions_policy.rb +11 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +5 -0
- data/spec/dummy/config/locales/en.yml +1 -1
- data/spec/dummy/config/routes.rb +1 -1
- data/spec/dummy/config/storage.yml +31 -0
- data/spec/dummy/config.ru +2 -1
- data/spec/dummy/db/migrate/20230406194400_add_service_name_to_active_storage_blobs.active_storage.rb +22 -0
- data/spec/dummy/db/migrate/20230406194401_create_active_storage_variant_records.active_storage.rb +27 -0
- data/spec/dummy/db/schema.rb +15 -7
- data/tessa.gemspec +4 -5
- data/tsconfig.json +10 -0
- data/yarn.lock +74 -7
- metadata +36 -74
- data/app/javascript/activestorage/file_checksum.js +0 -53
- data/app/javascript/tessa/index.js.coffee +0 -183
- data/lib/tasks/tessa.rake +0 -18
- data/lib/tessa/active_storage/asset_wrapper.rb +0 -32
- data/lib/tessa/asset/failure.rb +0 -37
- data/lib/tessa/asset.rb +0 -47
- data/lib/tessa/asset_change.rb +0 -49
- data/lib/tessa/asset_change_set.rb +0 -49
- data/lib/tessa/config.rb +0 -16
- data/lib/tessa/controller_helpers.rb +0 -16
- data/lib/tessa/fake_connection.rb +0 -29
- data/lib/tessa/jobs/migrate_assets_job.rb +0 -222
- data/lib/tessa/model/dynamic_extensions.rb +0 -145
- data/lib/tessa/model/field.rb +0 -77
- data/lib/tessa/model.rb +0 -94
- data/lib/tessa/rack_upload_proxy.rb +0 -41
- data/lib/tessa/response_factory.rb +0 -15
- data/lib/tessa/upload/uploads_file.rb +0 -18
- data/lib/tessa/upload.rb +0 -31
- data/lib/tessa/view_helpers.rb +0 -23
- data/spec/dummy/app/models/multiple_asset_model.rb +0 -8
- data/spec/support/remote_call_macro.rb +0 -40
- data/spec/tessa/asset/failure_spec.rb +0 -48
- data/spec/tessa/asset_change_set_spec.rb +0 -198
- data/spec/tessa/asset_change_spec.rb +0 -86
- data/spec/tessa/asset_spec.rb +0 -196
- data/spec/tessa/config_spec.rb +0 -70
- data/spec/tessa/controller_helpers_spec.rb +0 -55
- data/spec/tessa/jobs/migrate_assets_job_spec.rb +0 -247
- data/spec/tessa/model_field_spec.rb +0 -72
- data/spec/tessa/model_spec.rb +0 -325
- data/spec/tessa/rack_upload_proxy_spec.rb +0 -83
- data/spec/tessa/upload/uploads_file_spec.rb +0 -72
- data/spec/tessa/upload_spec.rb +0 -125
- data/spec/tessa_spec.rb +0 -23
data/yarn.lock
CHANGED
@@ -88,6 +88,14 @@
|
|
88
88
|
is-module "^1.0.0"
|
89
89
|
resolve "^1.19.0"
|
90
90
|
|
91
|
+
"@rollup/plugin-typescript@^11.1.0":
|
92
|
+
version "11.1.0"
|
93
|
+
resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz#4dd2a98475a791200d3e4dd1b8234073ad96c535"
|
94
|
+
integrity sha512-86flrfE+bSHB69znnTV6kVjkncs2LBMhcTCyxWgRxLyfXfQrxg4UwlAqENnjrrxnSNS/XKCDJCl8EkdFJVHOxw==
|
95
|
+
dependencies:
|
96
|
+
"@rollup/pluginutils" "^5.0.1"
|
97
|
+
resolve "^1.22.1"
|
98
|
+
|
91
99
|
"@rollup/pluginutils@^3.1.0":
|
92
100
|
version "3.1.0"
|
93
101
|
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
|
@@ -97,6 +105,22 @@
|
|
97
105
|
estree-walker "^1.0.1"
|
98
106
|
picomatch "^2.2.2"
|
99
107
|
|
108
|
+
"@rollup/pluginutils@^5.0.1":
|
109
|
+
version "5.0.2"
|
110
|
+
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33"
|
111
|
+
integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==
|
112
|
+
dependencies:
|
113
|
+
"@types/estree" "^1.0.0"
|
114
|
+
estree-walker "^2.0.2"
|
115
|
+
picomatch "^2.3.1"
|
116
|
+
|
117
|
+
"@types/dropzone@^5.7.4":
|
118
|
+
version "5.7.4"
|
119
|
+
resolved "https://registry.yarnpkg.com/@types/dropzone/-/dropzone-5.7.4.tgz#667e6f22fac6428db7553663fd1e31547d994161"
|
120
|
+
integrity sha512-9kLJ2YAmVRWYrHvDoa95pQzHF0HUMKcznsS7FM1Mht5Yieec+HMB6Ybfm+ocvLjvFCvgyYGFTp4nzNFxhZmo3g==
|
121
|
+
dependencies:
|
122
|
+
"@types/jquery" "*"
|
123
|
+
|
100
124
|
"@types/estree@*":
|
101
125
|
version "0.0.51"
|
102
126
|
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
|
@@ -107,6 +131,18 @@
|
|
107
131
|
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
|
108
132
|
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
|
109
133
|
|
134
|
+
"@types/estree@^1.0.0":
|
135
|
+
version "1.0.0"
|
136
|
+
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2"
|
137
|
+
integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
|
138
|
+
|
139
|
+
"@types/jquery@*", "@types/jquery@^3.5.16":
|
140
|
+
version "3.5.16"
|
141
|
+
resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.16.tgz#632131baf30951915b0317d48c98e9890bdf051d"
|
142
|
+
integrity sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==
|
143
|
+
dependencies:
|
144
|
+
"@types/sizzle" "*"
|
145
|
+
|
110
146
|
"@types/json5@^0.0.29":
|
111
147
|
version "0.0.29"
|
112
148
|
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
@@ -124,6 +160,16 @@
|
|
124
160
|
dependencies:
|
125
161
|
"@types/node" "*"
|
126
162
|
|
163
|
+
"@types/sizzle@*":
|
164
|
+
version "2.3.3"
|
165
|
+
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef"
|
166
|
+
integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==
|
167
|
+
|
168
|
+
"@types/spark-md5@^3.0.2":
|
169
|
+
version "3.0.2"
|
170
|
+
resolved "https://registry.yarnpkg.com/@types/spark-md5/-/spark-md5-3.0.2.tgz#da2e8a778a20335fc4f40b6471c4b0d86b70da55"
|
171
|
+
integrity sha512-82E/lVRaqelV9qmRzzJ1PKTpyrpnT7mwdneKNJB9hUtypZDMggloDfFUCIqRRx3lYRxteCwXSq9c+W71Vf0QnQ==
|
172
|
+
|
127
173
|
acorn-jsx@^3.0.0:
|
128
174
|
version "3.0.1"
|
129
175
|
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
|
@@ -320,11 +366,6 @@ co@^4.6.0:
|
|
320
366
|
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
321
367
|
integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
|
322
368
|
|
323
|
-
coffeescript@^2.7.0:
|
324
|
-
version "2.7.0"
|
325
|
-
resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.7.0.tgz#a43ec03be6885d6d1454850ea70b9409c391279c"
|
326
|
-
integrity sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==
|
327
|
-
|
328
369
|
color-convert@^1.9.0:
|
329
370
|
version "1.9.3"
|
330
371
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
@@ -604,7 +645,7 @@ estree-walker@^1.0.1:
|
|
604
645
|
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
|
605
646
|
integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
|
606
647
|
|
607
|
-
estree-walker@^2.0.1:
|
648
|
+
estree-walker@^2.0.1, estree-walker@^2.0.2:
|
608
649
|
version "2.0.2"
|
609
650
|
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
610
651
|
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
@@ -871,6 +912,13 @@ is-callable@^1.1.4, is-callable@^1.2.4:
|
|
871
912
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
|
872
913
|
integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
|
873
914
|
|
915
|
+
is-core-module@^2.11.0:
|
916
|
+
version "2.12.0"
|
917
|
+
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4"
|
918
|
+
integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
|
919
|
+
dependencies:
|
920
|
+
has "^1.0.3"
|
921
|
+
|
874
922
|
is-core-module@^2.8.1:
|
875
923
|
version "2.9.0"
|
876
924
|
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
|
@@ -1210,7 +1258,7 @@ path-parse@^1.0.7:
|
|
1210
1258
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
1211
1259
|
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
1212
1260
|
|
1213
|
-
picomatch@^2.2.2:
|
1261
|
+
picomatch@^2.2.2, picomatch@^2.3.1:
|
1214
1262
|
version "2.3.1"
|
1215
1263
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
1216
1264
|
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
@@ -1296,6 +1344,15 @@ resolve@^1.1.6, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22
|
|
1296
1344
|
path-parse "^1.0.7"
|
1297
1345
|
supports-preserve-symlinks-flag "^1.0.0"
|
1298
1346
|
|
1347
|
+
resolve@^1.22.1:
|
1348
|
+
version "1.22.2"
|
1349
|
+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
|
1350
|
+
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
|
1351
|
+
dependencies:
|
1352
|
+
is-core-module "^2.11.0"
|
1353
|
+
path-parse "^1.0.7"
|
1354
|
+
supports-preserve-symlinks-flag "^1.0.0"
|
1355
|
+
|
1299
1356
|
restore-cursor@^2.0.0:
|
1300
1357
|
version "2.0.0"
|
1301
1358
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
@@ -1588,6 +1645,11 @@ tsconfig-paths@^3.14.1:
|
|
1588
1645
|
minimist "^1.2.6"
|
1589
1646
|
strip-bom "^3.0.0"
|
1590
1647
|
|
1648
|
+
tslib@^2.5.0:
|
1649
|
+
version "2.5.0"
|
1650
|
+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
|
1651
|
+
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
|
1652
|
+
|
1591
1653
|
type-check@~0.3.2:
|
1592
1654
|
version "0.3.2"
|
1593
1655
|
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
|
@@ -1600,6 +1662,11 @@ typedarray@^0.0.6:
|
|
1600
1662
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
1601
1663
|
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
1602
1664
|
|
1665
|
+
typescript@^5.0.4:
|
1666
|
+
version "5.0.4"
|
1667
|
+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"
|
1668
|
+
integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
|
1669
|
+
|
1603
1670
|
unbox-primitive@^1.0.2:
|
1604
1671
|
version "1.0.2"
|
1605
1672
|
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tessa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Powell
|
@@ -9,36 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: virtus
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 1.0.4
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 1.0.4
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: rake
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
31
17
|
requirements:
|
32
18
|
- - "~>"
|
33
19
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
20
|
+
version: '13'
|
35
21
|
type: :development
|
36
22
|
prerelease: false
|
37
23
|
version_requirements: !ruby/object:Gem::Requirement
|
38
24
|
requirements:
|
39
25
|
- - "~>"
|
40
26
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
27
|
+
version: '13'
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
29
|
name: rspec
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,28 +73,42 @@ dependencies:
|
|
87
73
|
requirements:
|
88
74
|
- - "~>"
|
89
75
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
76
|
+
version: '6'
|
91
77
|
type: :development
|
92
78
|
prerelease: false
|
93
79
|
version_requirements: !ruby/object:Gem::Requirement
|
94
80
|
requirements:
|
95
81
|
- - "~>"
|
96
82
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
83
|
+
version: '6'
|
98
84
|
- !ruby/object:Gem::Dependency
|
99
85
|
name: sqlite3
|
100
86
|
requirement: !ruby/object:Gem::Requirement
|
101
87
|
requirements:
|
102
88
|
- - "~>"
|
103
89
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
90
|
+
version: '1.4'
|
105
91
|
type: :development
|
106
92
|
prerelease: false
|
107
93
|
version_requirements: !ruby/object:Gem::Requirement
|
108
94
|
requirements:
|
109
95
|
- - "~>"
|
110
96
|
- !ruby/object:Gem::Version
|
111
|
-
version: 1.
|
97
|
+
version: '1.4'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: listen
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
112
|
description: Manage your assets.
|
113
113
|
email:
|
114
114
|
- jpowell@watermark.org
|
@@ -133,34 +133,17 @@ files:
|
|
133
133
|
- app/assets/javascripts/.keep
|
134
134
|
- app/assets/javascripts/tessa.esm.js
|
135
135
|
- app/assets/javascripts/tessa.js
|
136
|
-
- app/javascript/activestorage/file_checksum.
|
137
|
-
- app/javascript/tessa/index.
|
136
|
+
- app/javascript/activestorage/file_checksum.ts
|
137
|
+
- app/javascript/tessa/index.ts
|
138
|
+
- app/javascript/tessa/types.ts
|
138
139
|
- bin/rspec
|
139
140
|
- config/routes.rb
|
140
141
|
- docs/tessa-activestorage-sequence-diagram.drawio.png
|
141
|
-
- lib/tasks/tessa.rake
|
142
142
|
- lib/tessa.rb
|
143
|
-
- lib/tessa/active_storage/asset_wrapper.rb
|
144
|
-
- lib/tessa/asset.rb
|
145
|
-
- lib/tessa/asset/failure.rb
|
146
|
-
- lib/tessa/asset_change.rb
|
147
|
-
- lib/tessa/asset_change_set.rb
|
148
|
-
- lib/tessa/config.rb
|
149
|
-
- lib/tessa/controller_helpers.rb
|
150
143
|
- lib/tessa/engine.rb
|
151
|
-
- lib/tessa/fake_connection.rb
|
152
|
-
- lib/tessa/jobs/migrate_assets_job.rb
|
153
|
-
- lib/tessa/model.rb
|
154
|
-
- lib/tessa/model/dynamic_extensions.rb
|
155
|
-
- lib/tessa/model/field.rb
|
156
|
-
- lib/tessa/rack_upload_proxy.rb
|
157
|
-
- lib/tessa/response_factory.rb
|
158
144
|
- lib/tessa/simple_form.rb
|
159
145
|
- lib/tessa/simple_form/asset_input.rb
|
160
|
-
- lib/tessa/upload.rb
|
161
|
-
- lib/tessa/upload/uploads_file.rb
|
162
146
|
- lib/tessa/version.rb
|
163
|
-
- lib/tessa/view_helpers.rb
|
164
147
|
- package.json
|
165
148
|
- rollup.config.js
|
166
149
|
- spec/dummy/.gitignore
|
@@ -174,7 +157,6 @@ files:
|
|
174
157
|
- spec/dummy/app/helpers/application_helper.rb
|
175
158
|
- spec/dummy/app/jobs/application_job.rb
|
176
159
|
- spec/dummy/app/models/concerns/.keep
|
177
|
-
- spec/dummy/app/models/multiple_asset_model.rb
|
178
160
|
- spec/dummy/app/models/single_asset_model.rb
|
179
161
|
- spec/dummy/app/models/single_asset_model_form.rb
|
180
162
|
- spec/dummy/app/views/layouts/application.html.erb
|
@@ -201,6 +183,8 @@ files:
|
|
201
183
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
202
184
|
- spec/dummy/config/initializers/inflections.rb
|
203
185
|
- spec/dummy/config/initializers/mime_types.rb
|
186
|
+
- spec/dummy/config/initializers/new_framework_defaults_6_1.rb
|
187
|
+
- spec/dummy/config/initializers/permissions_policy.rb
|
204
188
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
205
189
|
- spec/dummy/config/locales/en.yml
|
206
190
|
- spec/dummy/config/puma.rb
|
@@ -209,6 +193,8 @@ files:
|
|
209
193
|
- spec/dummy/db/migrate/20220606221557_create_active_storage_tables.active_storage.rb
|
210
194
|
- spec/dummy/db/migrate/20220606221900_create_single_asset_models.rb
|
211
195
|
- spec/dummy/db/migrate/20220607191519_create_multiple_asset_models.rb
|
196
|
+
- spec/dummy/db/migrate/20230406194400_add_service_name_to_active_storage_blobs.active_storage.rb
|
197
|
+
- spec/dummy/db/migrate/20230406194401_create_active_storage_variant_records.active_storage.rb
|
212
198
|
- spec/dummy/db/schema.rb
|
213
199
|
- spec/dummy/lib/assets/.keep
|
214
200
|
- spec/dummy/lib/tasks/.keep
|
@@ -225,21 +211,8 @@ files:
|
|
225
211
|
- spec/dummy/vendor/.keep
|
226
212
|
- spec/rails_helper.rb
|
227
213
|
- spec/spec_helper.rb
|
228
|
-
- spec/support/remote_call_macro.rb
|
229
|
-
- spec/tessa/asset/failure_spec.rb
|
230
|
-
- spec/tessa/asset_change_set_spec.rb
|
231
|
-
- spec/tessa/asset_change_spec.rb
|
232
|
-
- spec/tessa/asset_spec.rb
|
233
|
-
- spec/tessa/config_spec.rb
|
234
|
-
- spec/tessa/controller_helpers_spec.rb
|
235
|
-
- spec/tessa/jobs/migrate_assets_job_spec.rb
|
236
|
-
- spec/tessa/model_field_spec.rb
|
237
|
-
- spec/tessa/model_spec.rb
|
238
|
-
- spec/tessa/rack_upload_proxy_spec.rb
|
239
|
-
- spec/tessa/upload/uploads_file_spec.rb
|
240
|
-
- spec/tessa/upload_spec.rb
|
241
|
-
- spec/tessa_spec.rb
|
242
214
|
- tessa.gemspec
|
215
|
+
- tsconfig.json
|
243
216
|
- yarn.lock
|
244
217
|
homepage: https://github.com/watermarkchurch/tessa-client
|
245
218
|
licenses:
|
@@ -256,9 +229,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
256
229
|
version: '2.3'
|
257
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
258
231
|
requirements:
|
259
|
-
- - "
|
232
|
+
- - ">"
|
260
233
|
- !ruby/object:Gem::Version
|
261
|
-
version:
|
234
|
+
version: 1.3.1
|
262
235
|
requirements: []
|
263
236
|
rubygems_version: 3.0.3.1
|
264
237
|
signing_key:
|
@@ -276,7 +249,6 @@ test_files:
|
|
276
249
|
- spec/dummy/app/helpers/application_helper.rb
|
277
250
|
- spec/dummy/app/jobs/application_job.rb
|
278
251
|
- spec/dummy/app/models/concerns/.keep
|
279
|
-
- spec/dummy/app/models/multiple_asset_model.rb
|
280
252
|
- spec/dummy/app/models/single_asset_model.rb
|
281
253
|
- spec/dummy/app/models/single_asset_model_form.rb
|
282
254
|
- spec/dummy/app/views/layouts/application.html.erb
|
@@ -303,6 +275,8 @@ test_files:
|
|
303
275
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
304
276
|
- spec/dummy/config/initializers/inflections.rb
|
305
277
|
- spec/dummy/config/initializers/mime_types.rb
|
278
|
+
- spec/dummy/config/initializers/new_framework_defaults_6_1.rb
|
279
|
+
- spec/dummy/config/initializers/permissions_policy.rb
|
306
280
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
307
281
|
- spec/dummy/config/locales/en.yml
|
308
282
|
- spec/dummy/config/puma.rb
|
@@ -311,6 +285,8 @@ test_files:
|
|
311
285
|
- spec/dummy/db/migrate/20220606221557_create_active_storage_tables.active_storage.rb
|
312
286
|
- spec/dummy/db/migrate/20220606221900_create_single_asset_models.rb
|
313
287
|
- spec/dummy/db/migrate/20220607191519_create_multiple_asset_models.rb
|
288
|
+
- spec/dummy/db/migrate/20230406194400_add_service_name_to_active_storage_blobs.active_storage.rb
|
289
|
+
- spec/dummy/db/migrate/20230406194401_create_active_storage_variant_records.active_storage.rb
|
314
290
|
- spec/dummy/db/schema.rb
|
315
291
|
- spec/dummy/lib/assets/.keep
|
316
292
|
- spec/dummy/lib/tasks/.keep
|
@@ -327,17 +303,3 @@ test_files:
|
|
327
303
|
- spec/dummy/vendor/.keep
|
328
304
|
- spec/rails_helper.rb
|
329
305
|
- spec/spec_helper.rb
|
330
|
-
- spec/support/remote_call_macro.rb
|
331
|
-
- spec/tessa/asset/failure_spec.rb
|
332
|
-
- spec/tessa/asset_change_set_spec.rb
|
333
|
-
- spec/tessa/asset_change_spec.rb
|
334
|
-
- spec/tessa/asset_spec.rb
|
335
|
-
- spec/tessa/config_spec.rb
|
336
|
-
- spec/tessa/controller_helpers_spec.rb
|
337
|
-
- spec/tessa/jobs/migrate_assets_job_spec.rb
|
338
|
-
- spec/tessa/model_field_spec.rb
|
339
|
-
- spec/tessa/model_spec.rb
|
340
|
-
- spec/tessa/rack_upload_proxy_spec.rb
|
341
|
-
- spec/tessa/upload/uploads_file_spec.rb
|
342
|
-
- spec/tessa/upload_spec.rb
|
343
|
-
- spec/tessa_spec.rb
|
@@ -1,53 +0,0 @@
|
|
1
|
-
import SparkMD5 from "spark-md5"
|
2
|
-
|
3
|
-
const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
|
4
|
-
|
5
|
-
export class FileChecksum {
|
6
|
-
static create(file, callback) {
|
7
|
-
const instance = new FileChecksum(file)
|
8
|
-
instance.create(callback)
|
9
|
-
}
|
10
|
-
|
11
|
-
constructor(file) {
|
12
|
-
this.file = file
|
13
|
-
this.chunkSize = 2097152 // 2MB
|
14
|
-
this.chunkCount = Math.ceil(this.file.size / this.chunkSize)
|
15
|
-
this.chunkIndex = 0
|
16
|
-
}
|
17
|
-
|
18
|
-
create(callback) {
|
19
|
-
this.callback = callback
|
20
|
-
this.md5Buffer = new SparkMD5.ArrayBuffer
|
21
|
-
this.fileReader = new FileReader
|
22
|
-
this.fileReader.addEventListener("load", event => this.fileReaderDidLoad(event))
|
23
|
-
this.fileReader.addEventListener("error", event => this.fileReaderDidError(event))
|
24
|
-
this.readNextChunk()
|
25
|
-
}
|
26
|
-
|
27
|
-
fileReaderDidLoad(event) {
|
28
|
-
this.md5Buffer.append(event.target.result)
|
29
|
-
|
30
|
-
if (!this.readNextChunk()) {
|
31
|
-
const binaryDigest = this.md5Buffer.end(true)
|
32
|
-
const base64digest = btoa(binaryDigest)
|
33
|
-
this.callback(null, base64digest)
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
fileReaderDidError(event) {
|
38
|
-
this.callback(`Error reading ${this.file.name}`)
|
39
|
-
}
|
40
|
-
|
41
|
-
readNextChunk() {
|
42
|
-
if (this.chunkIndex < this.chunkCount || (this.chunkIndex == 0 && this.chunkCount == 0)) {
|
43
|
-
const start = this.chunkIndex * this.chunkSize
|
44
|
-
const end = Math.min(start + this.chunkSize, this.file.size)
|
45
|
-
const bytes = fileSlice.call(this.file, start, end)
|
46
|
-
this.fileReader.readAsArrayBuffer(bytes)
|
47
|
-
this.chunkIndex++
|
48
|
-
return true
|
49
|
-
} else {
|
50
|
-
return false
|
51
|
-
}
|
52
|
-
}
|
53
|
-
}
|
@@ -1,183 +0,0 @@
|
|
1
|
-
import {FileChecksum} from '../activestorage/file_checksum'
|
2
|
-
|
3
|
-
window.WCC ||= {}
|
4
|
-
$ = window.jQuery
|
5
|
-
|
6
|
-
Dropzone.autoDiscover = off
|
7
|
-
|
8
|
-
class window.WCC.Dropzone extends window.Dropzone
|
9
|
-
|
10
|
-
uploadFile: (file) ->
|
11
|
-
xhr = new XMLHttpRequest
|
12
|
-
file.xhr = xhr
|
13
|
-
|
14
|
-
# Set in our custom accept method
|
15
|
-
xhr.open file.uploadMethod, file.uploadURL, true
|
16
|
-
|
17
|
-
response = null
|
18
|
-
|
19
|
-
handleError = =>
|
20
|
-
@_errorProcessing [file], response || @options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr
|
21
|
-
|
22
|
-
updateProgress = (e) =>
|
23
|
-
if e?
|
24
|
-
progress = 100 * e.loaded / e.total
|
25
|
-
|
26
|
-
file.upload =
|
27
|
-
progress: progress
|
28
|
-
total: e.total
|
29
|
-
bytesSent: e.loaded
|
30
|
-
else
|
31
|
-
# Called when the file finished uploading
|
32
|
-
|
33
|
-
allFilesFinished = yes
|
34
|
-
|
35
|
-
progress = 100
|
36
|
-
|
37
|
-
allFilesFinished = no unless file.upload.progress == 100 and file.upload.bytesSent == file.upload.total
|
38
|
-
file.upload.progress = progress
|
39
|
-
file.upload.bytesSent = file.upload.total
|
40
|
-
|
41
|
-
# Nothing to do, all files already at 100%
|
42
|
-
return if allFilesFinished
|
43
|
-
|
44
|
-
@emit "uploadprogress", file, progress, file.upload.bytesSent
|
45
|
-
|
46
|
-
xhr.onload = (e) =>
|
47
|
-
return if file.status == WCC.Dropzone.CANCELED
|
48
|
-
return unless xhr.readyState is 4
|
49
|
-
|
50
|
-
response = xhr.responseText
|
51
|
-
|
52
|
-
if xhr.getResponseHeader("content-type") and ~xhr.getResponseHeader("content-type").indexOf "application/json"
|
53
|
-
try
|
54
|
-
response = JSON.parse response
|
55
|
-
catch e
|
56
|
-
response = "Invalid JSON response from server."
|
57
|
-
|
58
|
-
updateProgress()
|
59
|
-
|
60
|
-
unless 200 <= xhr.status < 300
|
61
|
-
handleError()
|
62
|
-
else
|
63
|
-
@_finished [file], response, e
|
64
|
-
|
65
|
-
xhr.onerror = =>
|
66
|
-
return if file.status == WCC.Dropzone.CANCELED
|
67
|
-
handleError()
|
68
|
-
|
69
|
-
# Some browsers do not have the .upload property
|
70
|
-
progressObj = xhr.upload ? xhr
|
71
|
-
progressObj.onprogress = updateProgress
|
72
|
-
|
73
|
-
headers =
|
74
|
-
"Accept": "application/json",
|
75
|
-
"Cache-Control": "no-cache",
|
76
|
-
"X-Requested-With": "XMLHttpRequest",
|
77
|
-
|
78
|
-
$.extend headers, @options.headers if @options.headers
|
79
|
-
$.extend headers, file.uploadHeaders if file.uploadHeaders
|
80
|
-
|
81
|
-
xhr.setRequestHeader headerName, headerValue for headerName, headerValue of headers
|
82
|
-
|
83
|
-
@emit "sending", file, xhr
|
84
|
-
|
85
|
-
xhr.send file
|
86
|
-
|
87
|
-
uploadFiles: (files) ->
|
88
|
-
@uploadFile(file) for file in files
|
89
|
-
|
90
|
-
WCC.Dropzone.uploadPendingWarning =
|
91
|
-
"File uploads have not yet completed. If you submit the form now they will
|
92
|
-
not be saved. Are you sure you want to continue?"
|
93
|
-
|
94
|
-
WCC.Dropzone.prototype.defaultOptions.url = "UNUSED"
|
95
|
-
|
96
|
-
WCC.Dropzone.prototype.defaultOptions.dictDefaultMessage = "Drop files or click to upload."
|
97
|
-
|
98
|
-
WCC.Dropzone.prototype.defaultOptions.accept = (file, done) ->
|
99
|
-
dz = $(file._removeLink).closest('.tessa-upload').first()
|
100
|
-
tessaParams = dz.data('tessa-params') or {}
|
101
|
-
|
102
|
-
postData =
|
103
|
-
name: file.name
|
104
|
-
size: file.size
|
105
|
-
mime_type: file.type
|
106
|
-
|
107
|
-
postData = $.extend postData, tessaParams
|
108
|
-
|
109
|
-
FileChecksum.create file, (error, checksum) ->
|
110
|
-
return done(error) if error
|
111
|
-
|
112
|
-
postData['checksum'] = checksum
|
113
|
-
|
114
|
-
$.ajax '/tessa/uploads',
|
115
|
-
type: 'POST',
|
116
|
-
data: postData,
|
117
|
-
success: (response) ->
|
118
|
-
file.uploadURL = response.upload_url
|
119
|
-
file.uploadMethod = response.upload_method
|
120
|
-
file.uploadHeaders = response.upload_headers
|
121
|
-
file.assetID = response.asset_id
|
122
|
-
done()
|
123
|
-
error: (response) ->
|
124
|
-
done("Failed to initiate the upload process!")
|
125
|
-
|
126
|
-
window.WCC.tessaInit = (sel) ->
|
127
|
-
sel = sel || 'form:has(.tessa-upload)'
|
128
|
-
$(sel).each (i, form) ->
|
129
|
-
$form = $(form)
|
130
|
-
$form.bind 'submit', (event) ->
|
131
|
-
safeToSubmit = true
|
132
|
-
$form.find('.tessa-upload').each (j, dropzoneElement) ->
|
133
|
-
$(dropzoneElement.dropzone.files).each (k, file) ->
|
134
|
-
if file.status? and (file.status != WCC.Dropzone.SUCCESS)
|
135
|
-
safeToSubmit = false
|
136
|
-
if not safeToSubmit and not confirm(WCC.Dropzone.uploadPendingWarning)
|
137
|
-
return false
|
138
|
-
|
139
|
-
$('.tessa-upload', sel).each (i, item) ->
|
140
|
-
$item = $(item)
|
141
|
-
args =
|
142
|
-
maxFiles: 1
|
143
|
-
addRemoveLinks: true
|
144
|
-
|
145
|
-
$.extend args, $item.data("dropzone-options")
|
146
|
-
args.maxFiles = null if $item.hasClass("multiple")
|
147
|
-
inputPrefix = $item.data("asset-field-prefix")
|
148
|
-
|
149
|
-
dropzone = new WCC.Dropzone item, args
|
150
|
-
|
151
|
-
$item.find('input[type="hidden"]').each (j, input) ->
|
152
|
-
$input = $(input)
|
153
|
-
mockFile = $input.data("meta")
|
154
|
-
mockFile.accepted = true
|
155
|
-
dropzone.options.addedfile.call(dropzone, mockFile)
|
156
|
-
dropzone.options.thumbnail.call(dropzone, mockFile, mockFile.url)
|
157
|
-
dropzone.emit("complete", mockFile)
|
158
|
-
dropzone.files.push mockFile
|
159
|
-
|
160
|
-
updateAction = (file) ->
|
161
|
-
return unless file.assetID?
|
162
|
-
inputID = "#tessa_asset_action_#{file.assetID}"
|
163
|
-
actionInput = $(inputID)
|
164
|
-
unless actionInput.length
|
165
|
-
actionInput = $('<input type="hidden">')
|
166
|
-
.attr
|
167
|
-
id: inputID
|
168
|
-
name: "#{inputPrefix}[#{file.assetID}][action]"
|
169
|
-
.appendTo item
|
170
|
-
|
171
|
-
actionInput.val file.action
|
172
|
-
|
173
|
-
dropzone.on 'success', (file) ->
|
174
|
-
file.action = "add"
|
175
|
-
updateAction(file)
|
176
|
-
|
177
|
-
dropzone.on 'removedfile', (file) ->
|
178
|
-
file.action = "remove"
|
179
|
-
updateAction(file)
|
180
|
-
|
181
|
-
|
182
|
-
$ ->
|
183
|
-
window.WCC.tessaInit()
|
data/lib/tasks/tessa.rake
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
|
2
|
-
namespace :tessa do
|
3
|
-
desc "Begins the migration of all Tessa assets to ActiveStorage."
|
4
|
-
task :migrate => :environment do
|
5
|
-
abort "Tessa::MigrateAssetsJob can no longer be performed because the Tessa connection was removed. "\
|
6
|
-
"Please downgrade to tessa ~>1.0 and try again."
|
7
|
-
end
|
8
|
-
|
9
|
-
desc "Verifies that the migration has completed"
|
10
|
-
task :verify => :environment do
|
11
|
-
unless Tessa::MigrateAssetsJob.complete?
|
12
|
-
state = Tessa::MigrateAssetsJob::ProcessingState.initialize_from_models
|
13
|
-
|
14
|
-
abort "Tessa::MigrateAssetsJob not yet complete! #{state.count} records remain to be migrated. "\
|
15
|
-
"Please downgrade to tessa ~>1.0 and try again."
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Tessa::ActiveStorage
|
2
|
-
class AssetWrapper < SimpleDelegator
|
3
|
-
def id
|
4
|
-
key
|
5
|
-
end
|
6
|
-
|
7
|
-
def public_url
|
8
|
-
Rails.application.routes.url_helpers.
|
9
|
-
rails_blob_url(__getobj__, disposition: :inline)
|
10
|
-
end
|
11
|
-
|
12
|
-
def private_url(expires_in: 1.day)
|
13
|
-
service_url(disposition: :inline, expires_in: expires_in)
|
14
|
-
end
|
15
|
-
|
16
|
-
def private_download_url(expires_in: 1.day)
|
17
|
-
service_url(disposition: 'attachment', expires_in: expires_in)
|
18
|
-
end
|
19
|
-
|
20
|
-
def meta
|
21
|
-
{
|
22
|
-
mime_type: content_type,
|
23
|
-
size: byte_size,
|
24
|
-
name: filename
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
def failure?
|
29
|
-
false
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|