tessa 2.0 → 6.0.0.rc2
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/README.md +11 -18
- 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.rc2
|
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-05-08 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
|