eco-helpers 1.3.13 → 1.3.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b59fa190429f792010af645ab28370ef0132ad17fafca035a363722736ab01e
4
- data.tar.gz: c35a11ee4935356f1a93a008b63b520bd0809ef3a3d12d2b71e5329eb9f721f8
3
+ metadata.gz: 01ec2727fdeee5bc360e417faefdafdb8bf69078cecc17ead881047e8df17cd2
4
+ data.tar.gz: 67e46501f166224248d6d92e6607cddcbce3806dbd05f41e485d0ca2139f1105
5
5
  SHA512:
6
- metadata.gz: e9d7f407038348bfb98bc8c1cf127d73108f3e90b92d3cd267f8c1868a1fad5810226506e4112f7c87d9deb6775af2d7ad94bb27dfd4c6c2ea2885b28f7b6c76
7
- data.tar.gz: 90c6d245f2eb3fbfa1729765cf7629792eadbd33b84c58333aaac6a7e6a81d395fa150c4ff9c240c24403976c25d471d510441b849159aeaf67a593c19258db1
6
+ metadata.gz: cd26851249e2c8557f9da3399f72292cb46a2c12db530f12e3da2a88120dc08a6e0a6ee053527b91685cd60e532d2bbd76e156f1fc803dc6bf2c1246a21fac27
7
+ data.tar.gz: 4f199963c86259bb5a210dca09aa1af2b83c9489308afd200986d6d5c13f32d3479fb2eeaad19c397882359dd3ef16892dc7449860879e2a71fdbf8f73e34943
@@ -1,6 +1,15 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [1.3.14] - 2020-06-10
5
+
6
+ ### Added
7
+ - `Eco::API::Common::People::SupervisorHelpers` now has its methods as class methods
8
+ ### Changed
9
+ - upgraded `ecoportal-api` gem dependency to minimum version `0.5.6`
10
+ ### Fixed
11
+
12
+
4
13
  ## [1.3.13] - 2020-05-29
5
14
 
6
15
  ### Added
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_development_dependency "yard", "~> 0.9", ">= 0.9.18"
29
29
  s.add_development_dependency "redcarpet", "~> 3.5", ">= 3.5.0"
30
30
 
31
- s.add_dependency 'ecoportal-api', '~> 0.5', '>= 0.5.5'
31
+ s.add_dependency 'ecoportal-api', '~> 0.5', '>= 0.5.6'
32
32
  s.add_dependency 'aws-sdk-s3', '~> 1.30', '>= 1.30.1'
33
33
  s.add_dependency 'aws-sdk-ses', '~> 1.14', '>= 1.14.0'
34
34
  s.add_dependency 'dotenv', '~> 2.6', '>= 2.6.0'
@@ -7,134 +7,144 @@ module Eco
7
7
  # * `external_id`
8
8
  # * `id`
9
9
  module SupervisorHelpers
10
+ def self.included(base)
11
+ base.send(:include, ClassMethods)
12
+ end
10
13
 
11
- # Reorders as follows:
12
- # 1. supervisors, people with no supervisor or where their supervisor not present
13
- # 2. subordinates
14
- def sort_by_supervisors(values, supervisors_first: true)
15
- raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
16
- return [] unless values && values.is_a?(Enumerable)
17
- roam = Proc.new do |tree|
18
- [].tap do |out|
19
- sub_outs = tree.empty?? [] : tree.map {|sup, subtree| roam.call(subtree)}
20
- tree.each do |sup, subtree|
21
- sout = subtree.empty?? [] :roam.call(subtree)
22
- supervisors_first ? sout.unshift(sup) : sout.push(sup)
23
- out.concat(sout)
14
+ module ClassMethods
15
+ # Reorders as follows:
16
+ # 1. supervisors, people with no supervisor or where their supervisor not present
17
+ # 2. subordinates
18
+ def sort_by_supervisors(values, supervisors_first: true)
19
+ raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
20
+ return [] unless values && values.is_a?(Enumerable)
21
+ roam = Proc.new do |tree|
22
+ [].tap do |out|
23
+ sub_outs = tree.empty?? [] : tree.map {|sup, subtree| roam.call(subtree)}
24
+ tree.each do |sup, subtree|
25
+ sout = subtree.empty?? [] :roam.call(subtree)
26
+ supervisors_first ? sout.unshift(sup) : sout.push(sup)
27
+ out.concat(sout)
28
+ end
24
29
  end
25
30
  end
26
- end
27
31
 
