parliament-utils 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/parliament/utils/helpers/business_item_grouping_helper.rb +35 -0
- data/lib/parliament/utils/helpers/grouping_helper.rb +49 -0
- data/lib/parliament/utils/helpers/role_grouping_helper.rb +65 -0
- data/lib/parliament/utils/helpers.rb +3 -0
- data/lib/parliament/utils/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57e8942631d85dd3ef9e374d3c69ef92162358ce
|
4
|
+
data.tar.gz: 3eebabcc83b7826f713b1d32a1cf765a29b8c25f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec0fe535a22f52654d41d86518ad7f09fccfaf90cb0c0f37031372faf2c9c1921cc5189e87f22df9d3f8b3dae1237ed410235ce41b8c65032e113ff4d0eb1856
|
7
|
+
data.tar.gz: bae9c631bc25f9088b1f7f83e5857129b3df8f82c7a02d2e9f1fbed19adb6a20031875f403874eb28066a02140038c77831b6287d3d30fd265561986fa8c5eb9
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Parliament
|
2
|
+
module Utils
|
3
|
+
module Helpers
|
4
|
+
class BusinessItemGroupingHelper
|
5
|
+
extend Parliament::Utils::Helpers::GroupingHelper
|
6
|
+
# Finds Grom::Nodes that can be grouped and builds BusinessItemGroupingHelper::BusinessItemGroupedObject objects
|
7
|
+
#
|
8
|
+
# @return date [DateTime] Date of all Grom::Nodes
|
9
|
+
# @return nodes [Array] Array of Grom::Nodes
|
10
|
+
# @return type [String] Type of all grouped Grom::Nodes
|
11
|
+
class BusinessItemGroupedObject
|
12
|
+
attr_accessor :date, :nodes, :type
|
13
|
+
end
|
14
|
+
|
15
|
+
# Creates new BusinessItemGroupingHelper::BusinessItemGroupedObject, for each set of Grom::Nodes that have been grouped (nodes) and unknown
|
16
|
+
# Each instance of BusinessItemGroupingHelper::BusinessItemGroupedObject is assigned properties of laying_date, nodes and type
|
17
|
+
#
|
18
|
+
# @param data_hash [Hash] Keys identify grouping, with each value being an array of grouped, ungrouped and unknown Grom::Nodes
|
19
|
+
# @param key [String] Key identifies grouping of Grom::Nodes
|
20
|
+
# @return [Array] with instances of GroupingHelper::GroupedObject
|
21
|
+
def self.create_grouped_objects(data_hash, key)
|
22
|
+
grouped = []
|
23
|
+
|
24
|
+
grouped_object = BusinessItemGroupingHelper::BusinessItemGroupedObject.new
|
25
|
+
grouped_object.nodes = data_hash[key].sort_by(&:shortest_distance_of_procedure_steps)
|
26
|
+
|
27
|
+
# Set properties of the object
|
28
|
+
grouped_object.type = grouped_object.nodes.first.type
|
29
|
+
grouped_object.date = grouped_object.nodes.first.date
|
30
|
+
grouped << grouped_object
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Parliament
|
2
|
+
module Utils
|
3
|
+
module Helpers
|
4
|
+
module GroupingHelper
|
5
|
+
# Groups objects by category where possible
|
6
|
+
#
|
7
|
+
# @param data [Array] Array of Grom::Nodes to be grouped
|
8
|
+
# @param grouping_methods [Symbol] One or more methods that should be called on Grom::Node to find suitable nodes for grouping
|
9
|
+
# @return [Array] Single array of grouped, ungrouped and unknown objects
|
10
|
+
def group(data, *grouping_methods)
|
11
|
+
grouped_data = group_data(data, grouping_methods)
|
12
|
+
create_sorted_array(grouped_data)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Where grouping methods can be called (e.g. #category and #id), this method groups by the result of calling each of those methods in succession on each Grom::Node
|
16
|
+
# If a grouping cannot be found, adds 'UNKNOWN' as key of the hash
|
17
|
+
#
|
18
|
+
# @param data [Array] Array of Grom::Nodes to be grouped
|
19
|
+
# @param grouping_methods [Array] One or more methods that should be called on Grom::Node to find suitable nodes for grouping
|
20
|
+
# @return [Hash] Keys identify grouping (grouped by category.property), with each value being an array of grouped, ungrouped and unknown Grom::Nodes
|
21
|
+
#
|
22
|
+
# e.g. { 12345678 => [...], 23456789 => [...], "UNKNOWN" => [...] }
|
23
|
+
def group_data(data, grouping_methods)
|
24
|
+
data.group_by do |data_point|
|
25
|
+
grouping_methods.inject(data_point) { |point, method| point.try(method) } || 'UNKNOWN'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Places unknown and ungrouped Grom::Nodes into sorted_array without calling any further methods on them
|
30
|
+
# For Grom::Nodes that need to be grouped, calls create_grouped_objects method and places result into sorted_array
|
31
|
+
#
|
32
|
+
# @param data_hash [Hash] Keys identify grouping, with each value being an array of grouped, ungrouped and unknown Grom::Nodes
|
33
|
+
# @return [Array] Array of unknown and ungrouped Grom::Nodes, and sorted and grouped instances of GroupingHelper::GroupedObject
|
34
|
+
def create_sorted_array(data_hash)
|
35
|
+
sorted_array = []
|
36
|
+
data_hash.each do |key, value|
|
37
|
+
# Identify Grom::Nodes that don't need to be grouped (either UNKNOWN or singular values)
|
38
|
+
sorted_array << if key == 'UNKNOWN' || value.length == 1
|
39
|
+
value
|
40
|
+
else
|
41
|
+
create_grouped_objects(data_hash, key)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
sorted_array.flatten
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Parliament
|
2
|
+
module Utils
|
3
|
+
module Helpers
|
4
|
+
class RoleGroupingHelper
|
5
|
+
extend Parliament::Utils::Helpers::GroupingHelper
|
6
|
+
# Finds Grom::Nodes that can be grouped and builds GroupingHelper::GroupedObject objects
|
7
|
+
#
|
8
|
+
# @return start_date [DateTime] Earliest start date
|
9
|
+
# @return end_date [DateTime] Latest end date
|
10
|
+
# @return nodes [Array] Array of Grom::Nodes
|
11
|
+
# @return type [String] Type of all grouped Grom::Nodes
|
12
|
+
class RoleGroupedObject
|
13
|
+
attr_accessor :start_date, :end_date, :nodes, :type
|
14
|
+
end
|
15
|
+
|
16
|
+
# Creates new GroupingHelper::GroupedObject, for each set of Grom::Nodes that have been grouped (nodes)
|
17
|
+
# Each instance of GroupingHelper::GroupedObject is assigned properties of start_date, end_date, nodes and type
|
18
|
+
# Once object has been created, calls sort_grouped_nodes_by_date method to sort that object's nodes by date
|
19
|
+
#
|
20
|
+
# @param data_hash [Hash] Keys identify grouping, with each value being an array of grouped, ungrouped and unknown Grom::Nodes
|
21
|
+
# @param key [String] Key identifies grouping of Grom::Nodes
|
22
|
+
# @return [Array] with instances of GroupingHelper::GroupedObject
|
23
|
+
def self.create_grouped_objects(data_hash, key)
|
24
|
+
grouped = []
|
25
|
+
|
26
|
+
grouped_object = RoleGroupingHelper::RoleGroupedObject.new
|
27
|
+
grouped_object.nodes = data_hash[key]
|
28
|
+
|
29
|
+
start_date = nil
|
30
|
+
end_date = nil
|
31
|
+
current_nodes = []
|
32
|
+
|
33
|
+
grouped_object.nodes.each do |node|
|
34
|
+
# Find nodes that represents current roles
|
35
|
+
current_nodes << node if node.try(:end_date).nil? || node.end_date.nil?
|
36
|
+
# Find earliest start date and latest end date
|
37
|
+
start_date = node.start_date if start_date.nil? || node.start_date < start_date
|
38
|
+
end_date = node.end_date if current_nodes.empty? && (end_date.nil? || node.end_date > end_date)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Set properties of the object
|
42
|
+
# TODO: Might need to adjust to allow for multiple roles roles and memberships of a committee
|
43
|
+
grouped_object.type = grouped_object.nodes.first.type
|
44
|
+
grouped_object.start_date = start_date
|
45
|
+
grouped_object.end_date = current_nodes.empty? ? end_date : nil
|
46
|
+
|
47
|
+
# Add sorted object to the array
|
48
|
+
sort_grouped_nodes_by_date(grouped_object, current_nodes)
|
49
|
+
grouped << grouped_object
|
50
|
+
end
|
51
|
+
|
52
|
+
# Sorts an array of grouped Grom::Nodes by end date, placing the most current Grom::Node at the start of the array
|
53
|
+
#
|
54
|
+
# @param grouped_object [Instance object] Instance of GroupingHelper::GroupedObject
|
55
|
+
# @param current_node [Grom::Node] Grom::Node with no end date (representing current)
|
56
|
+
# @return [Instance object] Returns the same instance, with nodes sorted by end date
|
57
|
+
def self.sort_grouped_nodes_by_date(grouped_object, current_nodes)
|
58
|
+
grouped_object.nodes -= current_nodes unless current_nodes.empty?
|
59
|
+
grouped_object.nodes.sort_by!(&:end_date).reverse!
|
60
|
+
grouped_object.nodes.unshift(current_nodes).flatten! unless current_nodes.empty?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -7,6 +7,9 @@ require_relative './helpers/parliament_helper'
|
|
7
7
|
require_relative './helpers/postcode_helper'
|
8
8
|
require_relative './helpers/request_helper'
|
9
9
|
require_relative './helpers/v_card_helper'
|
10
|
+
require_relative './helpers/grouping_helper'
|
11
|
+
require_relative './helpers/role_grouping_helper'
|
12
|
+
require_relative './helpers/business_item_grouping_helper'
|
10
13
|
|
11
14
|
require 'parliament/grom/decorator'
|
12
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parliament-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rebecca Appleyard
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parliament-ruby
|
@@ -331,13 +331,16 @@ files:
|
|
331
331
|
- lib/parliament/utils/config/initializers/wrap_parameters.rb
|
332
332
|
- lib/parliament/utils/helpers.rb
|
333
333
|
- lib/parliament/utils/helpers/application_helper.rb
|
334
|
+
- lib/parliament/utils/helpers/business_item_grouping_helper.rb
|
334
335
|
- lib/parliament/utils/helpers/filter_helper.rb
|
335
336
|
- lib/parliament/utils/helpers/flag_helper.rb
|
337
|
+
- lib/parliament/utils/helpers/grouping_helper.rb
|
336
338
|
- lib/parliament/utils/helpers/houses_helper.rb
|
337
339
|
- lib/parliament/utils/helpers/markdown_helper.rb
|
338
340
|
- lib/parliament/utils/helpers/parliament_helper.rb
|
339
341
|
- lib/parliament/utils/helpers/postcode_helper.rb
|
340
342
|
- lib/parliament/utils/helpers/request_helper.rb
|
343
|
+
- lib/parliament/utils/helpers/role_grouping_helper.rb
|
341
344
|
- lib/parliament/utils/helpers/translation_helper.rb
|
342
345
|
- lib/parliament/utils/helpers/v_card_helper.rb
|
343
346
|
- lib/parliament/utils/railtie.rb
|