eco-helpers 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.rspec +3 -0
- data/README.md +20 -0
- data/eco-helpers.gemspec +34 -0
- data/lib/eco-helpers.rb +15 -0
- data/lib/eco/api.rb +13 -0
- data/lib/eco/api/common.rb +10 -0
- data/lib/eco/api/common/people.rb +17 -0
- data/lib/eco/api/common/people/base_parser.rb +16 -0
- data/lib/eco/api/common/people/default_parsers.rb +40 -0
- data/lib/eco/api/common/people/default_parsers/boolean_parser.rb +28 -0
- data/lib/eco/api/common/people/default_parsers/date_parser.rb +33 -0
- data/lib/eco/api/common/people/default_parsers/multi_parser.rb +33 -0
- data/lib/eco/api/common/people/default_parsers/numeric_parser.rb +23 -0
- data/lib/eco/api/common/people/default_parsers/select_parser.rb +29 -0
- data/lib/eco/api/common/people/entries.rb +120 -0
- data/lib/eco/api/common/people/person_entry.rb +380 -0
- data/lib/eco/api/common/people/person_factory.rb +114 -0
- data/lib/eco/api/common/people/person_modifier.rb +62 -0
- data/lib/eco/api/common/people/person_parser.rb +140 -0
- data/lib/eco/api/common/people/types.rb +47 -0
- data/lib/eco/api/common/session.rb +15 -0
- data/lib/eco/api/common/session/base_session.rb +46 -0
- data/lib/eco/api/common/session/environment.rb +47 -0
- data/lib/eco/api/common/session/file_manager.rb +90 -0
- data/lib/eco/api/common/session/logger.rb +105 -0
- data/lib/eco/api/common/session/mailer.rb +92 -0
- data/lib/eco/api/common/session/s3_uploader.rb +110 -0
- data/lib/eco/api/common/version_patches.rb +11 -0
- data/lib/eco/api/common/version_patches/external_person.rb +11 -0
- data/lib/eco/api/eco_faker.rb +59 -0
- data/lib/eco/api/organization.rb +13 -0
- data/lib/eco/api/organization/account.rb +23 -0
- data/lib/eco/api/organization/people.rb +118 -0
- data/lib/eco/api/organization/policy_groups.rb +51 -0
- data/lib/eco/api/organization/preferences.rb +28 -0
- data/lib/eco/api/organization/preferences_reference.json +23 -0
- data/lib/eco/api/organization/presets.rb +138 -0
- data/lib/eco/api/organization/presets_backup.rb +220 -0
- data/lib/eco/api/organization/presets_values.json +10 -0
- data/lib/eco/api/organization/tag_tree.rb +134 -0
- data/lib/eco/api/organization_old.rb +73 -0
- data/lib/eco/api/session.rb +180 -0
- data/lib/eco/api/session/batch.rb +132 -0
- data/lib/eco/api/session/batch_job.rb +152 -0
- data/lib/eco/api/session/batch_jobs.rb +131 -0
- data/lib/eco/api/session/batch_status.rb +138 -0
- data/lib/eco/api/session/task.rb +92 -0
- data/lib/eco/api/session_config.rb +179 -0
- data/lib/eco/api/session_config/api.rb +47 -0
- data/lib/eco/api/session_config/apis.rb +78 -0
- data/lib/eco/api/session_config/files.rb +30 -0
- data/lib/eco/api/session_config/logger.rb +54 -0
- data/lib/eco/api/session_config/mailer.rb +65 -0
- data/lib/eco/api/session_config/people.rb +89 -0
- data/lib/eco/api/session_config/s3_bucket.rb +62 -0
- data/lib/eco/api/session_config/use_cases.rb +30 -0
- data/lib/eco/api/usecases.rb +12 -0
- data/lib/eco/api/usecases/base_case.rb +14 -0
- data/lib/eco/api/usecases/case_data.rb +13 -0
- data/lib/eco/api/usecases/default_cases.rb +53 -0
- data/lib/eco/api/usecases/default_cases/change_email_case.rb +47 -0
- data/lib/eco/api/usecases/default_cases/create_details_case.rb +29 -0
- data/lib/eco/api/usecases/default_cases/create_details_with_supervisor_case.rb +49 -0
- data/lib/eco/api/usecases/default_cases/delete_case.rb +20 -0
- data/lib/eco/api/usecases/default_cases/email_as_id_case.rb +24 -0
- data/lib/eco/api/usecases/default_cases/hris_case.rb +67 -0
- data/lib/eco/api/usecases/default_cases/new_email_case.rb +26 -0
- data/lib/eco/api/usecases/default_cases/new_id_case.rb +26 -0
- data/lib/eco/api/usecases/default_cases/refresh_presets.rb +25 -0
- data/lib/eco/api/usecases/default_cases/reinvite_case.rb +22 -0
- data/lib/eco/api/usecases/default_cases/remove_account_case.rb +36 -0
- data/lib/eco/api/usecases/default_cases/reset_landing_page_case.rb +24 -0
- data/lib/eco/api/usecases/default_cases/set_default_tag_case.rb +44 -0
- data/lib/eco/api/usecases/default_cases/set_supervisor_case.rb +39 -0
- data/lib/eco/api/usecases/default_cases/to_csv_case.rb +36 -0
- data/lib/eco/api/usecases/default_cases/update_details_case.rb +30 -0
- data/lib/eco/api/usecases/default_cases/upsert_account_case.rb +35 -0
- data/lib/eco/api/usecases/use_case.rb +177 -0
- data/lib/eco/api/usecases/use_group.rb +104 -0
- data/lib/eco/cli.rb +9 -0
- data/lib/eco/cli/input.rb +109 -0
- data/lib/eco/cli/input_multi.rb +137 -0
- data/lib/eco/cli/root.rb +8 -0
- data/lib/eco/cli/session.rb +9 -0
- data/lib/eco/cli/session/batch.rb +9 -0
- data/lib/eco/common.rb +7 -0
- data/lib/eco/common/base_cli.rb +116 -0
- data/lib/eco/common/language.rb +9 -0
- data/lib/eco/data.rb +9 -0
- data/lib/eco/data/crypto.rb +7 -0
- data/lib/eco/data/crypto/encryption.rb +318 -0
- data/lib/eco/data/files.rb +10 -0
- data/lib/eco/data/files/directory.rb +93 -0
- data/lib/eco/data/files/file_pattern.rb +32 -0
- data/lib/eco/data/files/helpers.rb +90 -0
- data/lib/eco/data/mapper.rb +54 -0
- data/lib/eco/data/random.rb +10 -0
- data/lib/eco/data/random/distribution.rb +133 -0
- data/lib/eco/data/random/fake.rb +320 -0
- data/lib/eco/data/random/values.rb +80 -0
- data/lib/eco/language.rb +12 -0
- data/lib/eco/language/curry.rb +28 -0
- data/lib/eco/language/hash_transform.rb +68 -0
- data/lib/eco/language/hash_transform_modifier.rb +114 -0
- data/lib/eco/language/match.rb +30 -0
- data/lib/eco/language/match_modifier.rb +190 -0
- data/lib/eco/language/models.rb +11 -0
- data/lib/eco/language/models/attribute_parser.rb +38 -0
- data/lib/eco/language/models/collection.rb +181 -0
- data/lib/eco/language/models/modifier.rb +68 -0
- data/lib/eco/language/models/wrap.rb +114 -0
- data/lib/eco/language/values_at.rb +159 -0
- data/lib/eco/lexic/dictionary.rb +33 -0
- data/lib/eco/lexic/dictionary/dictionary.txt +355484 -0
- data/lib/eco/lexic/dictionary/tags.json +38 -0
- data/lib/eco/scripting.rb +30 -0
- data/lib/eco/scripting/README.md +11 -0
- data/lib/eco/scripting/arguments.rb +40 -0
- data/lib/eco/tester.rb +97 -0
- data/lib/eco/version.rb +3 -0
- metadata +325 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bb418abf2d0a0a3bcf9d4f95c9696b9d6347f006
|
4
|
+
data.tar.gz: 978e4c69e536b192722df51e8eb361d835a708ae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 72efbdbf8703f5be28ef9fb223c3886d83ed8a3d72d5ff58efe7bb59ce6cc5f82916cef8cdac685c01c7f1d70d70a6cf43fe7ddc35bfffe3754b98ded18e976e
|
7
|
+
data.tar.gz: b40e206e5e3d633e8dec159342e1df20b2424e378e4418cdd4820c675335d34f94925a3865ff12c2c10f1b0836178f6adab4cbd036e931a2eb6ffd5e9f082e25
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/.rspec
ADDED
data/README.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Script API Helpers (script_api_helpers)
|
2
|
+
|
3
|
+
Some helpers to simplify things:
|
4
|
+
|
5
|
+
* managing **files**: keep your updates with a timestamp, find the last version, encrypt/decrypt the data, shortcuts to avoid messing around with language specificities,...
|
6
|
+
generate fake data: different topics, use different distributions,...
|
7
|
+
* API:
|
8
|
+
* custom multiple *presets* profiles,
|
9
|
+
* get the highest of each flag among different custom presets
|
10
|
+
|
11
|
+
To do:
|
12
|
+
|
13
|
+
* more **fake data** features: link api details field, randomize your policy groups or apply a fixed distribution based on location
|
14
|
+
* API:
|
15
|
+
* **map** different **account properties**, such as policy groups to presets or preferences
|
16
|
+
* use an assistant to map **CSV** columns to the correct account or details properties
|
17
|
+
* use batch helpers that store and manage your update files and provide log errors, or use them as an example
|
18
|
+
* validate tagtree tags
|
19
|
+
* create configuration files for orgs you manage the **HRIS** (a weekly feed will become a one time execution script)
|
20
|
+
* create **unit tests** to check if the API behaviour meets the specifications and launch them periodically
|
data/eco-helpers.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require "./lib/eco/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "eco-helpers"
|
8
|
+
s.version = Eco::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Oscar Segura"]
|
11
|
+
s.email = ["oscar@ecoportal.co.nz"]
|
12
|
+
s.date = %q{2018-09-05}
|
13
|
+
s.summary = %q{eco-helpers to manage people api cases}
|
14
|
+
s.homepage = "https://www.ecoportal.com"
|
15
|
+
s.licenses = %w[MIT]
|
16
|
+
|
17
|
+
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
|
21
|
+
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
+
#s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
|
25
|
+
s.add_development_dependency "rspec", "~> 3", ">= 3.8"
|
26
|
+
|
27
|
+
s.add_dependency 'ecoportal-api', '~> 0.3', '>= 0.3.6'
|
28
|
+
s.add_dependency 'faker', '~> 1', '>= 1.9'
|
29
|
+
s.add_dependency 'distribution', '~> 0.7', '>= 0.7.3'
|
30
|
+
s.add_dependency 'thor', '~> 0', '>= 0.20'
|
31
|
+
s.add_dependency 'aws-sdk-s3', '~> 1.30', '>= 1.30.1'
|
32
|
+
s.add_dependency 'aws-sdk-ses', '~> 1.14', '>= 1.14.0'
|
33
|
+
s.add_dependency 'dotenv', '~> 2.6', '>= 2.6.0'
|
34
|
+
end
|
data/lib/eco-helpers.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'csv'
|
2
|
+
require 'json' # native
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
|
6
|
+
module Eco
|
7
|
+
end
|
8
|
+
|
9
|
+
require_relative 'eco/language'
|
10
|
+
require_relative 'eco/common'
|
11
|
+
require_relative 'eco/scripting'
|
12
|
+
require_relative 'eco/data'
|
13
|
+
require_relative 'eco/api'
|
14
|
+
require_relative 'eco/tester'
|
15
|
+
require_relative 'eco/cli'
|
data/lib/eco/api.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'ecoportal/api'
|
2
|
+
|
3
|
+
module Eco
|
4
|
+
module API
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
require_relative 'api/common'
|
9
|
+
require_relative 'api/organization'
|
10
|
+
require_relative 'api/session'
|
11
|
+
require_relative 'api/usecases'
|
12
|
+
require_relative 'api/session_config'
|
13
|
+
require_relative 'api/eco_faker'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
require_relative 'people/types'
|
11
|
+
require_relative 'people/person_modifier'
|
12
|
+
require_relative 'people/person_factory'
|
13
|
+
require_relative 'people/base_parser'
|
14
|
+
require_relative 'people/person_parser'
|
15
|
+
require_relative 'people/default_parsers'
|
16
|
+
require_relative 'people/person_entry'
|
17
|
+
require_relative 'people/entries'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class DefaultParsers < PersonParser
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
super(*args)
|
9
|
+
define_defaults
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def define_defaults
|
15
|
+
# Select Options
|
16
|
+
select_hashes = @schema.fields.map do |fld|
|
17
|
+
if fld.type == "select"
|
18
|
+
options_hash = fld.options.map { |v| [v.downcase.strip, v] }.to_h
|
19
|
+
[fld.alt_id, options_hash]
|
20
|
+
end
|
21
|
+
end.compact.to_h
|
22
|
+
|
23
|
+
SelectParser.new(self, select_hashes: select_hashes).process
|
24
|
+
BooleanParser.new(self).process
|
25
|
+
NumericParser.new(self, schema: @schema).process
|
26
|
+
DateParser.new(self).process
|
27
|
+
MultiParser.new(self).process
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
require_relative 'default_parsers/select_parser'
|
37
|
+
require_relative 'default_parsers/boolean_parser'
|
38
|
+
require_relative 'default_parsers/numeric_parser'
|
39
|
+
require_relative 'default_parsers/date_parser'
|
40
|
+
require_relative 'default_parsers/multi_parser'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class DefaultParsers
|
6
|
+
class BooleanParser < People::BaseParser
|
7
|
+
|
8
|
+
def process
|
9
|
+
@parsers.define_attribute(:boolean) do |parser|
|
10
|
+
parser.def_parser do |value|
|
11
|
+
value.is_a?(Array) ? value.map { |v| truthy(v) } : truthy(value)
|
12
|
+
end.def_serializer do |value|
|
13
|
+
value.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def truthy (value)
|
21
|
+
%w[true y yes x].include?(value.to_s&.downcase)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class DefaultParsers
|
6
|
+
class DateParser < People::BaseParser
|
7
|
+
|
8
|
+
def process
|
9
|
+
@parsers.define_attribute(:date) do |parser|
|
10
|
+
parser.def_parser do |value|
|
11
|
+
value.is_a?(Array) ? value.map { |v| parse_date(v) } : parse_date(value)
|
12
|
+
end.def_serializer do |value|
|
13
|
+
value.is_a?(Array) ? value.map { |d| d && d.strftime('%Y-%m-%d') } : value && value.strftime('%Y-%m-%d')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_date(value)
|
21
|
+
begin
|
22
|
+
(value.to_s.empty?) ? nil : Time.parse(value)
|
23
|
+
rescue
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class DefaultParsers
|
6
|
+
class MultiParser < People::BaseParser
|
7
|
+
|
8
|
+
def process
|
9
|
+
@parsers.define_attribute(:multiple) do |parser|
|
10
|
+
parser.def_parser do |value|
|
11
|
+
return value if value.is_a?(Array)
|
12
|
+
value = value.split("|") if value&.include?("|")
|
13
|
+
into_a(value)
|
14
|
+
end.def_serializer do |value|
|
15
|
+
into_a(value).join("|")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def into_a(value)
|
23
|
+
value = [] if value == nil
|
24
|
+
value = [].push(value) unless value.is_a?(Array)
|
25
|
+
value
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class DefaultParsers
|
6
|
+
class NumericParser < People::BaseParser
|
7
|
+
|
8
|
+
def process
|
9
|
+
@parsers.define_attribute(:number, dependencies: @options) do |parser|
|
10
|
+
parser.def_parser do |value, deps|
|
11
|
+
deps[:schema]&.fields[deps["attr"]].parse_text(value)
|
12
|
+
end.def_serializer do |value|
|
13
|
+
value.is_a?(Array) ? value.map { |v| v.to_s } : value.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class DefaultParsers
|
6
|
+
class SelectParser < People::BaseParser
|
7
|
+
|
8
|
+
def process
|
9
|
+
@parsers.define_attribute(:select, dependencies: @options) do |parser|
|
10
|
+
parser.def_parser do |value, deps|
|
11
|
+
options_hash = deps[:select_hashes][deps["attr"]]
|
12
|
+
next value if !options_hash
|
13
|
+
if value.is_a?(Array)
|
14
|
+
value.map { |v| options_hash[v&.downcase.strip] || v }
|
15
|
+
elsif value
|
16
|
+
options_hash[value&.downcase.strip] || value
|
17
|
+
end
|
18
|
+
end.def_serializer do |value|
|
19
|
+
value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
module People
|
5
|
+
class EntryFactory
|
6
|
+
|
7
|
+
attr_reader :person_parser
|
8
|
+
|
9
|
+
def initialize(schema:, person_parser: nil, fields_mapper: nil, logger: ::Logger.new(IO::NULL))
|
10
|
+
raise "Constructor needs a PersonSchema. Given: #{schema}" if !schema.is_a?(Ecoportal::API::V1::PersonSchema)
|
11
|
+
raise "Expecting PersonParser. Given: #{person_parser}" if person_parser && !person_parser.is_a?(Eco::API::Common::People::PersonParser)
|
12
|
+
raise "Expecting Mapper object. Given: #{fields_mapper}" if fields_mapper && !fields_mapper.is_a?(Eco::Data::Mapper)
|
13
|
+
|
14
|
+
@logger = logger
|
15
|
+
@schema = Ecoportal::API::V1::PersonSchema.new(JSON.parse(schema.doc.to_json))
|
16
|
+
|
17
|
+
default_parser = Eco::API::Common::People::DefaultParsers.new(schema: @schema)
|
18
|
+
@parser = default_parser.merge(person_parser)
|
19
|
+
|
20
|
+
@fields_mapper = fields_mapper
|
21
|
+
end
|
22
|
+
|
23
|
+
def new(data, dependencies: {})
|
24
|
+
PersonEntry.new(data, parser: @parser, mapper: @fields_mapper, dependencies: dependencies, logger: @logger)
|
25
|
+
end
|
26
|
+
|
27
|
+
def entries(data)
|
28
|
+
Entries.new(data, klass: PersonEntry, factory: self)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Entries < Eco::Language::Models::Collection
|
33
|
+
|
34
|
+
# build the shortcuts of Collection
|
35
|
+
attr_collection :id, :external_id, :email, :name, :supervisor_id
|
36
|
+
|
37
|
+
alias_method :entries, :to_a
|
38
|
+
|
39
|
+
include Common::People
|
40
|
+
|
41
|
+
def initialize(data = [], klass:, factory:)
|
42
|
+
super(data, klass: klass, factory: factory)
|
43
|
+
@caches_init = false
|
44
|
+
end
|
45
|
+
|
46
|
+
def [](id_or_ext)
|
47
|
+
self.id(id_or_ext) || self.external_id(id_or_ext)
|
48
|
+
end
|
49
|
+
#def []=(id, value)
|
50
|
+
# if self.id?(id)
|
51
|
+
#end
|
52
|
+
|
53
|
+
def id(*args)
|
54
|
+
attr('id', *args).first
|
55
|
+
end
|
56
|
+
|
57
|
+
def external_id(*args)
|
58
|
+
attr('external_id', *args).first
|
59
|
+
end
|
60
|
+
|
61
|
+
def entry(id: nil, external_id: nil, email: nil)
|
62
|
+
init_caches
|
63
|
+
pers = @by_id[id]&.first if id
|
64
|
+
pers = @by_external_id[external_id&.strip]&.first if !pers && !external_id.to_s.strip.empty?
|
65
|
+
pers = @by_email[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
|
66
|
+
pers = @by_external_id[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
|
67
|
+
pers
|
68
|
+
end
|
69
|
+
|
70
|
+
def find(object)
|
71
|
+
id = object.respond_to?("id")? object.send("id") : nil
|
72
|
+
external_id = object.respond_to?("external_id")? object.send("external_id") : nil
|
73
|
+
email = object.respond_to?("email")? object.send("email") : nil
|
74
|
+
entry(id: id, external_id: external_id, email: email)
|
75
|
+
end
|
76
|
+
|
77
|
+
def exclude(object)
|
78
|
+
exclude_people(into_a(object))
|
79
|
+
end
|
80
|
+
|
81
|
+
def exclude_people(list)
|
82
|
+
discarded = list.map do |person|
|
83
|
+
find(person)
|
84
|
+
end.compact
|
85
|
+
newFrom self.to_a - discarded
|
86
|
+
end
|
87
|
+
|
88
|
+
def email_id_maps
|
89
|
+
self.email_present.group_by(:email).transform_values { |person| person.id }
|
90
|
+
end
|
91
|
+
|
92
|
+
def group_by_supervisor
|
93
|
+
self.to_h(:supervisor_id)
|
94
|
+
end
|
95
|
+
|
96
|
+
def to_h(attr)
|
97
|
+
super(attr || "id")
|
98
|
+
end
|
99
|
+
|
100
|
+
protected
|
101
|
+
|
102
|
+
def on_change
|
103
|
+
@caches_init = false
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def init_caches
|
109
|
+
return if @caches_init
|
110
|
+
@by_id = self.to_h('id')
|
111
|
+
@by_external_id = self.to_h('external_id')
|
112
|
+
@by_email = self.to_h('email')
|
113
|
+
@caches_init = true
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|