ecoportal-api-oozes 0.7.0 → 0.7.5
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/CHANGELOG.md +103 -1
- data/README.md +2 -0
- data/ecoportal-api-oozes.gemspec +13 -6
- data/lib/ecoportal/api/common/content/class_helpers.rb +35 -0
- data/lib/ecoportal/api/common/content/collection_model.rb +25 -3
- data/lib/ecoportal/api/common/content/double_model.rb +27 -12
- data/lib/ecoportal/api/common/content/hash_diff_patch.rb +8 -2
- data/lib/ecoportal/api/common/content/wrapped_response.rb +1 -1
- data/lib/ecoportal/api/v2.rb +38 -3
- data/lib/ecoportal/api/v2/page.rb +3 -3
- data/lib/ecoportal/api/v2/page/component.rb +24 -7
- data/lib/ecoportal/api/v2/page/component/action.rb +14 -3
- data/lib/ecoportal/api/v2/page/component/action_field.rb +40 -2
- data/lib/ecoportal/api/v2/page/component/chart_field.rb +54 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/frequency.rb +29 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/heatmap.rb +27 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/indicator.rb +26 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/multiseries.rb +31 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/sankey.rb +27 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/serie.rb +26 -0
- data/lib/ecoportal/api/v2/page/component/chart_field/series_config.rb +23 -0
- data/lib/ecoportal/api/v2/page/component/chart_fr_field.rb +32 -0
- data/lib/ecoportal/api/v2/page/component/checklist_field.rb +35 -2
- data/lib/ecoportal/api/v2/page/component/checklist_item.rb +10 -0
- data/lib/ecoportal/api/v2/page/component/date_field.rb +21 -0
- data/lib/ecoportal/api/v2/page/component/files_field.rb +1 -2
- data/lib/ecoportal/api/v2/page/component/gauge_field.rb +24 -1
- data/lib/ecoportal/api/v2/page/component/gauge_stop.rb +88 -0
- data/lib/ecoportal/api/v2/page/component/images_field.rb +11 -2
- data/lib/ecoportal/api/v2/page/component/people_field.rb +8 -1
- data/lib/ecoportal/api/v2/page/component/plain_text_field.rb +2 -0
- data/lib/ecoportal/api/v2/page/component/reference_field.rb +4 -0
- data/lib/ecoportal/api/v2/page/component/selection_field.rb +4 -5
- data/lib/ecoportal/api/v2/page/component/selection_option.rb +1 -0
- data/lib/ecoportal/api/v2/page/component/signature_field.rb +12 -1
- data/lib/ecoportal/api/v2/page/component/tag_field.rb +2 -0
- data/lib/ecoportal/api/v2/page/components.rb +2 -2
- data/lib/ecoportal/api/v2/page/section.rb +1 -0
- data/lib/ecoportal/api/v2/page/sections.rb +1 -1
- data/lib/ecoportal/api/v2/page/stages.rb +6 -0
- data/lib/ecoportal/api/v2/pages.rb +17 -15
- data/lib/ecoportal/api/v2/pages/page_stage.rb +6 -1
- data/lib/ecoportal/api/v2/pages/stages.rb +4 -1
- data/lib/ecoportal/api/v2/people.rb +31 -0
- data/lib/ecoportal/api/v2/registers.rb +60 -6
- data/lib/ecoportal/api/v2/registers/page_result.rb +21 -0
- data/lib/ecoportal/api/v2/registers/register.rb +37 -0
- data/lib/ecoportal/api/v2/registers/stage_result.rb +14 -0
- data/lib/ecoportal/api/v2/registers/stages_result.rb +13 -0
- data/lib/ecoportal/api/v2/registers/template.rb +12 -0
- data/lib/ecoportal/api/v2/version.rb +1 -1
- metadata +70 -36
- data/lib/ecoportal/api/v2/register.rb +0 -36
- data/lib/ecoportal/api/v2/template.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5929f4395b13bbc49387e6df11b391d868533454b9c4e7a8a82059471dcc0c3e
|
4
|
+
data.tar.gz: 3dec1899afedfa10558c61cd24e3d2e2717bcaa2173284c960b93e1317ba74c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ddfa85f7e4a424b421ef9f4163d7d3f97dc4f25c049bb04e8971472efb3fdc9857ba4b3d0cde701b09e8bb6add6bdb0c046be7e6609b8c6985e8fff36397c04
|
7
|
+
data.tar.gz: 99459754a151c61633212238c23d77cfc0fb3999ca5bf4fd5be6ee01219399f8d32fbc9b16b66fb84678fca4623edcaa1ebcd7d2a4a52b09f643111ab897f7c9
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,109 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
-
## [0.7.
|
4
|
+
## [0.7.5] - 2021-02-xx
|
5
|
+
|
6
|
+
### Added
|
7
|
+
- `Ecoportal::API::Common::ClassHelpers` added inheritable attribute values
|
8
|
+
- `Ecoportal::API::V2::Pages::PageStage` added missing properties
|
9
|
+
- `Ecoportal::API::V2::Page::Stages#ordered_stages` method to obtain stages in order
|
10
|
+
- `Ecoportal::API::V2::Registers#search` method search pages in the register, which includes new classes:
|
11
|
+
- `Ecoportal::API::V2::Registers::PageResult`
|
12
|
+
- `Ecoportal::API::V2::Registers::StagesResult`
|
13
|
+
- `Ecoportal::API::V2::Registers::StageResult`
|
14
|
+
- `Ecoportal::API::V2::Pages#get` added parameter `stage_id:` to be able to directly obtain the stage
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
- Moved some classes to the new namespace `Ecoportal::API::V2::Registers`
|
18
|
+
- `Ecoportal::API::V2::Registers::Register`
|
19
|
+
- `Ecoportal::API::V2::Registers::Template`
|
20
|
+
|
21
|
+
### Fixed
|
22
|
+
- `Ecoportal::API::Common::Content::HashDiffPatch`: `deleted` operation wording and `data.patch_ver`
|
23
|
+
- `Ecoportal::API::V2::Page::Component.new_doc` should delegate to child classes that have their own implementation
|
24
|
+
- `Ecoportal::API::V2::Page::Component::ImagesField.new_doc` should include `layout`
|
25
|
+
- `Ecoportal::API::V2::Page::Component::SignatureField.new_doc` should include `color`
|
26
|
+
|
27
|
+
## [0.7.4] - 2021-02-12
|
28
|
+
|
29
|
+
### Added
|
30
|
+
- `Ecoportal::API::V2::Page::Component::GaugeStop#color=` enabled setting colours using a `symbol`
|
31
|
+
- `:blue`, `:blue_greyed`, `:blue_light`
|
32
|
+
- `:turquoise`, `:jade`, `:green`, `:pistachio`, `:avocado`
|
33
|
+
- `:yellow`, `:orange`, `:pumpkin`, `:red`, `:magenta`, `:fuchsia`, `:purple`, `:violet`
|
34
|
+
- `Ecoportal::API::V2::Page::Component::GaugeStop#color_sym` to get the color as `symbol` name
|
35
|
+
- added support for chart fields:
|
36
|
+
- `Ecoportal::API::V2::Page::Component::ChartField` with the different `mode` types
|
37
|
+
- `Ecoportal::API::V2::Page::Component::ChartFrField` (LTIFR)
|
38
|
+
|
39
|
+
### Changed
|
40
|
+
- `Ecoportal::API::Page::Component::DateField` Date objects + Timezones
|
41
|
+
- `#value` should be shown in local time
|
42
|
+
- `#value=` should be set by local time
|
43
|
+
- `Ecoportal::API::Common::Content::DoubleModel.embeds_multiple` renamed to `embeds_many`
|
44
|
+
- `Ecoportal::API::Common::Content::DoubleModel.embeds_one` removed parameter `:multiple`
|
45
|
+
- Fields under `Ecoportal::API::Page::Component` that `embeds_many` should generate new elements in a standard way
|
46
|
+
- added `Ecoportal::API::Common::Content::CollectionModel#items_class` method
|
47
|
+
|
48
|
+
### Fixed
|
49
|
+
- solved `pretty_print` name collision renaming to `Ecoportal::API::Common::Content::DoubleModel#print_pretty`
|
50
|
+
|
51
|
+
## [0.7.3] - 2021-02-01
|
52
|
+
|
53
|
+
### Added
|
54
|
+
- `Ecoportal::API::Common::Content::CollectionModel#delete!` finally scoped how delete should work :)
|
55
|
+
- `Ecoportal::API::V2.new` better feedback on key error.
|
56
|
+
- `Ecoportal::API::V2::Page::Component::SignatureField` added property `signed_by_name`
|
57
|
+
- `Ecoportal::API::V2::Page::Component#required` this field property is currently supported
|
58
|
+
- `Ecoportal::API::V2::Page::Component::DateField` more supported properties:
|
59
|
+
* `show_time`, `today_button`, `past_only`, `create_event`, `remind_me_in`, `renews`, `renews_every`, `renews_unit`, `renews_until`
|
60
|
+
- `Ecoportal::API::V2::Page::Component::ChecklistField`
|
61
|
+
* added more methods: `add_item`, `ordered_items`
|
62
|
+
- `Ecoportal::API::V2::Page::Component::GaugeField`
|
63
|
+
* more supported properties: `max`, `active_color` and `stops`
|
64
|
+
- for `stops` added class `Ecoportal::API::V2::Page::Component::GaugeStop`
|
65
|
+
* added more methods: `add_stop`, `ordered_stops`
|
66
|
+
- `Ecoportal::API::V2::Page::Component::ReferenceField` more supported properties:
|
67
|
+
* `register_id`, `hide_create`, `hide_attach`, `hide_metadata`, `hide_dashboards`, `display_fields`, `display_fields_in_lookup`
|
68
|
+
- `Ecoportal::API::V2::Page::Component::ActionField`
|
69
|
+
* more supported properties:`create_actions`, `required_number_of_completed_actions`, `permits_and_rules_integration`, `add_subscribed`, `add_subscribed_to_tasks`
|
70
|
+
* added more methods: `add_task`, `ordered_tasks`
|
71
|
+
- `Ecoportal::API::V2::Page::Component::Action` modified, provided that some properties are `read_only`
|
72
|
+
- `Ecoportal::API::V2::Page::Component::PeopleField` more supported properties:
|
73
|
+
* `is_me_button`, `attach_mode`, `person_schema_id`, `viewable_fields`, `singular`, `requires_number`, `cached_people`, `attached_people_permissions_enabled`, `apply_attached_people_permissions_to`, `attached_people_permissions_editable`, `attached_people_permissions_flags`
|
74
|
+
- `Ecoportal::API::V2::Page::Component::PlainTextField` more supported properties:
|
75
|
+
* `multiline`, `max_length`, `exact_index`
|
76
|
+
- `Ecoportal::API::V2::Page::Component::SelectionField` more supported properties:
|
77
|
+
* `flat`
|
78
|
+
- `Ecoportal::API::V2::Page::Component::TagField` more supported properties:
|
79
|
+
* `single_select`, `use_defaults`, `tag_tree_id`, `button_text`
|
80
|
+
- `Ecoportal::API::V2::Page::Section` more supported properties:
|
81
|
+
* `minimized`
|
82
|
+
|
83
|
+
### Changed
|
84
|
+
- upgraded `ecoportal-api` dependency
|
85
|
+
|
86
|
+
### Fixed
|
87
|
+
- `Ecoportal::API::Common::Content::CollectionModel#upsert!` was not actually moving the element to the new position when it already existed
|
88
|
+
|
89
|
+
## [0.7.2] - 2020-10-07
|
90
|
+
|
91
|
+
### Added
|
92
|
+
- automatic key builder
|
93
|
+
- helper: `Ecoportal::API::V2::v2key` method
|
94
|
+
- `user_key:` and `org_key:` as constructor methods for `Ecoportal::API::V2`
|
95
|
+
### Changed
|
96
|
+
### Fixed
|
97
|
+
|
98
|
+
## [0.7.1] - 2020-10-07
|
99
|
+
|
100
|
+
### Added
|
101
|
+
### Changed
|
102
|
+
- updated dependencies
|
103
|
+
### Fixed
|
104
|
+
|
105
|
+
|
106
|
+
## [0.7.0] - 2020-09-10
|
5
107
|
|
6
108
|
### Added
|
7
109
|
### Changed
|
data/README.md
CHANGED
data/ecoportal-api-oozes.gemspec
CHANGED
@@ -13,6 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "https://www.ecoportal.com"
|
14
14
|
spec.licenses = %w[MIT]
|
15
15
|
|
16
|
+
spec.required_ruby_version = '>= 2.4.4'
|
17
|
+
|
16
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
19
|
f.match(%r{^(test|spec|features)/})
|
18
20
|
end
|
@@ -20,12 +22,17 @@ Gem::Specification.new do |spec|
|
|
20
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
23
|
spec.require_paths = ["lib"]
|
22
24
|
|
23
|
-
spec.add_development_dependency "bundler", "
|
24
|
-
spec.add_development_dependency "
|
25
|
-
spec.add_development_dependency "
|
26
|
-
spec.add_development_dependency "yard", "
|
27
|
-
spec.add_development_dependency "redcarpet", "
|
25
|
+
spec.add_development_dependency "bundler", ">= 2.1.3", "< 2.2"
|
26
|
+
spec.add_development_dependency "rspec", ">= 3.9", "< 4"
|
27
|
+
spec.add_development_dependency "rake", ">= 12.3.0", "< 13"
|
28
|
+
spec.add_development_dependency "yard", ">= 0.9.18", "< 0.10"
|
29
|
+
spec.add_development_dependency "redcarpet", ">= 3.5.0", "< 3.6"
|
28
30
|
spec.add_development_dependency "pry"
|
29
31
|
|
30
|
-
spec.add_dependency 'ecoportal-api',
|
32
|
+
spec.add_dependency 'ecoportal-api', '>= 0.7.4', '< 0.8'
|
33
|
+
|
34
|
+
spec.post_install_message = %{
|
35
|
+
The 'ecoportal-api-oozes' gem has been deprecated and has been replaced by 'ecoportal-api-v2'.
|
36
|
+
See: https://rubygems.org/gems/ecoportal-api-v2
|
37
|
+
}
|
31
38
|
end
|
@@ -104,6 +104,41 @@ module Ecoportal
|
|
104
104
|
val != NOT_USED
|
105
105
|
end
|
106
106
|
|
107
|
+
# Keeps track on class instance variables that should be inherited by child classes.
|
108
|
+
# @note
|
109
|
+
# - subclasses will inherit the value as is at that moment
|
110
|
+
# - any change afterwards will be only on the specific class (in line with class instance variables)
|
111
|
+
# - adapted from https://stackoverflow.com/a/10729812/4352306
|
112
|
+
# TODO: this separates the logic of the method to the instance var. Think if would be possible to join them somehow.
|
113
|
+
def inheritable_class_vars(*vars)
|
114
|
+
@inheritable_class_vars ||= [:inheritable_class_vars]
|
115
|
+
@inheritable_class_vars += vars
|
116
|
+
end
|
117
|
+
|
118
|
+
# Builds the attr_reader and attr_writer of `attrs` and registers the associated instance variable as inheritable.
|
119
|
+
def inheritable_attrs(*attrs)
|
120
|
+
attrs.each do |attr|
|
121
|
+
class_eval %(
|
122
|
+
class << self; attr_accessor :#{attr} end
|
123
|
+
)
|
124
|
+
end
|
125
|
+
inheritable_class_vars(*attrs)
|
126
|
+
end
|
127
|
+
|
128
|
+
# This callback method is called whenever a subclass of the current class is created.
|
129
|
+
# @note
|
130
|
+
# - values of the instance variables are copied as they are (no dups or clones)
|
131
|
+
# - the above means: avoid methods that change the state of the mutable object on it
|
132
|
+
# - mutating methods would reflect the changes on other classes as well
|
133
|
+
# - therefore, `freeze` will be called on the values that are inherited.
|
134
|
+
def inherited(subclass)
|
135
|
+
inheritable_class_vars.each do |var|
|
136
|
+
instance_var = instance_variable_name(var)
|
137
|
+
value = instance_variable_get(instance_var)
|
138
|
+
subclass.instance_variable_set(instance_var, value.freeze)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
107
142
|
end
|
108
143
|
end
|
109
144
|
end
|
@@ -101,6 +101,11 @@ module Ecoportal
|
|
101
101
|
super(ini_doc, parent: parent, key: key)
|
102
102
|
end
|
103
103
|
|
104
|
+
# @return [Class] the class of the elements of the Collection
|
105
|
+
def items_class
|
106
|
+
self.class.klass
|
107
|
+
end
|
108
|
+
|
104
109
|
# Transforms `value` into the actual `key` to access the object in the doc `Array`
|
105
110
|
def _doc_key(value)
|
106
111
|
#print "*(#{value.class})"
|
@@ -134,6 +139,7 @@ module Ecoportal
|
|
134
139
|
end
|
135
140
|
end
|
136
141
|
|
142
|
+
# Get an element usign the `key`.
|
137
143
|
def [](value)
|
138
144
|
items_by_key[get_key(value)]
|
139
145
|
end
|
@@ -161,6 +167,15 @@ module Ecoportal
|
|
161
167
|
end
|
162
168
|
end
|
163
169
|
|
170
|
+
def delete!(value)
|
171
|
+
unless value.is_a?(Hash) || value.is_a?(Content::DoubleModel)
|
172
|
+
raise "'Content::DoubleModel' or 'Hash' doc required"
|
173
|
+
end
|
174
|
+
if item = self[value]
|
175
|
+
_doc_delete(item.doc)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
164
179
|
protected
|
165
180
|
|
166
181
|
def order_matters?; self.class.order_matters; end
|
@@ -220,6 +235,13 @@ module Ecoportal
|
|
220
235
|
super
|
221
236
|
end
|
222
237
|
|
238
|
+
def _doc_delete(value)
|
239
|
+
if current_pos = _doc_key(value)
|
240
|
+
_doc_items.delete_at(current_pos)
|
241
|
+
on_change
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
223
245
|
def _doc_upsert(value, pos: NOT_USED, before: NOT_USED, after: NOT_USED)
|
224
246
|
current_pos = _doc_key(value)
|
225
247
|
pos = case
|
@@ -228,7 +250,7 @@ module Ecoportal
|
|
228
250
|
when used_param?(before)
|
229
251
|
_doc_key(before)
|
230
252
|
when used_param?(after)
|
231
|
-
puts "to add after #{after.id}"
|
253
|
+
#puts "to add after #{after.id}"
|
232
254
|
if i = _doc_key(after)
|
233
255
|
i + 1
|
234
256
|
end
|
@@ -237,10 +259,10 @@ module Ecoportal
|
|
237
259
|
pos ||= current_pos
|
238
260
|
|
239
261
|
if current_pos && pos
|
240
|
-
_doc_items.
|
262
|
+
_doc_items.delete_at(current_pos)
|
241
263
|
pos = (pos <= current_pos)? pos : pos - 1
|
242
264
|
end
|
243
|
-
|
265
|
+
|
244
266
|
pos = (pos && pos < _doc_items.length)? pos : _doc_items.length
|
245
267
|
|
246
268
|
pos.tap do |i|
|
@@ -131,7 +131,32 @@ module Ecoportal
|
|
131
131
|
end
|
132
132
|
|
133
133
|
# Helper to embed one nested object under one property
|
134
|
-
def embeds_one(method, key: method, nullable: false,
|
134
|
+
def embeds_one(method, key: method, nullable: false, klass:)
|
135
|
+
embed(method, key: key, nullable: nullable, multiple: false, klass: klass)
|
136
|
+
end
|
137
|
+
|
138
|
+
# @note
|
139
|
+
# - if you have a dedicated `Enumerable` class to manage `many`, you should use `:enum_class`
|
140
|
+
# - otherwise, just indicate the child class in `:klass` and it will auto generate the class
|
141
|
+
# @param
|
142
|
+
def embeds_many(method, key: method, order_matters: false, order_key: nil, klass: nil, enum_class: nil)
|
143
|
+
if enum_class
|
144
|
+
eclass = enum_class
|
145
|
+
elsif klass
|
146
|
+
eclass = new_class(method, inherits: Common::Content::CollectionModel) do |dim_class|
|
147
|
+
dim_class.klass = klass
|
148
|
+
dim_class.order_matters = order_matters
|
149
|
+
dim_class.order_key = order_key
|
150
|
+
end
|
151
|
+
else
|
152
|
+
raise "You should either specify the 'klass' of the elements or the 'enum_class'"
|
153
|
+
end
|
154
|
+
embed(method, key: key, multiple: true, klass: eclass)
|
155
|
+
end
|
156
|
+
|
157
|
+
private
|
158
|
+
|
159
|
+
def embed(method, key: method, nullable: false, multiple: false, klass:)
|
135
160
|
method = method.to_s.freeze
|
136
161
|
var = instance_variable_name(method).freeze
|
137
162
|
k = key.to_s.freeze
|
@@ -150,16 +175,6 @@ module Ecoportal
|
|
150
175
|
end
|
151
176
|
end
|
152
177
|
|
153
|
-
def embeds_multiple(method, key: method, order_matters: false, order_key: nil, klass:)
|
154
|
-
dim_class = new_class(method, inherits: Common::Content::CollectionModel) do |dklass|
|
155
|
-
dklass.klass = klass
|
156
|
-
dklass.order_matters = order_matters
|
157
|
-
dklass.order_key = order_key
|
158
|
-
end
|
159
|
-
|
160
|
-
embeds_one(method, key: key, multiple: true, klass: dim_class)
|
161
|
-
end
|
162
|
-
|
163
178
|
end
|
164
179
|
|
165
180
|
attr_reader :_parent, :_key
|
@@ -252,7 +267,7 @@ module Ecoportal
|
|
252
267
|
end
|
253
268
|
end
|
254
269
|
|
255
|
-
def
|
270
|
+
def print_pretty
|
256
271
|
puts JSON.pretty_generate(as_json)
|
257
272
|
self
|
258
273
|
end
|
@@ -60,8 +60,13 @@ module Ecoportal
|
|
60
60
|
a == b
|
61
61
|
end
|
62
62
|
|
63
|
-
def patch_data(a, b = nil)
|
63
|
+
def patch_data(a, b = nil, delete: false)
|
64
64
|
{}.tap do |data_hash|
|
65
|
+
if delete
|
66
|
+
patch_ver = (a && a["patch_ver"]) || 1
|
67
|
+
data_hash["patch_ver"] = patch_ver
|
68
|
+
next
|
69
|
+
end
|
65
70
|
a.each do |key, a_value|
|
66
71
|
b_value = b[key] if b_has_key = b && b.key?(key)
|
67
72
|
is_meta_key = META_KEYS.include?(key)
|
@@ -83,7 +88,8 @@ module Ecoportal
|
|
83
88
|
return NO_CHANGES unless b.is_a?(Hash) && id = get_id(b, exception: false)
|
84
89
|
{
|
85
90
|
"id" => id,
|
86
|
-
"operation" => "
|
91
|
+
"operation" => "deleted",
|
92
|
+
"data" => patch_data(b, delete: true)
|
87
93
|
}
|
88
94
|
end
|
89
95
|
|
data/lib/ecoportal/api/v2.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
1
3
|
module Ecoportal
|
2
4
|
module API
|
3
5
|
# @attr_reader client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
@@ -8,25 +10,48 @@ module Ecoportal
|
|
8
10
|
|
9
11
|
VERSION = "v2"
|
10
12
|
|
13
|
+
class << self
|
14
|
+
def v2key (ukey, gkey)
|
15
|
+
Base64.urlsafe_encode64({
|
16
|
+
organization: gkey,
|
17
|
+
user: ukey
|
18
|
+
}.to_json)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class_resolver :people_class, "Ecoportal::API::V2::People"
|
11
23
|
class_resolver :registers_class, "Ecoportal::API::V2::Registers"
|
12
24
|
class_resolver :pages_class, "Ecoportal::API::V2::Pages"
|
13
25
|
|
14
26
|
attr_reader :client, :logger
|
15
27
|
|
16
28
|
# Creates an `V2` object to scope version specific api requests.
|
29
|
+
# @note
|
30
|
+
# - You should use either `api_key` or `user_key` and `org_key`
|
31
|
+
# - The const `VERSION` determineds the api version that client will query against.
|
32
|
+
# - This means that each subclass of `V2` should define their own `VERSION` constant.
|
17
33
|
# @param api_key [String] the key version to stablish the api connection.
|
34
|
+
# @param user_key [String] the user key used for the api connection (requires `org_key`).
|
35
|
+
# @param org_key [String] the org key used for the api connection (requires `user_key`).
|
18
36
|
# @param host [String] api server domain.
|
19
37
|
# @param logger [Logger] an object with `Logger` interface to generate logs.
|
20
|
-
def initialize(api_key, host: "live.ecoportal.com", logger: default_logger)
|
38
|
+
def initialize(api_key = nil, user_key: nil, org_key: nil, host: "live.ecoportal.com", logger: default_logger)
|
39
|
+
v2key = get_key(api_key: api_key, user_key: user_key, org_key: org_key)
|
21
40
|
@logger = logger
|
22
41
|
@client = Common::Content::Client.new(
|
23
|
-
api_key:
|
42
|
+
api_key: v2key,
|
24
43
|
host: host,
|
25
44
|
version: self.class::VERSION,
|
26
45
|
logger: @logger
|
27
46
|
)
|
28
47
|
end
|
29
48
|
|
49
|
+
# Obtain specific object for people api requests.
|
50
|
+
# @return [People] an instance object ready to make people api requests.
|
51
|
+
def people
|
52
|
+
people_class.new(client)
|
53
|
+
end
|
54
|
+
|
30
55
|
# Obtain specific object for schema api requests.
|
31
56
|
# @return [Registers] an instance object ready to make registers api requests.
|
32
57
|
def registers
|
@@ -39,9 +64,19 @@ module Ecoportal
|
|
39
64
|
pages_class.new(client)
|
40
65
|
end
|
41
66
|
|
67
|
+
private
|
68
|
+
|
69
|
+
def get_key(api_key: nil, user_key: nil, org_key: nil)
|
70
|
+
return self.class.v2key(user_key, org_key) if user_key && org_key
|
71
|
+
return api_key if api_key #|| ENV['X_ECOPORTAL_API_KEY']
|
72
|
+
raise "You need to provide either an api_key or user_key" unless user_key
|
73
|
+
raise "You need to provide an org_key as well (not just a user_key)" unless org_key
|
74
|
+
end
|
75
|
+
|
42
76
|
end
|
43
77
|
end
|
44
78
|
end
|
45
79
|
|
46
|
-
require 'ecoportal/api/v2/
|
80
|
+
require 'ecoportal/api/v2/people'
|
47
81
|
require 'ecoportal/api/v2/pages'
|
82
|
+
require 'ecoportal/api/v2/registers'
|