28
- roam.call(supervisors_tree(values))
29
- end
32
+ roam.call(supervisors_tree(values))
33
+ end
30
34
 
31
- def tree_to_str(tree, lev: 0)
32
- raise "Required Hash tree structure. Given: #{tree.class}" unless tree.is_a?(Hash)
33
- "".tap do |str|
34
- tree.each do |entry, subtree|
35
- str << "#{" " * lev}+-- #{entry.id || entry.external_id}\n"
36
- str << tree_to_str(subtree, lev: lev + 1) unless !subtree || subtree.empty?
35
+ def tree_to_str(tree, lev: 0)
36
+ raise "Required Hash tree structure. Given: #{tree.class}" unless tree.is_a?(Hash)
37
+ "".tap do |str|
38
+ tree.each do |entry, subtree|
39
+ str << "#{" " * lev}+-- #{entry.id || entry.external_id}\n"
40
+ str << tree_to_str(subtree, lev: lev + 1) unless !subtree || subtree.empty?
41
+ end
37
42
  end
38
43
  end
39
- end
40
44
 
41
- def print_tree(tree, lev: 0)
42
- puts tree_to_str(tree)
43
- end
45
+ def print_tree(tree, lev: 0)
46
+ puts tree_to_str(tree)
47
+ end
44
48
 
45
- # Generates a `Hash` tree structure, where:
46
- # * **keys** are nodes
47
- # * **values** are `Hash` subtree structures of `key` subordinates
48
- # @note it is resilient to cyclic supervisors (it will just add the last at the top)
49
- # @param values [Enumerable<Object>] of objects with methods:
50
- # `id`, `external_id` and `supervisor_id`
51
- # @return [Hash] the tree structure
52
- def supervisors_tree(values)
53
- raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
54
- return {} unless values && values.is_a?(Enumerable)
55
- idx = get_super_indexes(values)
56
-
57
- processed = []
58
- subtree = Proc.new do |entry, level, toptree|
59
- if processed.include?(entry)
60
- next {} unless toptree.key?(entry) && level > 0
61
- # needs to be moved as a child
62
- subnodes = toptree.delete(entry)
63
- processed.delete(entry)
64
- end
49
+ # Generates a `Hash` tree structure, where:
50
+ # * **keys** are nodes
51
+ # * **values** are `Hash` subtree structures of `key` subordinates
52
+ # @note it is resilient to cyclic supervisors (it will just add the last at the top)
53
+ # @param values [Enumerable<Object>] of objects with methods:
54
+ # `id`, `external_id` and `supervisor_id`
55
+ # @return [Hash] the tree structure
56
+ def supervisors_tree(values)
57
+ raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
58
+ return {} unless values && values.is_a?(Enumerable)
59
+ idx = get_super_indexes(values)
60
+
61
+ processed = []
62
+ subtree = Proc.new do |entry, level, toptree|
63
+ if processed.include?(entry)
64
+ next {} unless toptree.key?(entry) && level > 0
65
+ # needs to be moved as a child
66
+ subnodes = toptree.delete(entry)
67
+ processed.delete(entry)
68
+ end
65
69
 
66
- subnodes ||= {}.tap do |tree|
67
- subs = idx[:subordinates].call(entry)
68
- processed.push(entry)
69
- next nil unless subs && !subs.empty?
70
- subs.each do |sub|
71
- sub_tree = subtree.call(sub, level + 1, toptree)
72
- tree.merge!(sub_tree)
70
+ subnodes ||= {}.tap do |tree|
71
+ subs = idx[:subordinates].call(entry)
72
+ processed.push(entry)
73
+ next nil unless subs && !subs.empty?
74
+ subs.each do |sub|
75
+ sub_tree = subtree.call(sub, level + 1, toptree)
76
+ tree.merge!(sub_tree)
77
+ end
73
78
  end
74
- end
75
79
 
76
- {entry => subnodes}
77
- end
80
+ {entry => subnodes}
81
+ end
78
82
 
79
- {}.tap do |tree|
80
- idx[:by_sup].keys.each do |sup_id|
81
- if sup = idx[:supers][sup_id]
82
- tree.merge!(subtree.call(sup, 0, tree))
83
- else
84
- idx[:by_sup][sup_id].each do |sub|
85
- tree.merge!(subtree.call(sub, 0, tree))
83
+ {}.tap do |tree|
84
+ idx[:by_sup].keys.each do |sup_id|
85
+ if sup = idx[:supers][sup_id]
86
+ tree.merge!(subtree.call(sup, 0, tree))
87
+ else
88
+ idx[:by_sup][sup_id].each do |sub|
89
+ tree.merge!(subtree.call(sub, 0, tree))
90
+ end
86
91
  end
