flutter 0.1.0.pre.2 → 0.2.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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -5
  3. data/Gemfile +1 -0
  4. data/README.md +62 -2
  5. data/Rakefile +35 -1
  6. data/codecov.yml +13 -0
  7. data/lib/flutter/minitest.rb +6 -8
  8. data/lib/flutter/parser.rb +18 -16
  9. data/lib/flutter/persistence.rb +51 -5
  10. data/lib/flutter/rspec.rb +7 -7
  11. data/lib/flutter/tracker.rb +48 -5
  12. data/lib/flutter/version.rb +1 -1
  13. metadata +21 -95
  14. data/integration_tests/minitest/grape_app/.gitignore +0 -67
  15. data/integration_tests/minitest/grape_app/.ruby-version +0 -1
  16. data/integration_tests/minitest/grape_app/Gemfile +0 -17
  17. data/integration_tests/minitest/grape_app/Gemfile.lock +0 -89
  18. data/integration_tests/minitest/grape_app/README.md +0 -2
  19. data/integration_tests/minitest/grape_app/Rakefile +0 -9
  20. data/integration_tests/minitest/grape_app/api/api.rb +0 -34
  21. data/integration_tests/minitest/grape_app/api/routes/api_helpers.rb +0 -12
  22. data/integration_tests/minitest/grape_app/api/routes/change_request/api.rb +0 -69
  23. data/integration_tests/minitest/grape_app/api/routes/change_request/response_entity.rb +0 -18
  24. data/integration_tests/minitest/grape_app/api/routes/event/api.rb +0 -121
  25. data/integration_tests/minitest/grape_app/api/routes/event/response_entity.rb +0 -41
  26. data/integration_tests/minitest/grape_app/api/routes/project/api.rb +0 -59
  27. data/integration_tests/minitest/grape_app/api/routes/project/response_entity.rb +0 -13
  28. data/integration_tests/minitest/grape_app/api/routes/property/api.rb +0 -78
  29. data/integration_tests/minitest/grape_app/api/routes/property/response_entity.rb +0 -31
  30. data/integration_tests/minitest/grape_app/api/routes/trackable_object/api.rb +0 -64
  31. data/integration_tests/minitest/grape_app/api/routes/trackable_object/response_entity.rb +0 -24
  32. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/api.rb +0 -88
  33. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/response_entity.rb +0 -17
  34. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/spec_response.rb +0 -19
  35. data/integration_tests/minitest/grape_app/api/routes/user/api.rb +0 -22
  36. data/integration_tests/minitest/grape_app/api/routes/user/response_entity.rb +0 -12
  37. data/integration_tests/minitest/grape_app/app/app.rb +0 -30
  38. data/integration_tests/minitest/grape_app/app/change_request/endpoint.rb +0 -24
  39. data/integration_tests/minitest/grape_app/app/change_request/generate_system_changes.rb +0 -25
  40. data/integration_tests/minitest/grape_app/app/change_request/service.rb +0 -79
  41. data/integration_tests/minitest/grape_app/app/event/endpoint.rb +0 -78
  42. data/integration_tests/minitest/grape_app/app/event/service.rb +0 -68
  43. data/integration_tests/minitest/grape_app/app/event/validator.rb +0 -108
  44. data/integration_tests/minitest/grape_app/app/project/endpoint.rb +0 -24
  45. data/integration_tests/minitest/grape_app/app/project/service.rb +0 -42
  46. data/integration_tests/minitest/grape_app/app/property/endpoint.rb +0 -39
  47. data/integration_tests/minitest/grape_app/app/property/service.rb +0 -56
  48. data/integration_tests/minitest/grape_app/app/trackable_object/endpoint.rb +0 -38
  49. data/integration_tests/minitest/grape_app/app/trackable_object/service.rb +0 -49
  50. data/integration_tests/minitest/grape_app/app/trackable_object/validator.rb +0 -40
  51. data/integration_tests/minitest/grape_app/app/tracking_spec/endpoint.rb +0 -58
  52. data/integration_tests/minitest/grape_app/app/tracking_spec/expand_tracking_spec_events.rb +0 -91
  53. data/integration_tests/minitest/grape_app/app/tracking_spec/service.rb +0 -51
  54. data/integration_tests/minitest/grape_app/app/tracking_spec/validator.rb +0 -61
  55. data/integration_tests/minitest/grape_app/app/utils/errors/api_exceptions.rb +0 -10
  56. data/integration_tests/minitest/grape_app/app/utils/errors/service_exceptions.rb +0 -12
  57. data/integration_tests/minitest/grape_app/app/versioned_entity/entity.rb +0 -110
  58. data/integration_tests/minitest/grape_app/app/versioned_entity/service.rb +0 -47
  59. data/integration_tests/minitest/grape_app/app/versioned_entity/validator.rb +0 -61
  60. data/integration_tests/minitest/grape_app/app/versioned_entity_snapshot/entity.rb +0 -32
  61. data/integration_tests/minitest/grape_app/config/boot.rb +0 -9
  62. data/integration_tests/minitest/grape_app/config.ru +0 -3
  63. data/integration_tests/minitest/grape_app/db/proto/change_request.rb +0 -10
  64. data/integration_tests/minitest/grape_app/db/proto/common/doc.rb +0 -86
  65. data/integration_tests/minitest/grape_app/db/proto/event.rb +0 -10
  66. data/integration_tests/minitest/grape_app/db/proto/event_snapshot.rb +0 -10
  67. data/integration_tests/minitest/grape_app/db/proto/project.rb +0 -21
  68. data/integration_tests/minitest/grape_app/db/proto/property.rb +0 -10
  69. data/integration_tests/minitest/grape_app/db/proto/property_snapshot.rb +0 -10
  70. data/integration_tests/minitest/grape_app/db/proto/trackable_object.rb +0 -10
  71. data/integration_tests/minitest/grape_app/db/proto/trackable_object_snapshot.rb +0 -10
  72. data/integration_tests/minitest/grape_app/db/proto/tracking_spec.rb +0 -10
  73. data/integration_tests/minitest/grape_app/test/api/functional/event_test.rb +0 -186
  74. data/integration_tests/minitest/grape_app/test/api/functional/property_test.rb +0 -197
  75. data/integration_tests/minitest/grape_app/test/api/functional/trackable_object_test.rb +0 -134
  76. data/integration_tests/minitest/grape_app/test/api/functional/tracking_spec_test.rb +0 -56
  77. data/integration_tests/minitest/grape_app/test/api/functional/user_test.rb +0 -24
  78. data/integration_tests/minitest/grape_app/test/api/functional/versioned_entity_helper.rb +0 -157
  79. data/integration_tests/minitest/grape_app/test/fixtures/change_requests.rb +0 -83
  80. data/integration_tests/minitest/grape_app/test/fixtures/event_snapshots.rb +0 -105
  81. data/integration_tests/minitest/grape_app/test/fixtures/events.rb +0 -58
  82. data/integration_tests/minitest/grape_app/test/fixtures/properties.rb +0 -66
  83. data/integration_tests/minitest/grape_app/test/fixtures/property_snapshots.rb +0 -124
  84. data/integration_tests/minitest/grape_app/test/fixtures/sample_tracking_spec.json +0 -125
  85. data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects.rb +0 -58
  86. data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects_snapshots.rb +0 -61
  87. data/integration_tests/minitest/grape_app/test/fixtures/tracking_specs.rb +0 -22
  88. data/integration_tests/minitest/grape_app/test/test_helper.rb +0 -15
