Class: Eco::API::Common::People::Entries
Overview
Class meant to offer a collection of entries, normally used to get parsed input data.
Defined Under Namespace
Classes: MultipleSearchResults
Constant Summary
Language::Models::Collection::BASIC_METHODS, Language::Models::Collection::EXTENDED_METHODS
Main identifier helpers
collapse
Basic Collection Methods
collapse
Groupping methods
collapse
Instance Method Summary
collapse
#<, #<<, #attr, #attr?, attr_collection, attr_presence, #attrs, attrs_create_method, #contains, #delete!, #empty, #empty?, #group_by, #length, #merge, #new, #newFrom, #present, #present_all?, #present_some?, #remove, #to_c, #unique_attrs, #update
Constructor Details
#initialize(data = [], klass:, factory:) ⇒ Entries
Returns a new instance of Entries.
52
53
54
55
56
|
# File 'lib/eco/api/common/people/entries.rb', line 52
def initialize(data = [], klass:, factory:)
super
@caches_init = false
end
|
Instance Method Details
#[](id_or_ext) ⇒ Object
68
69
70
|
# File 'lib/eco/api/common/people/entries.rb', line 68
def [](id_or_ext)
id(id_or_ext) || external_id(id_or_ext)
end
|
#each(&block) ⇒ Object
Override each to make it work with supervisor hiearchy
139
140
141
142
143
|
# File 'lib/eco/api/common/people/entries.rb', line 139
def each(&block)
return to_enum(:each) unless block
@items.each(&block)
end
|
#email_id_maps ⇒ Object
175
176
177
|
# File 'lib/eco/api/common/people/entries.rb', line 175
def email_id_maps
email_present.group_by(:email).transform_values(&:id)
end
|
#entry(id: nil, external_id: nil, email: nil, strict: false) ⇒ Entry?
Note:
This is how the search function actually works:
- if eP
id is given, returns the entry (if found), otherwise...
- if
external_id is given, returns the entry (if found), otherwise...
- if
strict is false and email is given:
- if there is only 1 entry with that email, returns that entry, otherwise...
- if found but, there are many candidate entries, it raises MultipleSearchResults error
- if entry
external_id matches email, returns that entry
Search function to find an entry based on one of different options
It searches an entry using the parameters given.
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/eco/api/common/people/entries.rb', line 113
def entry(id: nil, external_id: nil, email: nil, strict: false)
init_caches
ext_id = !external_id.to_s.strip.empty? && external_id.strip
email = !email.to_s.strip.empty? && email.downcase.strip
e = nil
e ||= @by_id[id]&.first
e ||= @by_external_id[ext_id]&.first
e ||= entry_by_email(email) unless strict && ext_id
e
end
|
#exclude(object) ⇒ Object
145
146
147
|
# File 'lib/eco/api/common/people/entries.rb', line 145
def exclude(object)
exclude_people(into_a(object))
end
|
#exclude_people(list) ⇒ Object
149
150
151
152
153
154
|
# File 'lib/eco/api/common/people/entries.rb', line 149
def exclude_people(list)
discarded = list.map do |person|
find(person)
end.compact
newFrom to_a - discarded
end
|
#export(filename, parsing_phase: :internal) ⇒ Object
TODO:
could it somehow rather use the people-to-csv case?
Helper to dump the entries into a CSV
160
161
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/eco/api/common/people/entries.rb', line 160
def export(filename, parsing_phase: :internal)
= each_with_object([]) do |entry, hds|
hds.push(*entry.entry(parsing_phase).keys).uniq!
end
CSV.open(filename, 'w') do |csv|
csv <<
each do |entry|
csv << entry.entry(parsing_phase).values_at(*)
end
end
end
|
#external_id(*args) ⇒ Object
64
65
66
|
# File 'lib/eco/api/common/people/entries.rb', line 64
def external_id(*args)
attr('external_id', *args).first
end
|
79
80
81
|
# File 'lib/eco/api/common/people/entries.rb', line 79
def filter_tags_all(tags)
attr('filter_tags', tags, default_modifier.all.insensitive)
end
|
75
76
77
|
# File 'lib/eco/api/common/people/entries.rb', line 75
def filter_tags_any(tags)
attr('filter_tags', tags, default_modifier.any.insensitive)
end
|
#find(object, strict: false) ⇒ Object
Search function to find an entry based on one of different options
see Eco::API::Common::People::Entries#entry
128
129
130
131
132
133
|
# File 'lib/eco/api/common/people/entries.rb', line 128
def find(object, strict: false)
id = attr_value(object, 'id')
external_id = attr_value(object, 'external_id')
email = attr_value(object, 'email')
entry(id: id, external_id: external_id, email: email, strict: strict)
end
|
#group_by_supervisor ⇒ Object
179
180
181
|
# File 'lib/eco/api/common/people/entries.rb', line 179
def group_by_supervisor
to_h(:supervisor_id)
end
|
#id(*args) ⇒ Object
60
61
62
|
# File 'lib/eco/api/common/people/entries.rb', line 60
def id(*args)
attr('id', *args).first
end
|
#policy_group_ids_all(ids) ⇒ Object
87
88
89
|
# File 'lib/eco/api/common/people/entries.rb', line 87
def policy_group_ids_all(ids)
attr('policy_group_ids', ids, default_modifier.all.insensitive)
end
|
#policy_group_ids_any(ids) ⇒ Object
83
84
85
|
# File 'lib/eco/api/common/people/entries.rb', line 83
def policy_group_ids_any(ids)
attr('policy_group_ids', ids, default_modifier.any.insensitive)
end
|
#to_h(attr = 'id') ⇒ Object
183
184
185
|
# File 'lib/eco/api/common/people/entries.rb', line 183
def to_h(attr = 'id')
super(attr || 'id')
end
|