87
92
  end
88
93
  end
89
94
  end
90
- end
91
95
 
92
- private
93
-
94
- def get_super_indexes(values)
95
- raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
96
- {}.tap do |indexes|
97
- indexes[:by_id] = values.map do |e|
98
- e.id && [e.id, e]
99
- end.compact.to_h
100
- indexes[:by_ext] = values.map do |e|
101
- e.external_id && [e.external_id, e]
102
- end.compact.to_h
103
-
104
- indexes[:by_sup] = {}.tap do |by_s|
105
- values.group_by do |e|
106
- e.supervisor_id
107
- end.tap do |by_sup|
108
- by_s[nil] = by_sup.delete(nil) if by_sup.key?(nil)
109
- by_s.merge!(by_sup)
96
+ private
97
+
98
+ def get_super_indexes(values)
99
+ raise "Expected non hash Enumerable. Given: #{values.class}" if values.is_a?(Hash)
100
+ {}.tap do |indexes|
101
+ indexes[:by_id] = values.map do |e|
102
+ e.id && [e.id, e]
103
+ end.compact.to_h
104
+ indexes[:by_ext] = values.map do |e|
105
+ e.external_id && [e.external_id, e]
106
+ end.compact.to_h
107
+
108
+ indexes[:by_sup] = {}.tap do |by_s|
109
+ values.group_by do |e|
110
+ e.supervisor_id
111
+ end.tap do |by_sup|
112
+ by_s[nil] = by_sup.delete(nil) if by_sup.key?(nil)
113
+ by_s.merge!(by_sup)
114
+ end
110
115
  end
111
- end
112
116
 
113
- indexes[:supers] = {}.tap do |sups|
114
- indexes[:by_ext].select do |ext, e|
115
- ext && indexes[:by_sup].key?(ext)
116
- end.tap {|found| sups.merge!(found)}
117
- indexes[:by_id].select do |id, e|
118
- id && indexes[:by_sup].key?(id)
119
- end.tap {|found| sups.merge!(found)}
120
- end
117
+ indexes[:supers] = {}.tap do |sups|
118
+ indexes[:by_ext].select do |ext, e|
119
+ ext && indexes[:by_sup].key?(ext)
120
+ end.tap {|found| sups.merge!(found)}
121
+ indexes[:by_id].select do |id, e|
122
+ id && indexes[:by_sup].key?(id)
123
+ end.tap {|found| sups.merge!(found)}
124
+ end
121
125
 
122
- indexes[:is_super] = Proc.new do |entry|
123
- !!(indexes[:supers][entry.id] || indexes[:supers][entry.external_id])
124
- end
126
+ indexes[:is_super] = Proc.new do |entry|
127
+ !!(indexes[:supers][entry.id] || indexes[:supers][entry.external_id])
128
+ end
125
129
 
126
- indexes[:subordinates] = Proc.new do |entry|
127
- subs = nil
128
- if sup = indexes[:supers][entry.id] || indexes[:supers][entry.external_id]
129
- subs ||= indexes[:by_sup][sup.id] unless !sup.id
130
- subs ||= indexes[:by_sup][sup.external_id] unless !sup.external_id
130
+ indexes[:subordinates] = Proc.new do |entry|
131
+ subs = nil
132
+ if sup = indexes[:supers][entry.id] || indexes[:supers][entry.external_id]
133
+ subs ||= indexes[:by_sup][sup.id] unless !sup.id
134
+ subs ||= indexes[:by_sup][sup.external_id] unless !sup.external_id
135
+ end
136
+ subs
131
137
  end
132
- subs
133
138
  end
139
+
134
140
  end
135
141
 
136
142
  end
137
143
 
144
+ class << self
145
+ include SupervisorHelpers::ClassMethods
146
+ end
147
+
138
148
  end
139
149
  end
140
150
  end
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "1.3.13"
2
+ VERSION = "1.3.14"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eco-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.13
4
+ version: 1.3.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -107,7 +107,7 @@ dependencies:
107
107
  version: '0.5'
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 0.5.5
110
+ version: 0.5.6
111
111
  type: :runtime
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
@@ -117,7 +117,7 @@ dependencies:
117
117
  version: '0.5'
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 0.5.5
120
+ version: 0.5.6
121
121
  - !ruby/object:Gem::Dependency
122
122
  name: aws-sdk-s3
123
123
  requirement: !ruby/object:Gem::Requirement