metadata_presenter 1.3.2 → 1.7.0
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 +4 -4
- data/README.md +12 -0
- data/app/controllers/metadata_presenter/answers_controller.rb +4 -2
- data/app/controllers/metadata_presenter/change_answer_controller.rb +1 -1
- data/app/controllers/metadata_presenter/engine_controller.rb +12 -7
- data/app/models/metadata_presenter/component.rb +5 -1
- data/app/models/metadata_presenter/condition.rb +13 -0
- data/app/models/metadata_presenter/criteria.rb +25 -0
- data/app/models/metadata_presenter/evaluate_conditions.rb +37 -0
- data/app/models/metadata_presenter/flow.rb +21 -0
- data/app/models/metadata_presenter/next_page.rb +53 -8
- data/app/models/metadata_presenter/page.rb +8 -0
- data/app/models/metadata_presenter/page_answers.rb +2 -0
- data/app/models/metadata_presenter/previous_page.rb +38 -0
- data/app/models/metadata_presenter/service.rb +12 -4
- data/app/models/metadata_presenter/traversed_pages.rb +40 -0
- data/app/operators/metadata_presenter/base_operator.rb +20 -0
- data/app/operators/metadata_presenter/is_answered_operator.rb +7 -0
- data/app/operators/metadata_presenter/is_not_answered_operator.rb +7 -0
- data/app/operators/metadata_presenter/is_not_operator.rb +11 -0
- data/app/operators/metadata_presenter/is_operator.rb +11 -0
- data/app/operators/metadata_presenter/operator.rb +29 -0
- data/config/initializers/inflections.rb +3 -0
- data/fixtures/branching.json +1047 -0
- data/lib/metadata_presenter/version.rb +1 -1
- data/lib/tasks/metadata_presenter_tasks.rake +89 -4
- metadata +30 -2
@@ -1,4 +1,89 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'metadata_presenter/test_helpers'
|
2
|
+
|
3
|
+
namespace :metadata do
|
4
|
+
include MetadataPresenter::TestHelpers
|
5
|
+
|
6
|
+
desc 'Represent the flow objects in human readable form'
|
7
|
+
task flow: :environment do
|
8
|
+
require 'ruby-graphviz'
|
9
|
+
metadata = ENV['SERVICE_METADATA'] || metadata_fixture('branching')
|
10
|
+
service = MetadataPresenter::Service.new(metadata)
|
11
|
+
|
12
|
+
graph = MetadataPresenter::Graph.new(service)
|
13
|
+
|
14
|
+
graph.draw.generate_image
|
15
|
+
puts "Generated file #{graph.filename}"
|
16
|
+
system("open #{graph.filename}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module MetadataPresenter
|
21
|
+
class Graph
|
22
|
+
attr_reader :service, :filename, :nodes
|
23
|
+
|
24
|
+
delegate :metadata, :start_page, :find_page_by_uuid, :service_slug, to: :service
|
25
|
+
|
26
|
+
def initialize(service)
|
27
|
+
@service = service
|
28
|
+
@graphviz = GraphViz.new(:G, type: :digraph)
|
29
|
+
@filename = Rails.root.join('tmp', "#{service_slug}.png")
|
30
|
+
@nodes = {}
|
31
|
+
end
|
32
|
+
|
33
|
+
def draw
|
34
|
+
draw_nodes
|
35
|
+
draw_edges
|
36
|
+
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
def generate_image
|
41
|
+
@graphviz.output(png: filename)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def draw_nodes
|
47
|
+
flow.each do |id, _value|
|
48
|
+
flow_object = service.flow(id)
|
49
|
+
|
50
|
+
if flow_object.branch?
|
51
|
+
full_description = flow_object.conditions.map do |condition|
|
52
|
+
condition.criterias.map do |criteria|
|
53
|
+
criteria.service = service
|
54
|
+
|
55
|
+
"if #{criteria.criteria_component.humanised_title} #{criteria.operator} #{criteria.field_label}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
nodes[id] = @graphviz.add_nodes(full_description.flatten.join(' - '))
|
59
|
+
else
|
60
|
+
current_page = find_page_by_uuid(id)
|
61
|
+
nodes[id] = @graphviz.add_nodes(current_page.url)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def draw_edges
|
67
|
+
flow.each do |id, _value|
|
68
|
+
flow_object = service.flow(id)
|
69
|
+
current_node = nodes[id]
|
70
|
+
node_next = nodes[flow_object.default_next]
|
71
|
+
|
72
|
+
if flow_object.branch?
|
73
|
+
@graphviz.add_edges(current_node, node_next, label: 'Conditions are not met', labelfontsize: 8) if node_next
|
74
|
+
|
75
|
+
flow_object.group_by_page.each do |page_uuid, _conditions|
|
76
|
+
conditions_node = nodes[page_uuid]
|
77
|
+
@graphviz.add_edges(current_node, conditions_node, label: 'Conditions are met', labelfontsize: 8) if conditions_node
|
78
|
+
end
|
79
|
+
elsif node_next
|
80
|
+
@graphviz.add_edges(current_node, node_next)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def flow
|
86
|
+
metadata['flow']
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metadata_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MoJ Online
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06
|
11
|
+
date: 2021-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: govuk_design_system_formbuilder
|
@@ -128,6 +128,20 @@ dependencies:
|
|
128
128
|
- - ">="
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '0'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: ruby-graphviz
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
131
145
|
- !ruby/object:Gem::Dependency
|
132
146
|
name: rspec-rails
|
133
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -263,8 +277,12 @@ files:
|
|
263
277
|
- app/helpers/metadata_presenter/default_text.rb
|
264
278
|
- app/jobs/metadata_presenter/application_job.rb
|
265
279
|
- app/models/metadata_presenter/component.rb
|
280
|
+
- app/models/metadata_presenter/condition.rb
|
281
|
+
- app/models/metadata_presenter/criteria.rb
|
266
282
|
- app/models/metadata_presenter/date_field.rb
|
283
|
+
- app/models/metadata_presenter/evaluate_conditions.rb
|
267
284
|
- app/models/metadata_presenter/file_uploader.rb
|
285
|
+
- app/models/metadata_presenter/flow.rb
|
268
286
|
- app/models/metadata_presenter/item.rb
|
269
287
|
- app/models/metadata_presenter/meta.rb
|
270
288
|
- app/models/metadata_presenter/meta_item.rb
|
@@ -273,8 +291,16 @@ files:
|
|
273
291
|
- app/models/metadata_presenter/offline_upload_adapter.rb
|
274
292
|
- app/models/metadata_presenter/page.rb
|
275
293
|
- app/models/metadata_presenter/page_answers.rb
|
294
|
+
- app/models/metadata_presenter/previous_page.rb
|
276
295
|
- app/models/metadata_presenter/service.rb
|
296
|
+
- app/models/metadata_presenter/traversed_pages.rb
|
277
297
|
- app/models/metadata_presenter/uploaded_file.rb
|
298
|
+
- app/operators/metadata_presenter/base_operator.rb
|
299
|
+
- app/operators/metadata_presenter/is_answered_operator.rb
|
300
|
+
- app/operators/metadata_presenter/is_not_answered_operator.rb
|
301
|
+
- app/operators/metadata_presenter/is_not_operator.rb
|
302
|
+
- app/operators/metadata_presenter/is_operator.rb
|
303
|
+
- app/operators/metadata_presenter/operator.rb
|
278
304
|
- app/presenters/metadata_presenter/page_answers_presenter.rb
|
279
305
|
- app/validators/metadata_presenter/accept_validator.rb
|
280
306
|
- app/validators/metadata_presenter/base_validator.rb
|
@@ -316,6 +342,7 @@ files:
|
|
316
342
|
- app/views/metadata_presenter/page/start.html.erb
|
317
343
|
- config/initializers/default_metadata.rb
|
318
344
|
- config/initializers/default_text.rb
|
345
|
+
- config/initializers/inflections.rb
|
319
346
|
- config/initializers/page_components.rb
|
320
347
|
- config/initializers/schemas.rb
|
321
348
|
- config/routes.rb
|
@@ -348,6 +375,7 @@ files:
|
|
348
375
|
- default_metadata/string/error.required.json
|
349
376
|
- default_metadata/string/error.virus_scan.json
|
350
377
|
- default_text/content.json
|
378
|
+
- fixtures/branching.json
|
351
379
|
- fixtures/invalid_content_page.json
|
352
380
|
- fixtures/no_component_page.json
|
353
381
|
- fixtures/non_finished_service.json
|