ecoportal-api 0.8.5 → 0.9.2
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/.gitignore +20 -20
- data/.rspec +3 -3
- data/.rubocop.yml +55 -55
- data/.travis.yml +5 -5
- data/.yardopts +10 -10
- data/CHANGELOG.md +257 -236
- data/Gemfile +6 -6
- data/LICENSE +21 -21
- data/README.md +34 -34
- data/Rakefile +27 -27
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/ecoportal-api.gemspec +36 -36
- data/lib/ecoportal/api/common/base_class.rb +33 -29
- data/lib/ecoportal/api/common/base_model.rb +195 -177
- data/lib/ecoportal/api/common/batch_operation.rb +119 -119
- data/lib/ecoportal/api/common/batch_response.rb +34 -34
- data/lib/ecoportal/api/common/client.rb +198 -196
- data/lib/ecoportal/api/common/doc_helpers.rb +29 -29
- data/lib/ecoportal/api/common/elastic_apm_integration.rb +112 -112
- data/lib/ecoportal/api/common/hash_diff.rb +41 -41
- data/lib/ecoportal/api/common/logging.rb +12 -12
- data/lib/ecoportal/api/common/response.rb +31 -31
- data/lib/ecoportal/api/common/wrapped_response.rb +54 -54
- data/lib/ecoportal/api/common.rb +18 -18
- data/lib/ecoportal/api/errors/base.rb +8 -8
- data/lib/ecoportal/api/errors/time_out.rb +8 -8
- data/lib/ecoportal/api/errors.rb +9 -9
- data/lib/ecoportal/api/internal/account.rb +99 -100
- data/lib/ecoportal/api/internal/login_provider.rb +9 -9
- data/lib/ecoportal/api/internal/login_providers.rb +33 -33
- data/lib/ecoportal/api/internal/people.rb +14 -14
- data/lib/ecoportal/api/internal/permissions.rb +14 -13
- data/lib/ecoportal/api/internal/person.rb +101 -53
- data/lib/ecoportal/api/internal/person_details.rb +9 -9
- data/lib/ecoportal/api/internal/person_schema.rb +10 -10
- data/lib/ecoportal/api/internal/person_schemas.rb +11 -11
- data/lib/ecoportal/api/internal/policy_group.rb +9 -9
- data/lib/ecoportal/api/internal/policy_groups.rb +32 -32
- data/lib/ecoportal/api/internal/preferences.rb +31 -31
- data/lib/ecoportal/api/internal/schema_field.rb +8 -8
- data/lib/ecoportal/api/internal/schema_field_value.rb +8 -8
- data/lib/ecoportal/api/internal.rb +31 -31
- data/lib/ecoportal/api/logger.rb +62 -62
- data/lib/ecoportal/api/v1/people.rb +218 -218
- data/lib/ecoportal/api/v1/person.rb +138 -135
- data/lib/ecoportal/api/v1/person_details.rb +94 -82
- data/lib/ecoportal/api/v1/person_schema.rb +53 -53
- data/lib/ecoportal/api/v1/person_schemas.rb +48 -48
- data/lib/ecoportal/api/v1/schema_field.rb +34 -34
- data/lib/ecoportal/api/v1/schema_field_value.rb +65 -65
- data/lib/ecoportal/api/v1.rb +49 -49
- data/lib/ecoportal/api/version.rb +5 -5
- data/lib/ecoportal/api.rb +16 -16
- metadata +3 -3
@@ -1,48 +1,48 @@
|
|
1
|
-
module Ecoportal
|
2
|
-
module API
|
3
|
-
class V1
|
4
|
-
# @attr_reader client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
5
|
-
class PersonSchemas
|
6
|
-
extend Common::BaseClass
|
7
|
-
include Enumerable
|
8
|
-
|
9
|
-
class_resolver :person_schema_class, "Ecoportal::API::V1::PersonSchema"
|
10
|
-
|
11
|
-
attr_reader :client
|
12
|
-
|
13
|
-
# @param client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
14
|
-
# @return [Schemas] an instance object ready to make schema api requests.
|
15
|
-
def initialize(client)
|
16
|
-
@client = client
|
17
|
-
end
|
18
|
-
|
19
|
-
# Gets all the schemas via api request.
|
20
|
-
# @return [Enumerable<PersonSchema>] an `Enumerable` with all schemas already wrapped as `PersonSchema` objects.
|
21
|
-
def get_all
|
22
|
-
response = client.get("/person_schemas")
|
23
|
-
Common::WrappedResponse.new(response, person_schema_class)
|
24
|
-
end
|
25
|
-
|
26
|
-
# If a `block` is **not** given it calls [Object#to_enum](https://ruby-doc.org/core-2.6.2/Object.html#method-i-to_enum)
|
27
|
-
# Otherwise it calls `get_all`.
|
28
|
-
# @note
|
29
|
-
# - `:params` doesn't really do anything.
|
30
|
-
# - same as #get_all but with block :)
|
31
|
-
# - `to_a` will call `each` (see this [detailed explanation](https://stackoverflow.com/a/45201663/4352306))
|
32
|
-
# - however, as far as you have an iterator, such as `each`, `to_a` should be last resource (see [this explanation](https://stackoverflow.com/a/44186921/4352306))
|
33
|
-
# @yield [schema] does some stuff with the schema.
|
34
|
-
# @yieldparam schema [PersonSchema]
|
35
|
-
# @yieldreturn [PersonSchema]
|
36
|
-
# @return [Enumerable<PersonSchema>] an `Enumerable` with all the person schema objects.
|
37
|
-
def each(params: {}, &block)
|
38
|
-
return to_enum(:each) unless block
|
39
|
-
get_all.each(&block)
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
require 'ecoportal/api/v1/person_schema'
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
class V1
|
4
|
+
# @attr_reader client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
5
|
+
class PersonSchemas
|
6
|
+
extend Common::BaseClass
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
class_resolver :person_schema_class, "Ecoportal::API::V1::PersonSchema"
|
10
|
+
|
11
|
+
attr_reader :client
|
12
|
+
|
13
|
+
# @param client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
14
|
+
# @return [Schemas] an instance object ready to make schema api requests.
|
15
|
+
def initialize(client)
|
16
|
+
@client = client
|
17
|
+
end
|
18
|
+
|
19
|
+
# Gets all the schemas via api request.
|
20
|
+
# @return [Enumerable<PersonSchema>] an `Enumerable` with all schemas already wrapped as `PersonSchema` objects.
|
21
|
+
def get_all
|
22
|
+
response = client.get("/person_schemas")
|
23
|
+
Common::WrappedResponse.new(response, person_schema_class)
|
24
|
+
end
|
25
|
+
|
26
|
+
# If a `block` is **not** given it calls [Object#to_enum](https://ruby-doc.org/core-2.6.2/Object.html#method-i-to_enum)
|
27
|
+
# Otherwise it calls `get_all`.
|
28
|
+
# @note
|
29
|
+
# - `:params` doesn't really do anything.
|
30
|
+
# - same as #get_all but with block :)
|
31
|
+
# - `to_a` will call `each` (see this [detailed explanation](https://stackoverflow.com/a/45201663/4352306))
|
32
|
+
# - however, as far as you have an iterator, such as `each`, `to_a` should be last resource (see [this explanation](https://stackoverflow.com/a/44186921/4352306))
|
33
|
+
# @yield [schema] does some stuff with the schema.
|
34
|
+
# @yieldparam schema [PersonSchema]
|
35
|
+
# @yieldreturn [PersonSchema]
|
36
|
+
# @return [Enumerable<PersonSchema>] an `Enumerable` with all the person schema objects.
|
37
|
+
def each(params: {}, &block)
|
38
|
+
return to_enum(:each) unless block
|
39
|
+
get_all.each(&block)
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
require 'ecoportal/api/v1/person_schema'
|
@@ -1,34 +1,34 @@
|
|
1
|
-
module Ecoportal
|
2
|
-
module API
|
3
|
-
class V1
|
4
|
-
class SchemaField < Common::BaseModel
|
5
|
-
passthrough :id, :alt_id, :name, :optional, :shared, :multiple, :type, :options
|
6
|
-
|
7
|
-
def parse_text(value)
|
8
|
-
values = [*value.to_s.lines].map do |line|
|
9
|
-
line = line.chomp
|
10
|
-
next if line == ""
|
11
|
-
case type
|
12
|
-
when "text", "phone_number"
|
13
|
-
line
|
14
|
-
when "number"
|
15
|
-
Float(line) rescue return nil, false
|
16
|
-
when "boolean"
|
17
|
-
%w[true TRUE True Y y YES X x].include?(line)
|
18
|
-
when "select"
|
19
|
-
return nil, false unless options.include?(line)
|
20
|
-
line
|
21
|
-
when "date"
|
22
|
-
Date.parse(line) rescue return nil, false
|
23
|
-
end
|
24
|
-
end.compact
|
25
|
-
if multiple
|
26
|
-
return values, true
|
27
|
-
else
|
28
|
-
return values.first, true
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
class V1
|
4
|
+
class SchemaField < Common::BaseModel
|
5
|
+
passthrough :id, :alt_id, :name, :optional, :shared, :multiple, :type, :options
|
6
|
+
|
7
|
+
def parse_text(value)
|
8
|
+
values = [*value.to_s.lines].map do |line|
|
9
|
+
line = line.chomp
|
10
|
+
next if line == ""
|
11
|
+
case type
|
12
|
+
when "text", "phone_number"
|
13
|
+
line
|
14
|
+
when "number"
|
15
|
+
Float(line) rescue return nil, false
|
16
|
+
when "boolean"
|
17
|
+
%w[true TRUE True Y y YES X x].include?(line)
|
18
|
+
when "select"
|
19
|
+
return nil, false unless options.include?(line)
|
20
|
+
line
|
21
|
+
when "date"
|
22
|
+
Date.parse(line) rescue return nil, false
|
23
|
+
end
|
24
|
+
end.compact
|
25
|
+
if multiple
|
26
|
+
return values, true
|
27
|
+
else
|
28
|
+
return values.first, true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
module Ecoportal
|
2
|
-
module API
|
3
|
-
class V1
|
4
|
-
# @todo Rename to PersonDetailsField
|
5
|
-
class SchemaFieldValue < Common::BaseModel
|
6
|
-
passthrough :id, :alt_id, :type, :name, :shared, :multiple
|
7
|
-
|
8
|
-
def value
|
9
|
-
case type
|
10
|
-
when "text", "phone_number", "number", "boolean", "select"
|
11
|
-
doc["value"]
|
12
|
-
when "date"
|
13
|
-
if doc["value"]
|
14
|
-
maybe_multiple(doc["value"]) do |v|
|
15
|
-
Date.iso8601(v)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
else
|
19
|
-
raise "Unknown type #{type}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def value=(value)
|
24
|
-
case type
|
25
|
-
when "text", "phone_number", "select"
|
26
|
-
doc["value"] = maybe_multiple(value) do |v|
|
27
|
-
v&.to_s
|
28
|
-
end
|
29
|
-
when "number"
|
30
|
-
maybe_multiple(value) do |v|
|
31
|
-
unless v.nil? || v.is_a?(Numeric)
|
32
|
-
raise "Invalid number type #{v.class}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
doc["value"] = value
|
36
|
-
when "boolean"
|
37
|
-
doc["value"] = !!value
|
38
|
-
when "date"
|
39
|
-
maybe_multiple(value) do |v|
|
40
|
-
unless v.nil? || v.respond_to?(:to_date)
|
41
|
-
raise "Invalid date type #{v.class}"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
doc["value"] = maybe_multiple(value) do |v|
|
45
|
-
v&.to_date&.to_s
|
46
|
-
end
|
47
|
-
else
|
48
|
-
raise "Unknown type #{type}"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def maybe_multiple(value)
|
53
|
-
if multiple
|
54
|
-
unless value.is_a?(Array)
|
55
|
-
raise "Expected Array, got #{value.class}"
|
56
|
-
end
|
57
|
-
value.map {|v| yield v }
|
58
|
-
else
|
59
|
-
yield value
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
class V1
|
4
|
+
# @todo Rename to PersonDetailsField
|
5
|
+
class SchemaFieldValue < Common::BaseModel
|
6
|
+
passthrough :id, :alt_id, :type, :name, :shared, :multiple
|
7
|
+
|
8
|
+
def value
|
9
|
+
case type
|
10
|
+
when "text", "phone_number", "number", "boolean", "select"
|
11
|
+
doc["value"]
|
12
|
+
when "date"
|
13
|
+
if doc["value"]
|
14
|
+
maybe_multiple(doc["value"]) do |v|
|
15
|
+
Date.iso8601(v)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
else
|
19
|
+
raise "Unknown type #{type}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def value=(value)
|
24
|
+
case type
|
25
|
+
when "text", "phone_number", "select"
|
26
|
+
doc["value"] = maybe_multiple(value) do |v|
|
27
|
+
v&.to_s
|
28
|
+
end
|
29
|
+
when "number"
|
30
|
+
maybe_multiple(value) do |v|
|
31
|
+
unless v.nil? || v.is_a?(Numeric)
|
32
|
+
raise "Invalid number type #{v.class}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
doc["value"] = value
|
36
|
+
when "boolean"
|
37
|
+
doc["value"] = !!value
|
38
|
+
when "date"
|
39
|
+
maybe_multiple(value) do |v|
|
40
|
+
unless v.nil? || v.respond_to?(:to_date)
|
41
|
+
raise "Invalid date type #{v.class}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
doc["value"] = maybe_multiple(value) do |v|
|
45
|
+
v&.to_date&.to_s
|
46
|
+
end
|
47
|
+
else
|
48
|
+
raise "Unknown type #{type}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def maybe_multiple(value)
|
53
|
+
if multiple
|
54
|
+
unless value.is_a?(Array)
|
55
|
+
raise "Expected Array, got #{value.class}"
|
56
|
+
end
|
57
|
+
value.map {|v| yield v }
|
58
|
+
else
|
59
|
+
yield value
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/ecoportal/api/v1.rb
CHANGED
@@ -1,49 +1,49 @@
|
|
1
|
-
module Ecoportal
|
2
|
-
module API
|
3
|
-
# @attr_reader client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
4
|
-
# @attr_reader logger [Logger] the logger.
|
5
|
-
class V1
|
6
|
-
extend Common::BaseClass
|
7
|
-
include Common::Logging
|
8
|
-
|
9
|
-
VERSION = "v1"
|
10
|
-
class_resolver :people_class, "Ecoportal::API::V1::People"
|
11
|
-
class_resolver :person_schemas_class, "Ecoportal::API::V1::PersonSchemas"
|
12
|
-
|
13
|
-
attr_reader :client, :logger
|
14
|
-
|
15
|
-
# Creates an `V1` object to scope version specific api requests.
|
16
|
-
# @note
|
17
|
-
# - The const `VERSION` determineds the api version that client will query against.
|
18
|
-
# - This means that each sublcass of `V1` should define their own `VERSION` constant.
|
19
|
-
# @param api_key [String] the key version to stablish the api connection.
|
20
|
-
# @param host [String] api server domain.
|
21
|
-
# @param logger [Logger] an object with `Logger` interface to generate logs.
|
22
|
-
# @return [V1] an object with the api version suit.
|
23
|
-
def initialize(api_key, host: "live.ecoportal.com", logger: default_logger)
|
24
|
-
@logger = logger
|
25
|
-
@client = Common::Client.new(
|
26
|
-
api_key: api_key,
|
27
|
-
host: host,
|
28
|
-
version: self.class::VERSION,
|
29
|
-
logger: @logger
|
30
|
-
)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Obtain specific object for people api requests.
|
34
|
-
# @return [People] an instance object ready to make people api requests.
|
35
|
-
def people
|
36
|
-
people_class.new(client)
|
37
|
-
end
|
38
|
-
|
39
|
-
# Obtain specific object for schema api requests.
|
40
|
-
# @return [PersonSchemas] an instance object ready to make schema api requests.
|
41
|
-
def person_schemas
|
42
|
-
person_schemas_class.new(client)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
require 'ecoportal/api/v1/person_schemas'
|
49
|
-
require 'ecoportal/api/v1/people'
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
# @attr_reader client [Common::Client] a `Common::Client` object that holds the configuration of the api connection.
|
4
|
+
# @attr_reader logger [Logger] the logger.
|
5
|
+
class V1
|
6
|
+
extend Common::BaseClass
|
7
|
+
include Common::Logging
|
8
|
+
|
9
|
+
VERSION = "v1"
|
10
|
+
class_resolver :people_class, "Ecoportal::API::V1::People"
|
11
|
+
class_resolver :person_schemas_class, "Ecoportal::API::V1::PersonSchemas"
|
12
|
+
|
13
|
+
attr_reader :client, :logger
|
14
|
+
|
15
|
+
# Creates an `V1` object to scope version specific api requests.
|
16
|
+
# @note
|
17
|
+
# - The const `VERSION` determineds the api version that client will query against.
|
18
|
+
# - This means that each sublcass of `V1` should define their own `VERSION` constant.
|
19
|
+
# @param api_key [String] the key version to stablish the api connection.
|
20
|
+
# @param host [String] api server domain.
|
21
|
+
# @param logger [Logger] an object with `Logger` interface to generate logs.
|
22
|
+
# @return [V1] an object with the api version suit.
|
23
|
+
def initialize(api_key, host: "live.ecoportal.com", logger: default_logger)
|
24
|
+
@logger = logger
|
25
|
+
@client = Common::Client.new(
|
26
|
+
api_key: api_key,
|
27
|
+
host: host,
|
28
|
+
version: self.class::VERSION,
|
29
|
+
logger: @logger
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Obtain specific object for people api requests.
|
34
|
+
# @return [People] an instance object ready to make people api requests.
|
35
|
+
def people
|
36
|
+
people_class.new(client)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Obtain specific object for schema api requests.
|
40
|
+
# @return [PersonSchemas] an instance object ready to make schema api requests.
|
41
|
+
def person_schemas
|
42
|
+
person_schemas_class.new(client)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
require 'ecoportal/api/v1/person_schemas'
|
49
|
+
require 'ecoportal/api/v1/people'
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module Ecoportal
|
2
|
-
module API
|
3
|
-
VERSION = "0.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
VERSION = "0.9.2"
|
4
|
+
end
|
5
|
+
end
|
data/lib/ecoportal/api.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require "cgi"
|
2
|
-
require "logger"
|
3
|
-
require "hash-polyfill"
|
4
|
-
require "ecoportal/api/version"
|
5
|
-
require "dotenv/load"
|
6
|
-
|
7
|
-
module Ecoportal
|
8
|
-
module API
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
require "ecoportal/api/logger"
|
13
|
-
require "ecoportal/api/common"
|
14
|
-
require "ecoportal/api/errors"
|
15
|
-
require "ecoportal/api/v1"
|
16
|
-
require "ecoportal/api/internal"
|
1
|
+
require "cgi"
|
2
|
+
require "logger"
|
3
|
+
require "hash-polyfill"
|
4
|
+
require "ecoportal/api/version"
|
5
|
+
require "dotenv/load"
|
6
|
+
|
7
|
+
module Ecoportal
|
8
|
+
module API
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require "ecoportal/api/logger"
|
13
|
+
require "ecoportal/api/common"
|
14
|
+
require "ecoportal/api/errors"
|
15
|
+
require "ecoportal/api/v1"
|
16
|
+
require "ecoportal/api/internal"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecoportal-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tapio Saarinen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -281,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
281
281
|
- !ruby/object:Gem::Version
|
282
282
|
version: '0'
|
283
283
|
requirements: []
|
284
|
-
rubygems_version: 3.3
|
284
|
+
rubygems_version: 3.0.3
|
285
285
|
signing_key:
|
286
286
|
specification_version: 4
|
287
287
|
summary: A collection of helpers for interacting with the ecoPortal MS's various APIs
|