ecoportal-api-v2 1.1.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.markdownlint.json +4 -0
  3. data/.rubocop.yml +54 -15
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +485 -373
  6. data/ecoportal-api-v2.gemspec +13 -12
  7. data/lib/ecoportal/api/common/concerns/benchmarkable.rb +47 -34
  8. data/lib/ecoportal/api/common/concerns/threadable.rb +41 -0
  9. data/lib/ecoportal/api/common/concerns.rb +1 -0
  10. data/lib/ecoportal/api/common/content/array_model.rb +85 -79
  11. data/lib/ecoportal/api/common/content/class_helpers.rb +34 -31
  12. data/lib/ecoportal/api/common/content/collection_model.rb +77 -65
  13. data/lib/ecoportal/api/common/content/double_model.rb +105 -87
  14. data/lib/ecoportal/api/common/content/wrapped_response.rb +11 -11
  15. data/lib/ecoportal/api/v2/page/component/reference_field.rb +17 -13
  16. data/lib/ecoportal/api/v2/page/component.rb +67 -68
  17. data/lib/ecoportal/api/v2/page/components.rb +9 -9
  18. data/lib/ecoportal/api/v2/page/force.rb +6 -7
  19. data/lib/ecoportal/api/v2/page/stages.rb +5 -6
  20. data/lib/ecoportal/api/v2/page.rb +35 -33
  21. data/lib/ecoportal/api/v2/pages/page_stage.rb +22 -20
  22. data/lib/ecoportal/api/v2/pages.rb +18 -14
  23. data/lib/ecoportal/api/v2/people.rb +2 -3
  24. data/lib/ecoportal/api/v2/registers.rb +28 -13
  25. data/lib/ecoportal/api/v2/s3/data.rb +27 -0
  26. data/lib/ecoportal/api/v2/s3/files/batch_upload.rb +110 -0
  27. data/lib/ecoportal/api/v2/s3/files/poll.rb +82 -0
  28. data/lib/ecoportal/api/v2/s3/files/poll_status.rb +52 -0
  29. data/lib/ecoportal/api/v2/s3/files.rb +132 -0
  30. data/lib/ecoportal/api/v2/s3/upload.rb +154 -0
  31. data/lib/ecoportal/api/v2/s3.rb +66 -0
  32. data/lib/ecoportal/api/v2.rb +10 -3
  33. data/lib/ecoportal/api/v2_version.rb +1 -1
  34. metadata +53 -54
@@ -0,0 +1,66 @@
1
+ module Ecoportal
2
+ module API
3
+ class V2
4
+ # @attr_reader client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
5
+ class S3
6
+ class MissingLocalFile < ArgumentError; end
7
+ class CredentialsGetFailed < StandardError; end
8
+
9
+ extend Common::BaseClass
10
+
11
+ class_resolver :data_class, "Ecoportal::API::V2::S3::Data"
12
+ class_resolver :files_class, "Ecoportal::API::V2::S3::Files"
13
+
14
+ attr_reader :client
15
+
16
+ # @param client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
17
+ # @return [Schemas] an instance object ready to make schema api requests.
18
+ def initialize(client)
19
+ @client = client
20
+ end
21
+
22
+ # Gets the S3 credentials to upload files
23
+ # @return [Ecoportal::API::V2::S3::Data]
24
+ def data
25
+ response = client.get("/s3/data")
26
+ body = body_data(response.body)
27
+
28
+ return data_class.new(body) if response.success?
29
+
30
+ msg = "Could not get S3 credentials - Error #{response.status}: #{body}"
31
+ raise CredentialsGetFailed, msg
32
+ end
33
+
34
+ # @param file [String] full path to existing local file
35
+ # @param credentials [Ecoportal::API::V2::S3::Data, NilClass]
36
+ # @return [Hash, NilClass] with the s3_file_reference on success, and `nil` otherwise
37
+ def upload_file(file, credentials: data, &block)
38
+ msg = "The file '#{file}' does not exist"
39
+ raise MissingLocalFile, msg unless File.exist?(file)
40
+
41
+ credentials ||= data
42
+ Upload.new(credentials, file: file).upload!(&block)
43
+ end
44
+
45
+ # Obtain specific object for eP file api requests.
46
+ # @return [Files] an instance object ready to make eP file api requests.
47
+ def files
48
+ files_class.new(client, s3_api: self)
49
+ end
50
+
51
+ private
52
+
53
+ def body_data(body)
54
+ return body unless body.is_a?(Hash)
55
+ return body unless body.key?("data")
56
+
57
+ body["data"]
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ require 'ecoportal/api/v2/s3/data'
65
+ require 'ecoportal/api/v2/s3/upload'
66
+ require 'ecoportal/api/v2/s3/files'
@@ -8,10 +8,10 @@ module Ecoportal
8
8
  extend Common::BaseClass
