ecoportal-api-v2 1.1.7 → 2.0.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.
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