@@ -1,78 +0,0 @@
1
- require_relative './service'
2
- module Skee::App::Event
3
- class Endpoint
4
-
5
- ERRORS = Skee::App::Utils::Errors
6
-
7
- def self.list
8
- Service.list
9
- end
10
-
11
- def self.get(params)
12
- Service.get(params)
13
- end
14
-
15
- def self.create(params)
16
- Service.create(formatted_params(params))
17
- rescue ERRORS::RecordNotFoundException,
18
- ERRORS::NotAllowedToUpdate,
19
- ERRORS::UniquenessViolationException => e
20
- raise ERRORS::ValidationError.new(e.message)
21
- end
22
-
23
- def self.update(params)
24
- Service.update(formatted_params(params))
25
- rescue ERRORS::RecordNotFoundException,
26
- ERRORS::NotAllowedToUpdate,
27
- ERRORS::UniquenessViolationException => e
28
- raise ERRORS::ValidationError.new(e.message)
29
- end
30
-
31
- def self.update_payload_keys(params)
32
- Service.update_payload_keys(formatted_params(params))
33
- rescue ERRORS::RecordNotFoundException,
34
- ERRORS::NotAllowedToUpdate,
35
- ERRORS::UniquenessViolationException => e
36
- raise ERRORS::ValidationError.new(e.message)
37
- end
38
-
39
- def self.remove_payload_keys(params)
40
- Service.remove_payload_keys(formatted_params(params))
41
- rescue ERRORS::RecordNotFoundException,
42
- ERRORS::NotAllowedToUpdate,
43
- ERRORS::UniquenessViolationException => e
44
- raise ERRORS::ValidationError.new(e.message)
45
- end
46
-
47
- def self.add_payload_keys(params)
48
- Service.add_payload_keys(formatted_params(params))
49
- rescue ERRORS::RecordNotFoundException,
50
- ERRORS::NotAllowedToUpdate,
51
- ERRORS::UniquenessViolationException => e
52
- raise ERRORS::ValidationError.new(e.message)
53
- end
54
-
55
- def self.remove(params)
56
- Service.remove(params)
57
- rescue ERRORS::RecordNotFoundException,
58
- ERRORS::NotAllowedToUpdate,
59
- ERRORS::UniquenessViolationException => e
60
- raise ERRORS::ValidationError.new(e.message)
61
- end
62
-
63
- private
64
-
65
- def self.formatted_params(params)
66
- existing_payload = params[:payload]
67
- return params unless existing_payload
68
-
69
- new_payload = existing_payload.map do |payload|
70
- key = payload[:key]
71
- payload.delete(:key)
72
- [key, payload]
73
- end.to_h
74
- params[:payload] = new_payload
75
- params
76
- end
77
- end
78
- end
@@ -1,68 +0,0 @@
1
- require_relative '../../app/versioned_entity/service'
2
- require_relative 'validator'
3
- module Skee
4
- module App
5
- module Event
6
- class Service < Skee::App::VersionedEntityService
7
- def self.entity
8
- :event
9
- end
10
-
11
- def self.create_fields_keys
12
- %i(
13
- change_request_id
14
- previous_snapshot_id
15
- is_removed
16
- name
17
- description
18
- payload
19
- )
20
- end
21
-
22
- def self.update_fields_keys
23
- %i(
24
- id
25
- change_request_id
26
- is_removed
27
- name
28
- description
29
- payload
30
- )
31
- end
32
-
33
- def self.create(params)
34
- Skee::App::Event::Validator.new(params).validate_create_params
35
- super(params)
36
- end
37
-
38
- def self.add_payload_keys(params)
39
- Skee::App::Event::Validator.new(params).validate_add_payload_key_params
40
- event = Skee::App::Event::Service.get(id: params[:id])
41
- new_payload = event.versioned_entity_snapshot.payload.merge(params[:payload])
42
- params[:payload] = new_payload
43
- update(params)
44
- end
45
-
46
- def self.update_payload_keys(params)
47
- Skee::App::Event::Validator.new(params).validate_update_payload_key_params
48
- event = Skee::App::Event::Service.get(id: params[:id])
49
- new_payload = event.versioned_entity_snapshot.payload.merge(params[:payload])
50
- params[:payload] = new_payload
51
- update(params)
52
- end
53
-
54
- def self.remove_payload_keys(params)
55
- Skee::App::Event::Validator.new(params).validate_remove_payload_key_params
56
- event = Skee::App::Event::Service.get(id: params[:id])
57
- keys_for_removal = params[:payload_keys]
58
- new_payload = event.versioned_entity_snapshot.payload.map { |key, value|
59
- [key, value] unless keys_for_removal.include?(key)
60
- }.compact.to_h
61
- params[:payload] = new_payload
62
- params.delete(:payload_keys)
63
- update(params)
64
- end
65
- end
66
- end
67
- end
68
- end
@@ -1,108 +0,0 @@
1
- require_relative '../../app/change_request/service'
2
- require_relative '../../app/tracking_spec/service'
3
- module Skee
4
- module App
5
- module Event
6
- class Validator
7
- def initialize(params)
8
- @params = params
9
- end
10
-
11
- ERRORS = Utils::Errors
12
-
13
- def validate_create_params
14
- validate_change_request_status
15
- validate_payload
16
- end
17
-
18
- def validate_add_payload_key_params
19
- validate_change_request_status
20
- validate_non_duplicate_keys
21
- validate_payload
22
- end
23
-
24
- def validate_update_payload_key_params
25
- validate_change_request_status
26
- validate_key_exists(@params[:payload].keys)
27
- validate_payload
28
- end
29
-
30
- def validate_remove_payload_key_params
31
- validate_change_request_status
32
- validate_key_exists(@params[:payload_keys])
33
- end
34
-
35
- private
36
-
37
- def validate_payload
38
- payload = @params[:payload]
39
- return unless payload
40
-
41
- payload.each do |_, value|
42
- validate_reference_entity_and_type(value)
43
- validate_properties_exist_on_trackable_object(value)
44
- validate_selected_property_ids_exist(value)
45
- end
46
- end
47
-
48
- def validate_reference_entity_and_type(payload_value)
49
- reference_entity_id = payload_value[:reference_entity_id]
50
- reference_entity_type = payload_value[:reference_entity_type]
51
-
52
- reference_entity = if reference_entity_type == 'trackable_object'
53
- Skee::App::TrackableObject::Service.get(id: reference_entity_id, change_request_id: @params[:change_request_id])
54
- else
55
- Skee::App::Property::Service.get(id: reference_entity_id, change_request_id: @params[:change_request_id])
56
- end
57
- return if reference_entity
58
-
59
- raise ERRORS::NotAllowedToUpdate.new('Invalid parameter: Reference entity does not exist')
60
- end
61
-
62
- def validate_properties_exist_on_trackable_object(payload_value)
63
- return if payload_value[:reference_entity_type] != 'trackable_object'
64
- trackable_object = Skee::App::TrackableObject::Service.get(id: payload_value[:reference_entity_id], change_request_id: @params[:change_request_id])
65
- return if (payload_value[:selected_property_ids] - trackable_object.versioned_entity_snapshot.property_ids).empty?
66
- raise ERRORS::NotAllowedToUpdate.new('Invalid parameter: Selected properties not present on trackable object')
67
- end
68
-
69
- def validate_selected_property_ids_exist(payload_value)
70
- selected_property_ids = payload_value[:selected_property_ids]
71
- selected_properties = Skee::App::Property::Service.list(ids: selected_property_ids, change_request_id: @params[:change_request_id])
72
- return if (selected_properties.map{|property| property.versioned_entity.id} - selected_property_ids).empty?
73
- raise ERRORS::NotAllowedToUpdate.new('Invalid parameter: Selected properties do not exist')
74
- end
75
-
76
- def validate_non_duplicate_keys
77
- # check that key is unique
78
- # check that reference_entity_id exists for the corresponding reference_entity_type
79
- # check that selected_property_ids exist
80
- common_keys = event.versioned_entity_snapshot.payload.keys & @params[:payload].keys
81
- return if common_keys.empty?
82
- raise ERRORS::NotAllowedToUpdate.new("Invalid keys: Keys #{common_keys.join(',')} already exist")
83
- end
84
-
85
- def validate_key_exists(payload_keys)
86
- existing_keys = event.versioned_entity_snapshot.payload.keys
87
- payload_keys.each do |key|
88
- next if existing_keys.include?(key)
89
- raise ERRORS::NotAllowedToUpdate.new("Invalid keys: Not allowed to update non-existent key #{key}")
90
- end
91
- end
92
-
93
- def validate_change_request_status
94
- raise ERRORS::RecordNotFoundException.new('Invalid change request') unless change_request
95
- raise ERRORS::NotAllowedToUpdate.new('Invalid change request') if change_request.status != 'open'
96
- end
97
-
98
- def event
99
- @event ||= Skee::App::Event::Service.get(id: @params[:id], change_request_id: @params[:change_request_id])
100
- end
101
-
102
- def change_request
103
- @change_request ||= Skee::App::ChangeRequest::Service.get(id: @params[:change_request_id])
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -1,24 +0,0 @@
1
- require_relative './service'
2
- module Skee::App::Project
3
- class Endpoint
4
- def self.list
5
- Service.list
6
- end
7
-
8
- def self.get(params)
9
- Service.get(params)
10
- end
11
-
12
- def self.create(params)
13
- Service.create(params)
14
- end
15
-
16
- def self.update(params)
17
- Service.update(params)
18
- end
19
-
20
- def self.delete(params)
21
- Service.delete(params)
22
- end
23
- end
24
- end
@@ -1,42 +0,0 @@
1
- require_relative '../../db/proto/project'
2
- module Skee
3
- module App
4
- module Project
5
- class Service
6
- DB = Skee::DB::Proto
7
-
8
- def self.list
9
- DB::Project.all
10
- end
11
-
12
- def self.get(params)
13
- DB::Project.find(params[:id])
14
- end
15
-
16
- def self.create(params)
17
- # add any validation or filtering logic here to
18
- fields = {
19
- name: params[:name],
20
- description: params[:description]
21
- }
22
- DB::Project.create(fields)
23
- end
24
-
25
- def self.update(params)
26
- # send valid fields excluding id
27
- fields = {
28
- name: params[:name],
29
- description: params[:description]
30
- }
31
- project = DB::Project.find(params[:id])
32
- project.update(fields)
33
- end
34
-
35
- def self.delete(params)
36
- project = DB::Project.find(params[:id])
37
- project.delete
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,39 +0,0 @@
1
- require_relative './service'
2
- module Skee::App::Property
3
- class Endpoint
4
-
5
- ERRORS = Skee::App::Utils::Errors
6
-
7
- def self.list
8
- Service.list
9
- end
10
-
11
- def self.get(params)
12
- Service.get(params)
13
- end
14
-
15
- def self.create(params)
16
- Service.create(params)
17
- rescue ERRORS::RecordNotFoundException,
18
- ERRORS::NotAllowedToUpdate,
19
- ERRORS::UniquenessViolationException => e
20
- raise ERRORS::ValidationError.new(e.message)
21
- end
22
-
23
- def self.update(params)
24
- Service.update(params)
25
- rescue ERRORS::RecordNotFoundException,
26
- ERRORS::NotAllowedToUpdate,
27
- ERRORS::UniquenessViolationException => e
28
- raise ERRORS::ValidationError.new(e.message)
29
- end
30
-
31
- def self.remove(params)
32
- Service.remove(params)
33
- rescue ERRORS::RecordNotFoundException,
34
- ERRORS::NotAllowedToUpdate,
35
- ERRORS::UniquenessViolationException => e
36
- raise ERRORS::ValidationError.new(e.message)
37
- end
38
- end
39
- end
@@ -1,56 +0,0 @@
1
- require_relative '../../app/versioned_entity/service'
2
- module Skee
3
- module App
4
- module Property
5
- class Service < Skee::App::VersionedEntityService
6
- def self.entity
7
- :property
8
- end
9
-
10
- def self.create_fields_keys
11
- %i(
12
- change_request_id
13
- previous_snapshot_id
14
- is_removed
15
- name
16
- property_of
17
- description
18
- is_nullable
19
- data_type
20
- additional_instructions
21
- data_format_id
22
- regex_validation
23
- )
24
- end
25
-
26
- def self.update_fields_keys
27
- %i(
28
- change_request_id
29
- is_removed
30
- id
31
- name
32
- description
33
- is_nullable
34
- data_type
35
- additional_instructions
36
- data_format_id
37
- regex_validation
38
- )
39
- end
40
-
41
- def self.create(params)
42
- new_property = super(params)
43
- if params[:property_of] == :trackable_object
44
- parent_reference_id = params[:parent_reference_id]
45
- Skee::App::TrackableObject::Service.add_property(
46
- change_request_id: params[:change_request_id],
47
- id: parent_reference_id,
48
- property_id: new_property.versioned_entity.id
49
- )
50
- end
51
- new_property
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,38 +0,0 @@
1
- require_relative './service'
2
- module Skee::App::TrackableObject
3
- class Endpoint
4
- ERRORS = Skee::App::Utils::Errors
5
-
6
- def self.list
7
- Service.list
8
- end
9
-
10
- def self.get(params)
11
- Service.get(params)
12
- end
13
-
14
- def self.create(params)
15
- Service.create(params)
16
- rescue ERRORS::RecordNotFoundException,
17
- ERRORS::NotAllowedToUpdate,
18
- ERRORS::UniquenessViolationException => e
19
- raise ERRORS::ValidationError.new(e.message)
20
- end
21
-
22
- def self.update(params)
23
- Service.update(params)
24
- rescue ERRORS::RecordNotFoundException,
25
- ERRORS::NotAllowedToUpdate,
26
- ERRORS::UniquenessViolationException => e
27
- raise ERRORS::ValidationError.new(e.message)
28
- end
29
-
30
- def self.remove(params)
31
- Service.remove(params)
32
- rescue ERRORS::RecordNotFoundException,
33
- ERRORS::NotAllowedToUpdate,
34
- ERRORS::UniquenessViolationException => e
35
- raise ERRORS::ValidationError.new(e.message)
36
- end
37
- end
38
- end
@@ -1,49 +0,0 @@
1
- require_relative '../../app/versioned_entity/service'
2
- require_relative 'validator'
3
- module Skee
4
- module App
5
- module TrackableObject
6
- class Service < Skee::App::VersionedEntityService
7
- def self.entity
8
- :trackable_object
9
- end
10
-
11
- def self.create_fields_keys
12
- %i(
13
- change_request_id
14
- previous_snapshot_id
15
- is_removed
16
- name
17
- property_ids
18
- )
19
- end
20
-
21
- def self.update_fields_keys
22
- %i(
23
- change_request_id
24
- is_removed
25
- id
26
- name
27
- property_ids
28
- )
29
- end
30
-
31
- def self.add_property(params)
32
- Skee::App::TrackableObject::Validator.new(params).
33
- validate_add_property
34
- trackable_object = get(id: params[:id])
35
- trackable_object_property_ids = trackable_object.versioned_entity_snapshot.property_ids
36
- property_id = params[:property_id]
37
-
38
- return if trackable_object_property_ids.include?(property_id)
39
- update_property_ids = trackable_object_property_ids + [property_id]
40
- update(
41
- id: params[:id],
42
- property_ids: update_property_ids,
43
- change_request_id: params[:change_request_id]
44
- )
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,40 +0,0 @@
1
- require_relative '../../app/change_request/service'
2
- require_relative '../../app/tracking_spec/service'
3
- module Skee
4
- module App
5
- module TrackableObject
6
- class Validator
7
- def initialize(params)
8
- @params = params
9
- end
10
-
11
- ERRORS = Utils::Errors
12
-
13
- def validate_add_property
14
- validate_property_exists(@params[:property_id])
15
- end
16
-
17
- def validate_remove_property
18
- validate_property_exists(@params[:property_id])
19
- validate_property_belongs_to_trackable_object(@params[:property_id], @params[:id])
20
- end
21
-
22
- private
23
-
24
- def validate_property_exists(property_id)
25
- property_instance = Skee::App::DB_MAPPING_ENTITY[:property].find(property_id)
26
- raise ERRORS::RecordNotFoundException.new('Resource not found') unless property_instance
27
- end
28
-
29
- def validate_property_belongs_to_trackable_object(property_id, trackable_object_id)
30
- return if trackable_object(trackable_object_id).versioned_entity_snapshot.property_ids.include?(property_id)
31
- raise ERRORS::NotAllowedToUpdate.new('Trackable object does not contain property.')
32
- end
33
-
34
- def trackable_object(trackable_object_id)
35
- @trackable_object ||= Skee::App::TrackableObject::Service.get(id: trackable_object_id)
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,58 +0,0 @@
1
- require_relative './service'
2
- require_relative './validator'
3
- require_relative './expand_tracking_spec_events'
4
-
5
- module Skee::App::TrackingSpec
6
- class Endpoint
7
- ERRORS = Skee::App::Utils::Errors
8
-
9
- def self.list
10
- Service.list
11
- end
12
-
13
- def self.get(params)
14
- Service.get(params)
15
- end
16
-
17
- def self.full_spec(params)
18
- Service.full_spec(params)
19
- end
20
-
21
- def self.create(params)
22
- Service.create(params)
23
- rescue ERRORS::RecordNotFoundException,
24
- ERRORS::NotAllowedToUpdate => e
25
- raise ERRORS::ValidationError.new(e.message)
26
- end
27
-
28
- def self.update(params)
29
- Service.update(params)
30
- rescue ERRORS::RecordNotFoundException,
31
- ERRORS::NotAllowedToUpdate => e
32
- raise ERRORS::ValidationError.new(e.message)
33
- end
34
-
35
- def self.delete(params)
36
- Service.delete(params)
37
- rescue ERRORS::RecordNotFoundException,
38
- ERRORS::NotAllowedToUpdate => e
39
- raise ERRORS::ValidationError.new(e.message)
40
- end
41
-
42
- def self.expand(params)
43
- Skee::App::TrackingSpec::Validator.new(params).validate_expand_params
44
- tracking_spec = Service.get(params)
45
- expanded_events = ExpandTrackingSpecEvents.new(tracking_spec, params[:change_request_id]).perform
46
- OpenStruct.new(
47
- id: tracking_spec.id,
48
- identifier: tracking_spec.identifier,
49
- version: tracking_spec.version,
50
- project_id: tracking_spec.project_id,
51
- status: tracking_spec.status,
52
- events: expanded_events
53
- )
54
- rescue ERRORS::RecordNotFoundException => e
55
- raise ERRORS::ValidationError.new(e.message)
56
- end
57
- end
58
- end
@@ -1,91 +0,0 @@
1
- require_relative '../../app/event/service'
2
- require_relative '../../app/property/service'
3
-
4
- module Skee::App::TrackingSpec
5
- class ExpandTrackingSpecEvents
6
- def initialize(tracking_spec, change_request_id)
7
- @tracking_spec = tracking_spec
8
- @change_request_id = change_request_id
9
- end
10
-
11
- def perform
12
- expand_events
13
- end
14
-
15
- private
16
-
17
- def event_snapshots
18
- @tracking_spec.events.map do |event_id|
19
- Skee::App::Event::Service.get(
20
- id: event_id,
21
- change_request_id: @change_request_id
22
- ).versioned_entity_snapshot
23
- end
24
- end
25
-
26
- def expand_events
27
- event_snapshots.map do |snapshot|
28
- event_payload = snapshot.payload
29
- expanded_payload = event_payload.map do |key, value|
30
- expanded_value = if value[:reference_entity_type] == :trackable_object
31
- trackable_object_id = value[:reference_entity_id]
32
- trackable_object_snapshot = get_trackable_object_snapshot(trackable_object_id)
33
- property_ids = value[:selected_property_ids] & trackable_object_snapshot.property_ids
34
- expand_trackable_object_properties(property_ids)
35
- else
36
- property_id = value[:reference_entity_id]
37
- property_snapshot = get_property_snapshot(property_id)
38
- expand_property(property_snapshot)
39
- end
40
- expanded_value = [expanqded_value] if value[:is_array]
41
- [key, expanded_value]
42
- end.to_h
43
- {name: snapshot.name, description: snapshot.description, payload: expanded_payload}
44
- end
45
- end
46
-
47
- def expand_trackable_object_properties(property_ids)
48
- property_ids.map do |property_id|
49
- property_snapshot = get_property_snapshot(property_id)
50
- property_fields = expand_property(property_snapshot)
51
-
52
- [property_snapshot.name, property_fields]
53
- end.to_h
54
-
55
- end
56
-
57
- def expand_property(property_snapshot)
58
- trackable_object_id = property_snapshot.trackable_object_id
59
- if trackable_object_id
60
- trackable_object_snapshot = get_trackable_object_snapshot(trackable_object_id)
61
- property_ids = trackable_object_snapshot.property_ids
62
- expanded_values = expand_trackable_object_properties(property_ids)
63
- property_snapshot.is_array ? [expanded_values] : expanded_values
64
- else
65
- {
66
- data_type: property_snapshot.data_type,
67
- description: property_snapshot.description,
68
- is_nullable: property_snapshot.is_nullable,
69
- additional_instructions: property_snapshot.additional_instructions,
70
- data_format_id: property_snapshot.data_format_id,
71
- regex_validation: property_snapshot.regex_validation,
72
- is_removed: property_snapshot.is_removed,
73
- }
74
- end
75
- end
76
-
77
- def get_trackable_object_snapshot(trackable_object_id)
78
- Skee::App::TrackableObject::Service.get(
79
- id: trackable_object_id,
80
- change_request_id: @change_request_id
81
- ).versioned_entity_snapshot
82
- end
83
-
84
- def get_property_snapshot(property_id)
85
- Skee::App::Property::Service.get(
86
- id: property_id,
87
- change_request_id: @change_request_id
88
- ).versioned_entity_snapshot
89
- end
90
- end
91
- end