eco-helpers 1.3.13 → 1.3.14

Sign up to get free protection for your applications and to get access to all the features.
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