9
9
  include Common::Logging
10
10
 
11
- VERSION = "v2"
11
+ VERSION = "v2".freeze
12
12
 
13
13
  class << self
14
- def v2key (ukey, gkey)
14
+ def v2key(ukey, gkey)
15
15
  Base64.urlsafe_encode64({
16
16
  organization: gkey,
17
17
  user: ukey
@@ -22,6 +22,7 @@ module Ecoportal
22
22
  class_resolver :people_class, "Ecoportal::API::V2::People"
23
23
  class_resolver :registers_class, "Ecoportal::API::V2::Registers"
24
24
  class_resolver :pages_class, "Ecoportal::API::V2::Pages"
25
+ class_resolver :s3_class, "Ecoportal::API::V2::S3"
25
26
 
26
27
  attr_reader :client, :logger
27
28
 
@@ -64,6 +65,12 @@ module Ecoportal
64
65
  pages_class.new(client)
65
66
  end
66
67
 
68
+ # Obtain specific object for file api requests.
69
+ # @return [S3] an instance object ready to make files api requests.
70
+ def s3 # rubocop:disable Naming/VariableNumber
71
+ s3_class.new(client)
72
+ end
73
+
67
74
  private
68
75
 
69
76
  def get_key(api_key: nil, user_key: nil, org_key: nil)
@@ -72,7 +79,6 @@ module Ecoportal
72
79
  raise "You need to provide either an api_key or user_key" unless user_key
73
80
  raise "You need to provide an org_key as well (not just a user_key)" unless org_key
74
81
  end
75
-
76
82
  end
77
83
  end
78
84
  end
@@ -80,3 +86,4 @@ end
80
86
  require 'ecoportal/api/v2/people'
81
87
  require 'ecoportal/api/v2/pages'
82
88
  require 'ecoportal/api/v2/registers'
89
+ require 'ecoportal/api/v2/s3'
@@ -1,5 +1,5 @@
1
1
  module Ecoportal
2
2
  module API
3
- GEM2_VERSION = "1.1.7"
3
+ GEM2_VERSION = "2.0.0".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,55 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecoportal-api-v2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-12 00:00:00.000000000 Z
11
+ date: 2024-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 2.4.12
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '3'
23
- type: :development
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 2.4.12
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '3'
33
- - !ruby/object:Gem::Dependency
34
- name: rspec
14
+ name: pry
35
15
  requirement: !ruby/object:Gem::Requirement
36
16
  requirements:
37
17
  - - ">="
38
18
  - !ruby/object:Gem::Version
39
- version: 3.12.0
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '4'
19
+ version: '0.14'
43
20
  type: :development
44
21
  prerelease: false
45
22
  version_requirements: !ruby/object:Gem::Requirement
46
23
  requirements:
47
24
  - - ">="
48
25
  - !ruby/object:Gem::Version
49
- version: 3.12.0
50
- - - "<"
51
- - !ruby/object:Gem::Version
52
- version: '4'
26
+ version: '0.14'
53
27
  - !ruby/object:Gem::Dependency
54
28
  name: rake
55
29
  requirement: !ruby/object:Gem::Requirement
@@ -71,32 +45,32 @@ dependencies:
71
45
  - !ruby/object:Gem::Version
72
46
  version: '14'
73
47
  - !ruby/object:Gem::Dependency
74
- name: yard
48
+ name: redcarpet
75
49
  requirement: !ruby/object:Gem::Requirement
76
50
  requirements:
77
51
  - - ">="
78
52
  - !ruby/object:Gem::Version
79
- version: 0.9.34
53
+ version: 3.6.0
80
54
  - - "<"
81
55
  - !ruby/object:Gem::Version
82
- version: '1'
56
+ version: '4'
83
57
  type: :development
84
58
  prerelease: false
85
59
  version_requirements: !ruby/object:Gem::Requirement
86
60
  requirements:
87
61
  - - ">="
88
62
  - !ruby/object:Gem::Version
89
- version: 0.9.34
63
+ version: 3.6.0
90
64
  - - "<"
91
65
  - !ruby/object:Gem::Version
92
- version: '1'
66
+ version: '4'
93
67
  - !ruby/object:Gem::Dependency
94
- name: redcarpet
68
+ name: rspec
95
69
  requirement: !ruby/object:Gem::Requirement
96
70
  requirements:
97
71
  - - ">="
98
72
  - !ruby/object:Gem::Version
99
- version: 3.6.0
73
+ version: 3.12.0
100
74
  - - "<"
101
75
  - !ruby/object:Gem::Version
102
76
  version: '4'
@@ -106,44 +80,58 @@ dependencies:
106
80
  requirements:
107
81
  - - ">="
108
82
  - !ruby/object:Gem::Version
109
- version: 3.6.0
83
+ version: 3.12.0
110
84
  - - "<"
111
85
  - !ruby/object:Gem::Version
112
86
  version: '4'
113
87
  - !ruby/object:Gem::Dependency
114
- name: pry
88
+ name: yard
115
89
  requirement: !ruby/object:Gem::Requirement
116
90
  requirements:
117
- - - ">="
91
+ - - "~>"
118
92
  - !ruby/object:Gem::Version
119
- version: '0.14'
93
+ version: 0.9.34
120
94
  type: :development
121
95
  prerelease: false
122
96
  version_requirements: !ruby/object:Gem::Requirement
123
97
  requirements:
124
- - - ">="
98
+ - - "~>"
125
99
  - !ruby/object:Gem::Version
126
- version: '0.14'
100
+ version: 0.9.34
127
101
  - !ruby/object:Gem::Dependency
128
102
  name: ecoportal-api
129
103
  requirement: !ruby/object:Gem::Requirement
130
104
  requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: 0.9.6
134
- - - "<"
105
+ - - "~>"
135
106
  - !ruby/object:Gem::Version
136
107
  version: '0.10'
137
108
  type: :runtime
138
109
  prerelease: false
139
110
  version_requirements: !ruby/object:Gem::Requirement
140
111
  requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '0.10'
115
+ - !ruby/object:Gem::Dependency
116
+ name: mime-types
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '3.5'
141
122
  - - ">="
142
123
  - !ruby/object:Gem::Version
143
- version: 0.9.6
144
- - - "<"
124
+ version: 3.5.2
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
145
130
  - !ruby/object:Gem::Version
146
- version: '0.10'
131
+ version: '3.5'
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 3.5.2
147
135
  description:
148
136
  email:
149
137
  - rien@ecoportal.co.nz
@@ -154,8 +142,10 @@ extensions: []
154
142
  extra_rdoc_files: []
155
143
  files:
156
144
  - ".gitignore"
145
+ - ".markdownlint.json"
157
146
  - ".rspec"
158
147
  - ".rubocop.yml"
148
+ - ".ruby-version"
159
149
  - ".yardopts"
160
150
  - CHANGELOG.md
161
151
  - Gemfile
@@ -169,6 +159,7 @@ files:
169
159
  - lib/ecoportal/api/common.v2.rb
170
160
  - lib/ecoportal/api/common/concerns.rb
171
161
  - lib/ecoportal/api/common/concerns/benchmarkable.rb
162
+ - lib/ecoportal/api/common/concerns/threadable.rb
172
163
  - lib/ecoportal/api/common/content.rb
173
164
  - lib/ecoportal/api/common/content/array_model.rb
174
165
  - lib/ecoportal/api/common/content/class_helpers.rb
@@ -249,11 +240,19 @@ files:
249
240
  - lib/ecoportal/api/v2/registers/stage_result.rb
250
241
  - lib/ecoportal/api/v2/registers/stages_result.rb
251
242
  - lib/ecoportal/api/v2/registers/template.rb
243
+ - lib/ecoportal/api/v2/s3.rb
244
+ - lib/ecoportal/api/v2/s3/data.rb
245
+ - lib/ecoportal/api/v2/s3/files.rb
246
+ - lib/ecoportal/api/v2/s3/files/batch_upload.rb
247
+ - lib/ecoportal/api/v2/s3/files/poll.rb
248
+ - lib/ecoportal/api/v2/s3/files/poll_status.rb
249
+ - lib/ecoportal/api/v2/s3/upload.rb
252
250
  - lib/ecoportal/api/v2_version.rb
253
251
  homepage: https://www.ecoportal.com
254
252
  licenses:
255
253
  - MIT
256
- metadata: {}
254
+ metadata:
255
+ rubygems_mfa_required: 'true'
257
256
  post_install_message:
258
257
  rdoc_options: []
259
258
  require_paths:
@@ -262,14 +261,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
262
261
  requirements:
263
262
  - - ">="
264
263
  - !ruby/object:Gem::Version
265
- version: 2.7.2
264
+ version: 3.2.2
266
265
  required_rubygems_version: !ruby/object:Gem::Requirement
267
266
  requirements:
268
267
  - - ">="
269
268
  - !ruby/object:Gem::Version
270
269
  version: '0'
271
270
  requirements: []
272
- rubygems_version: 3.4.12
271
+ rubygems_version: 3.5.6
273
272
  signing_key:
274
273
  specification_version: 4
275
274
  summary: A collection of helpers for interacting with the ecoPortal MS's V2 API