vng_storage_active_storage 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 332e66ee8bd3c5da936ea1f0d42427d55cb2d7aaf1ff3430401dbb1bf037a1b6
4
- data.tar.gz: e6052ba32ff53aef1fba86ace5cc7b0391eb4700f7c894ad75a3980b8b4e5c16
3
+ metadata.gz: 66b0caefb70e7135f08ea9cdbcbb4476445466387e25c33b25b98b63857c3523
4
+ data.tar.gz: 68cab371e85e993a80a0f3dd1cd322959c608c8756ec042655c4cad669a36184
5
5
  SHA512:
6
- metadata.gz: 78a74f8b09c2e4510b3f0594cf7d5ad9bf4e16aafeda1905618baba0a80a55838e3c909e03d95b057ab0cc09466deb3f6f55c73ac900578eaeed0cced45c7416
7
- data.tar.gz: 4b9405f7098247ce6502b991077c81f86d2f0419e1e1c73b0a2b343e0e5f65bc8121dd5be4bb1fe2909b5b776fc8f6d806c3a06db9a1e58f407b1d206bda4586
6
+ metadata.gz: e73f41bf7082f7e07f8978cff17fa1360139746a1501e8bcbc27cd7132adb2c88d86542b9bff74935a58ff8fb38c485c6dc90a136341234980e8026d5eb4d780
7
+ data.tar.gz: c5fb3d9933f041b4e147bebaa33506f8e33643c885b3a94fbb16164dbd6bc2036a0f9321e84c9114340e16027f0dd167148ee8cbb2be98f44b33d03ae6b6bca1
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'base64'
4
- require 'net/http'
5
4
  require 'active_storage/service/s3_service'
6
5
 
7
6
  module ActiveStorage
@@ -38,37 +37,37 @@ module ActiveStorage
38
37
  end
39
38
 
40
39
  def temp_url(bucket, key, expires_in)
41
- response = RestClient.post(
42
- "https://#{region}-api.vstorage.vngcloud.vn/api/v1/projects/#{project_id}/containers/#{bucket.name}/objects/#{key}/upload_tempurls",
43
- {
40
+ response = VngStorageActiveStorage::RequestClient.post(
41
+ url: "https://#{region}-api.vstorage.vngcloud.vn/api/v1/projects/#{project_id}/containers/#{bucket.name}/objects/#{key}/upload_tempurls",
42
+ body: {
44
43
  timeExpire: expires_in.to_i
45
- }.to_json,
46
- {
44
+ },
45
+ headers: {
47
46
  'Content-Type': 'application/json',
48
47
  Authorization: "Bearer #{access_token}"
49
48
  }
50
49
  )
51
50
 
52
- JSON.parse(response.body).with_indifferent_access[:data][key]
51
+ response[:data][key]
53
52
  rescue StandardError => e
54
53
  raise VngStorageActiveStorage::Error, "Request temp url failed with error: #{e.message}"
55
54
  end
56
55
 
57
56
  def access_token
58
57
  Rails.cache.fetch("vstorage_access_token_#{project_id}", expires_in: 15.minutes) do
59
- response = RestClient.post(
60
- 'https://iamapis.vngcloud.vn/accounts-api/v2/auth/token',
61
- {
58
+ response = VngStorageActiveStorage::RequestClient.post(
59
+ url: 'https://iamapis.vngcloud.vn/accounts-api/v2/auth/token',
60
+ body: {
62
61
  scope: 'email',
63
62
  grant_type: 'client_credentials'
64
63
  },
65
- {
64
+ headers: {
66
65
  'Content-Type': 'application/json',
67
66
  Authorization: "Basic #{authorization}"
68
67
  }
69
68
  )
70
69
 
71
- JSON.parse(response.body).with_indifferent_access[:access_token]
70
+ response[:access_token]
72
71
  end
73
72
  rescue StandardError => e
74
73
  raise VngStorageActiveStorage::Error, "Request Access Token failed with error: #{e.message}"
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+ require 'net/http'
5
+
6
+ module VngStorageActiveStorage
7
+ class RequestClient
8
+ class << self
9
+ def post(url:, body:, headers: nil)
10
+ response = make_request(url, Net::HTTP::Post, body, headers)
11
+
12
+ handle_response(response)
13
+ end
14
+
15
+ private
16
+
17
+ def make_request(url, method_class, body, headers)
18
+ uri = URI.parse(url)
19
+ http = Net::HTTP.new(uri.host, uri.port)
20
+ http.use_ssl = true
21
+
22
+ request = method_class.new(
23
+ uri.path,
24
+ headers || { 'Content-Type' => 'application/json' }
25
+ )
26
+
27
+ request.body = body.to_json unless method_class.is_a?(Net::HTTP::Get)
28
+
29
+ http.request(request)
30
+ end
31
+
32
+ def handle_response(response)
33
+ raise JSON.parse(response.body).with_indifferent_access[:errors].first[:message] unless success?(response) # handle error in vstorage_service
34
+
35
+ JSON.parse(response.body).with_indifferent_access
36
+ end
37
+
38
+ def success?(response)
39
+ code = response.code.to_i
40
+
41
+ code >= 200 && code < 300
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module VngStorageActiveStorage
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'vng_storage_active_storage/request_client'
3
4
  require_relative 'vng_storage_active_storage/version'
4
5
 
5
6
  module VngStorageActiveStorage
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vng_storage_active_storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alpha
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-26 00:00:00.000000000 Z
11
+ date: 2024-11-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ActiveStorage Service for VNG Storage
14
14
  email:
@@ -22,6 +22,7 @@ files:
22
22
  - Rakefile
23
23
  - lib/active_storage/service/vstorage_service.rb
24
24
  - lib/vng_storage_active_storage.rb
25
+ - lib/vng_storage_active_storage/request_client.rb
25
26
  - lib/vng_storage_active_storage/version.rb
26
27
  - vng_storage_active_storage.gemspec
27
28
  homepage: https://github.com/zgid123/vng_storage_active_storage