tessa 0.9.2 → 1.0.0.pre.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.babelrc +8 -0
- data/.circleci/config.yml +42 -0
- data/.eslintrc +19 -0
- data/.gitignore +5 -0
- data/.ruby-version +1 -1
- data/Rakefile +8 -0
- data/app/assets/javascripts/.keep +0 -0
- data/app/assets/javascripts/tessa.esm.js +672 -0
- data/app/assets/javascripts/tessa.js +662 -0
- data/app/javascript/activestorage/file_checksum.js +53 -0
- data/app/javascript/tessa/index.js.coffee +183 -0
- data/config/routes.rb +3 -0
- data/lib/tessa/active_storage/asset_wrapper.rb +24 -0
- data/lib/tessa/engine.rb +5 -0
- data/lib/tessa/model/dynamic_extensions.rb +151 -0
- data/lib/tessa/model.rb +27 -36
- data/lib/tessa/rack_upload_proxy.rb +18 -10
- data/lib/tessa/version.rb +1 -1
- data/lib/tessa/view_helpers.rb +4 -2
- data/lib/tessa.rb +30 -0
- data/package.json +43 -0
- data/rollup.config.js +44 -0
- data/spec/dummy/.gitignore +27 -0
- data/spec/dummy/README.md +24 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +2 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/models/multiple_asset_model.rb +8 -0
- data/spec/dummy/app/models/single_asset_model.rb +5 -0
- data/spec/dummy/app/models/single_asset_model_form.rb +25 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +28 -0
- data/spec/dummy/bin/update +28 -0
- data/spec/dummy/bin/yarn +11 -0
- data/spec/dummy/config/application.rb +33 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/credentials.yml.enc +1 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +47 -0
- data/spec/dummy/config/environments/production.rb +76 -0
- data/spec/dummy/config/environments/test.rb +43 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/assets.rb +14 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +9 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +37 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config/storage.yml +3 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/db/migrate/20220606221557_create_active_storage_tables.active_storage.rb +27 -0
- data/spec/dummy/db/migrate/20220606221900_create_single_asset_models.rb +10 -0
- data/spec/dummy/db/migrate/20220607191519_create_multiple_asset_models.rb +10 -0
- data/spec/dummy/db/schema.rb +50 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/lib/tasks/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/package.json +5 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/robots.txt +1 -0
- data/spec/dummy/tmp/.keep +0 -0
- data/spec/dummy/vendor/.keep +0 -0
- data/spec/rails_helper.rb +14 -0
- data/spec/tessa/model_spec.rb +195 -262
- data/spec/tessa/rack_upload_proxy_spec.rb +23 -81
- data/tessa.gemspec +7 -2
- data/yarn.lock +1661 -0
- metadata +179 -16
- data/circle.yml +0 -3
@@ -16,28 +16,29 @@ RSpec.describe Tessa::RackUploadProxy do
|
|
16
16
|
}
|
17
17
|
let(:params) { {} }
|
18
18
|
let(:session) { {} }
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
upload_url: "a-url",
|
23
|
-
upload_method: "a-method",
|
24
|
-
)
|
25
|
-
}
|
19
|
+
|
20
|
+
let(:blob) { ActiveStorage::Blob.last }
|
21
|
+
|
26
22
|
before do
|
27
|
-
allow(
|
23
|
+
allow(ActiveStorage.verifier).to receive(:generate)
|
24
|
+
.and_return('some-consistent-token')
|
28
25
|
end
|
29
26
|
|
30
27
|
shared_examples_for "proper json return" do
|
31
28
|
it "returns asset_id" do
|
32
|
-
expect(result.json['asset_id']).to eq(
|
29
|
+
expect(result.json['asset_id']).to eq(blob.signed_id)
|
33
30
|
end
|
34
31
|
|
35
32
|
it "returns upload_url" do
|
36
|
-
expect(result.json['upload_url']).to eq(
|
33
|
+
expect(result.json['upload_url']).to eq('https://www.example.com/rails/active_storage/disk/some-consistent-token')
|
37
34
|
end
|
38
35
|
|
39
36
|
it "returns upload_method" do
|
40
|
-
expect(result.json['upload_method']).to eq(
|
37
|
+
expect(result.json['upload_method']).to eq('PUT')
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns upload_method" do
|
41
|
+
expect(result.json['upload_headers']).to eq(blob.service_headers_for_direct_upload)
|
41
42
|
end
|
42
43
|
|
43
44
|
it "returns a 200 response" do
|
@@ -47,38 +48,12 @@ RSpec.describe Tessa::RackUploadProxy do
|
|
47
48
|
it "sets the mime type to application/json" do
|
48
49
|
expect(result.headers).to include("Content-Type" => "application/json")
|
49
50
|
end
|
50
|
-
|
51
|
-
context "when Tessa::Upload.create raises RequestFailed" do
|
52
|
-
before do
|
53
|
-
allow(Tessa::Upload).to receive(:create).and_raise(Tessa::RequestFailed)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "returns a proper 500" do
|
57
|
-
expect(result.status).to eq(500)
|
58
|
-
end
|
59
|
-
|
60
|
-
it "sets the mime type to application/json" do
|
61
|
-
expect(result.headers).to include("Content-Type" => "application/json")
|
62
|
-
end
|
63
|
-
|
64
|
-
it "includes an error message in JSON response" do
|
65
|
-
expect(result.json['error']).to be_truthy
|
66
|
-
end
|
67
|
-
end
|
68
51
|
end
|
69
52
|
|
70
53
|
context "with no params and no session" do
|
71
|
-
it "
|
72
|
-
expect(
|
73
|
-
result
|
74
|
-
end
|
75
|
-
|
76
|
-
it "pushes the asset_id onto session" do
|
77
|
-
result
|
78
|
-
expect(session[:tessa_upload_asset_ids]).to eq([123])
|
54
|
+
it "raises a bad request error" do
|
55
|
+
expect(result.status).to eq(400)
|
79
56
|
end
|
80
|
-
|
81
|
-
it_behaves_like "proper json return"
|
82
57
|
end
|
83
58
|
|
84
59
|
context "with params" do
|
@@ -86,53 +61,20 @@ RSpec.describe Tessa::RackUploadProxy do
|
|
86
61
|
{
|
87
62
|
"name" => "my-name",
|
88
63
|
"size" => 456,
|
89
|
-
"date" => "2020-01-01",
|
90
64
|
"mime_type" => "plain/text",
|
65
|
+
"checksum" => '1234'
|
91
66
|
}
|
92
67
|
}
|
93
68
|
|
94
|
-
it "
|
95
|
-
expect
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
it "calls Tessa::Upload.create with 'size'" do
|
100
|
-
expect(Tessa::Upload).to receive(:create).with(hash_including(size: 456))
|
101
|
-
result
|
102
|
-
end
|
103
|
-
|
104
|
-
it "calls Tessa::Upload.create with 'date'" do
|
105
|
-
expect(Tessa::Upload).to receive(:create).with(hash_including(date: "2020-01-01"))
|
106
|
-
result
|
107
|
-
end
|
108
|
-
|
109
|
-
it "calls Tessa::Upload.create with 'mime_type'" do
|
110
|
-
expect(Tessa::Upload).to receive(:create).with(hash_including(mime_type: "plain/text"))
|
111
|
-
result
|
112
|
-
end
|
113
|
-
|
114
|
-
it_behaves_like "proper json return"
|
115
|
-
end
|
116
|
-
|
117
|
-
context "with no date param" do
|
118
|
-
let(:params) { {} }
|
119
|
-
|
120
|
-
it "calls Tessa::Upload.create without 'date'" do
|
121
|
-
expect(Tessa::Upload).to_not receive(:create).with(hash_including(:date))
|
122
|
-
result
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
context "with existing session" do
|
127
|
-
let(:session) {
|
128
|
-
{
|
129
|
-
tessa_upload_asset_ids: [:existing_id],
|
130
|
-
}
|
131
|
-
}
|
69
|
+
it "creates the ActiveStorage blob" do
|
70
|
+
expect {
|
71
|
+
described_class.call(env)
|
72
|
+
}.to change { ActiveStorage::Blob.count }.by(1)
|
132
73
|
|
133
|
-
|
134
|
-
|
135
|
-
expect(
|
74
|
+
expect(blob.filename).to eq('my-name')
|
75
|
+
expect(blob.byte_size).to eq(456)
|
76
|
+
expect(blob.content_type).to eq('plain/text')
|
77
|
+
expect(blob.checksum).to eq('1234')
|
136
78
|
end
|
137
79
|
|
138
80
|
it_behaves_like "proper json return"
|
data/tessa.gemspec
CHANGED
@@ -15,7 +15,10 @@ Gem::Specification.new do |spec|
|
|
15
15
|
|
16
16
|
spec.required_ruby_version = '~> 2.3'
|
17
17
|
|
18
|
-
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").push(
|
19
|
+
'app/assets/javascripts/tessa.js',
|
20
|
+
'app/assets/javascripts/tessa.esm.js',
|
21
|
+
)
|
19
22
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
23
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
24
|
spec.require_paths = ["lib"]
|
@@ -23,8 +26,10 @@ Gem::Specification.new do |spec|
|
|
23
26
|
spec.add_dependency "faraday", "<1"
|
24
27
|
spec.add_dependency "virtus", "~>1.0.4"
|
25
28
|
|
26
|
-
spec.add_development_dependency "bundler", "~> 1.7"
|
27
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
28
30
|
spec.add_development_dependency "rspec", "~> 3.1"
|
31
|
+
spec.add_development_dependency "rspec_junit_formatter", "~> 0.4"
|
29
32
|
spec.add_development_dependency "simplecov", "~> 0.15.1"
|
33
|
+
spec.add_development_dependency "rails", "~> 5"
|
34
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3.6'
|
30
35
|
end
|