flutter 0.1.0.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.overcommit.yml +8 -0
  3. data/.rubocop.yml +10 -0
  4. data/CHANGELOG.md +6 -0
  5. data/CODE_OF_CONDUCT.md +84 -0
  6. data/Gemfile +35 -0
  7. data/Guardfile +9 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +134 -0
  10. data/Rakefile +24 -0
  11. data/TODO.md +30 -0
  12. data/integration_tests/minitest/grape_app/.gitignore +67 -0
  13. data/integration_tests/minitest/grape_app/.ruby-version +1 -0
  14. data/integration_tests/minitest/grape_app/Gemfile +17 -0
  15. data/integration_tests/minitest/grape_app/Gemfile.lock +89 -0
  16. data/integration_tests/minitest/grape_app/README.md +2 -0
  17. data/integration_tests/minitest/grape_app/Rakefile +9 -0
  18. data/integration_tests/minitest/grape_app/api/api.rb +34 -0
  19. data/integration_tests/minitest/grape_app/api/routes/api_helpers.rb +12 -0
  20. data/integration_tests/minitest/grape_app/api/routes/change_request/api.rb +69 -0
  21. data/integration_tests/minitest/grape_app/api/routes/change_request/response_entity.rb +18 -0
  22. data/integration_tests/minitest/grape_app/api/routes/event/api.rb +121 -0
  23. data/integration_tests/minitest/grape_app/api/routes/event/response_entity.rb +41 -0
  24. data/integration_tests/minitest/grape_app/api/routes/project/api.rb +59 -0
  25. data/integration_tests/minitest/grape_app/api/routes/project/response_entity.rb +13 -0
  26. data/integration_tests/minitest/grape_app/api/routes/property/api.rb +78 -0
  27. data/integration_tests/minitest/grape_app/api/routes/property/response_entity.rb +31 -0
  28. data/integration_tests/minitest/grape_app/api/routes/trackable_object/api.rb +64 -0
  29. data/integration_tests/minitest/grape_app/api/routes/trackable_object/response_entity.rb +24 -0
  30. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/api.rb +88 -0
  31. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/response_entity.rb +17 -0
  32. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/spec_response.rb +19 -0
  33. data/integration_tests/minitest/grape_app/api/routes/user/api.rb +22 -0
  34. data/integration_tests/minitest/grape_app/api/routes/user/response_entity.rb +12 -0
  35. data/integration_tests/minitest/grape_app/app/app.rb +30 -0
  36. data/integration_tests/minitest/grape_app/app/change_request/endpoint.rb +24 -0
  37. data/integration_tests/minitest/grape_app/app/change_request/generate_system_changes.rb +25 -0
  38. data/integration_tests/minitest/grape_app/app/change_request/service.rb +79 -0
  39. data/integration_tests/minitest/grape_app/app/event/endpoint.rb +78 -0
  40. data/integration_tests/minitest/grape_app/app/event/service.rb +68 -0
  41. data/integration_tests/minitest/grape_app/app/event/validator.rb +108 -0
  42. data/integration_tests/minitest/grape_app/app/project/endpoint.rb +24 -0
  43. data/integration_tests/minitest/grape_app/app/project/service.rb +42 -0
  44. data/integration_tests/minitest/grape_app/app/property/endpoint.rb +39 -0
  45. data/integration_tests/minitest/grape_app/app/property/service.rb +56 -0
  46. data/integration_tests/minitest/grape_app/app/trackable_object/endpoint.rb +38 -0
  47. data/integration_tests/minitest/grape_app/app/trackable_object/service.rb +49 -0
  48. data/integration_tests/minitest/grape_app/app/trackable_object/validator.rb +40 -0
  49. data/integration_tests/minitest/grape_app/app/tracking_spec/endpoint.rb +58 -0
  50. data/integration_tests/minitest/grape_app/app/tracking_spec/expand_tracking_spec_events.rb +91 -0
  51. data/integration_tests/minitest/grape_app/app/tracking_spec/service.rb +51 -0
  52. data/integration_tests/minitest/grape_app/app/tracking_spec/validator.rb +61 -0
  53. data/integration_tests/minitest/grape_app/app/utils/errors/api_exceptions.rb +10 -0
  54. data/integration_tests/minitest/grape_app/app/utils/errors/service_exceptions.rb +12 -0
  55. data/integration_tests/minitest/grape_app/app/versioned_entity/entity.rb +110 -0
  56. data/integration_tests/minitest/grape_app/app/versioned_entity/service.rb +47 -0
  57. data/integration_tests/minitest/grape_app/app/versioned_entity/validator.rb +61 -0
  58. data/integration_tests/minitest/grape_app/app/versioned_entity_snapshot/entity.rb +32 -0
  59. data/integration_tests/minitest/grape_app/config/boot.rb +9 -0
  60. data/integration_tests/minitest/grape_app/config.ru +3 -0
  61. data/integration_tests/minitest/grape_app/db/proto/change_request.rb +10 -0
  62. data/integration_tests/minitest/grape_app/db/proto/common/doc.rb +86 -0
  63. data/integration_tests/minitest/grape_app/db/proto/event.rb +10 -0
  64. data/integration_tests/minitest/grape_app/db/proto/event_snapshot.rb +10 -0
  65. data/integration_tests/minitest/grape_app/db/proto/project.rb +21 -0
  66. data/integration_tests/minitest/grape_app/db/proto/property.rb +10 -0
  67. data/integration_tests/minitest/grape_app/db/proto/property_snapshot.rb +10 -0
  68. data/integration_tests/minitest/grape_app/db/proto/trackable_object.rb +10 -0
  69. data/integration_tests/minitest/grape_app/db/proto/trackable_object_snapshot.rb +10 -0
  70. data/integration_tests/minitest/grape_app/db/proto/tracking_spec.rb +10 -0
  71. data/integration_tests/minitest/grape_app/test/api/functional/event_test.rb +186 -0
  72. data/integration_tests/minitest/grape_app/test/api/functional/property_test.rb +197 -0
  73. data/integration_tests/minitest/grape_app/test/api/functional/trackable_object_test.rb +134 -0
  74. data/integration_tests/minitest/grape_app/test/api/functional/tracking_spec_test.rb +56 -0
  75. data/integration_tests/minitest/grape_app/test/api/functional/user_test.rb +24 -0
  76. data/integration_tests/minitest/grape_app/test/api/functional/versioned_entity_helper.rb +157 -0
  77. data/integration_tests/minitest/grape_app/test/fixtures/change_requests.rb +83 -0
  78. data/integration_tests/minitest/grape_app/test/fixtures/event_snapshots.rb +105 -0
  79. data/integration_tests/minitest/grape_app/test/fixtures/events.rb +58 -0
  80. data/integration_tests/minitest/grape_app/test/fixtures/properties.rb +66 -0
  81. data/integration_tests/minitest/grape_app/test/fixtures/property_snapshots.rb +124 -0
  82. data/integration_tests/minitest/grape_app/test/fixtures/sample_tracking_spec.json +125 -0
  83. data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects.rb +58 -0
  84. data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects_snapshots.rb +61 -0
  85. data/integration_tests/minitest/grape_app/test/fixtures/tracking_specs.rb +22 -0
  86. data/integration_tests/minitest/grape_app/test/test_helper.rb +15 -0
  87. data/lib/flutter/config.rb +24 -0
  88. data/lib/flutter/minitest.rb +83 -0
  89. data/lib/flutter/parser.rb +82 -0
  90. data/lib/flutter/persistence.rb +152 -0
  91. data/lib/flutter/rspec.rb +66 -0
  92. data/lib/flutter/tracker.rb +133 -0
  93. data/lib/flutter/version.rb +5 -0
  94. data/lib/flutter.rb +12 -0
  95. data/lib/minitest/flutter_plugin.rb +16 -0
  96. data/sig/flutter.rbs +4 -0
  97. metadata +187 -0
@@ -0,0 +1,69 @@
1
+ require_relative '../api_helpers'
2
+ require_relative './response_entity'
3
+ require_relative '../tracking_spec/spec_response'
4
+ require_relative '../../../app/change_request/endpoint'
5
+
6
+ module Skee::API::Routes::ChangeRequest
7
+ class API < Grape::API
8
+ helpers Skee::API::Routes::APIHelpers
9
+
10
+ resource :change_requests do
11
+ desc 'List all Change Requests.'
12
+ get do
13
+ change_requests = Skee::App::ChangeRequest::Endpoint.list
14
+ present change_requests,
15
+ with: Skee::API::Routes::ChangeRequest::ResponseEntity
16
+ end
17
+
18
+ desc 'Retrieve a Change Request.'
19
+ params do
20
+ requires :id, type: String, desc: 'Change Request ID.'
21
+ end
22
+ get ':id' do
23
+ change_request = Skee::App::ChangeRequest::Endpoint.get(whitelisted_params)
24
+ present change_request,
25
+ with: Skee::API::Routes::ChangeRequest::ResponseEntity
26
+ end
27
+
28
+ desc 'Generate a full Tracking Spec with the changes in the Change Request.'
29
+ params do
30
+ requires :id, type: String, desc: 'Change Request ID.'
31
+ end
32
+ get ':id/full_spec' do
33
+ full_spec = Skee::App::ChangeRequest::Endpoint.full_spec(whitelisted_params)
34
+ present full_spec,
35
+ with: Skee::API::Routes::TrackingSpec::SpecResponse
36
+ end
37
+
38
+ desc 'Create a Change Request.'
39
+ params do
40
+ requires :name, type: String, desc: 'Change Request name.'
41
+ end
42
+ post do
43
+ new_change_request = Skee::App::ChangeRequest::Endpoint.create(whitelisted_params)
44
+ present new_change_request,
45
+ with: Skee::API::Routes::ChangeRequest::ResponseEntity
46
+ end
47
+
48
+ desc 'Update a Change Request.'
49
+ params do
50
+ requires :id, type: String, desc: 'Change Request ID.'
51
+ optional :name, type: String, desc: 'Change Request name.'
52
+ end
53
+ post ':id' do
54
+ updated_change_request = Skee::App::ChangeRequest::Endpoint.update(whitelisted_params)
55
+ present updated_change_request,
56
+ with: Skee::API::Routes::ChangeRequest::ResponseEntity
57
+ end
58
+
59
+ desc 'Delete a Change Request.'
60
+ params do
61
+ requires :id, type: String, desc: 'Change Request ID.'
62
+ end
63
+ delete ':id' do
64
+ Skee::App::ChangeRequest::Endpoint.delete(whitelisted_params)
65
+ status 200
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,18 @@
1
+ module Skee
2
+ module API
3
+ module Routes
4
+ module ChangeRequest
5
+ class ResponseEntity < Grape::Entity
6
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a ChangeRequest.' }
7
+ expose :identifier, documentation: { type: 'String', desc: 'Identifier of a ChangeRequest.' }
8
+ expose :project_id, documentation: { type: 'String', desc: 'Project in which ChangeRequest created.' }
9
+ expose :base_tracking_spec_id, documentation: { type: 'String', desc: 'ID of the Tracking Spec on which changes are requested.' }
10
+ expose :status, documentation: { type: 'String', desc: 'Status of a ChangeRequest.' }
11
+ expose :name, documentation: { type: 'String', desc: 'Name of the ChangeRequest.' }
12
+ expose :description, documentation: { type: 'String', desc: 'Description of the ChangeRequest.' }
13
+ expose :change_set, documentation: { type: 'String', desc: 'Dictionary with list of IDs of updated and new entities.' }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,121 @@
1
+ require_relative '../api_helpers'
2
+ require_relative './response_entity'
3
+ require_relative '../../../app/event/endpoint'
4
+ module Skee::API::Routes::Event
5
+ class API < Grape::API
6
+ helpers Skee::API::Routes::APIHelpers
7
+
8
+ resource :events do
9
+ desc 'List all events.'
10
+ get do
11
+ events = Skee::App::Event::Endpoint.list
12
+ present events,
13
+ with: Skee::API::Routes::Event::ResponseEntity
14
+ end
15
+
16
+ desc 'Retrieve an event.'
17
+ params do
18
+ requires :id, type: String, desc: 'Event ID.'
19
+ optional :change_request_id, type: String, desc: 'Change request ID for the request.'
20
+ end
21
+ get ':id' do
22
+ event = Skee::App::Event::Endpoint.get(whitelisted_params)
23
+ present event,
24
+ with: Skee::API::Routes::Event::ResponseEntity
25
+ end
26
+
27
+ desc 'Create an event.'
28
+ params do
29
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
30
+ requires :name, type: String, desc: 'Event name.'
31
+ optional :description, type: String, desc: 'Description of the event.'
32
+ requires :payload, type: Array do
33
+ requires :key, type: String, desc: 'Key of the event.'
34
+ requires :reference_entity_type, type: String, desc: 'Type of reference entity: trackable object or property'
35
+ requires :reference_entity_id, type: String, desc: 'ID of the reference entity.'
36
+ requires :is_array, type: Boolean, desc: 'Defines if the reference entity is an array or singular object'
37
+ requires :is_primary, type: Boolean, desc: 'Defines if the payload key is primary'
38
+ requires :selected_property_ids, type: Array[String], desc: 'Defines the array of property IDs that the key contains'
39
+ end
40
+ end
41
+ post do
42
+ new_event = Skee::App::Event::Endpoint.create(whitelisted_params)
43
+ present new_event,
44
+ with: Skee::API::Routes::Event::ResponseEntity
45
+ end
46
+
47
+ desc 'Update an event.'
48
+ params do
49
+ requires :id, type: String, desc: 'Event ID.'
50
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
51
+ optional :name, type: String, desc: 'Event name.'
52
+ optional :description, type: String, desc: 'Description of the event.'
53
+ end
54
+ post ':id' do
55
+ updated_event = Skee::App::Event::Endpoint.update(whitelisted_params)
56
+ present updated_event,
57
+ with: Skee::API::Routes::Event::ResponseEntity
58
+ end
59
+
60
+ desc 'Add payload keys to an event.'
61
+ params do
62
+ requires :id, type: String, desc: 'Event ID.'
63
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
64
+ requires :payload, type: Array do
65
+ requires :key, type: String, desc: 'Key of the event.'
66
+ requires :reference_entity_type, type: String, desc: 'Type of reference entity: trackable object or property'
67
+ requires :reference_entity_id, type: String, desc: 'ID of the reference entity.'
68
+ requires :is_array, type: Boolean, desc: 'Defines if the reference entity is an array or singular object'
69
+ requires :is_primary, type: Boolean, desc: 'Defines if the payload key is primary'
70
+ requires :selected_property_ids, type: Array[String], desc: 'Defines the array of property IDs that the key contains'
71
+ end
72
+ end
73
+ post ':id/add_payload' do
74
+ updated_event = Skee::App::Event::Endpoint.add_payload_keys(whitelisted_params)
75
+ present updated_event,
76
+ with: Skee::API::Routes::Event::ResponseEntity
77
+ end
78
+
79
+ desc 'Update payload for the given keys.'
80
+ params do
81
+ requires :id, type: String, desc: 'Event ID.'
82
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
83
+ requires :payload, type: Array do
84
+ requires :key, type: String, desc: 'Key of the event.'
85
+ requires :reference_entity_type, type: String, desc: 'Type of reference entity: trackable object or property'
86
+ requires :reference_entity_id, type: String, desc: 'ID of the reference entity.'
87
+ requires :is_array, type: Boolean, desc: 'Defines if the reference entity is an array or singular object'
88
+ requires :is_primary, type: Boolean, desc: 'Defines if the payload key is primary'
89
+ requires :selected_property_ids, type: Array[String], desc: 'Defines the array of property IDs that the key contains'
90
+ end
91
+ end
92
+ post ':id/update_payload' do
93
+ updated_event = Skee::App::Event::Endpoint.update_payload_keys(whitelisted_params)
94
+ present updated_event,
95
+ with: Skee::API::Routes::Event::ResponseEntity
96
+ end
97
+
98
+ desc 'Remove keys from the payload.'
99
+ params do
100
+ requires :id, type: String, desc: 'Event ID.'
101
+ requires :payload_keys, type: Array, desc: 'List of keys to be removed'
102
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
103
+ end
104
+ post ':id/remove_payload' do
105
+ updated_event = Skee::App::Event::Endpoint.remove_payload_keys(whitelisted_params)
106
+ present updated_event,
107
+ with: Skee::API::Routes::Event::ResponseEntity
108
+ end
109
+
110
+ desc 'Remove an event from the tracking spec.'
111
+ params do
112
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
113
+ requires :id, type: String, desc: 'Event ID.'
114
+ end
115
+ post ':id/remove' do
116
+ Skee::App::Event::Endpoint.remove(whitelisted_params)
117
+ status 200
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,41 @@
1
+ module Skee
2
+ module API
3
+ module Routes
4
+ module Event
5
+ class ResponseEntity < Grape::Entity
6
+ class EventPayload < Grape::Entity
7
+ expose :key, documentation: { type: 'String', desc: 'Key associated with the event.' }
8
+ expose :reference_entity_type, documentation: { type: 'String', desc: 'Reference Entity type, either trackable object or event' }
9
+ expose :reference_entity_id, documentation: { type: 'String', desc: 'Reference Entity ID' }
10
+ expose :is_array, documentation: { type: 'Boolean', desc: 'Defines if the response is an array or singular object.' }
11
+ expose :is_primary, documentation: { type: 'Boolean', desc: 'Defines if the entity is primary entity.'}
12
+ expose :selected_property_ids, documentation: { type: 'Array', desc: 'Defines the IDs of the sub-properties of the key'}
13
+ end
14
+
15
+ class VersionedEntity < Grape::Entity
16
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a property.' }
17
+ end
18
+ class EntitySnapshot < Grape::Entity
19
+ expose :id, as: :snapshot_id, documentation: { type: 'String', desc: 'Unique ID of a event snapshot.' }
20
+ expose :change_request_id, documentation: { type: 'String', desc: 'Change request ID of the event snapshot.' }
21
+ expose :previous_snapshot_id, documentation: { type: 'String', desc: 'Snapshot ID of the previous version of the event.' }
22
+ expose :is_removed, safe: true, documentation: { type: 'String', desc: 'Flag to specify that event is removed from the tracking spec.' }
23
+
24
+ expose :name, documentation: { type: 'String', desc: 'Event name.' }
25
+ expose :description, documentation: { type: 'String', desc: 'Description of the event.' }
26
+ expose :payload, using: ResponseEntity::EventPayload
27
+
28
+ def payload
29
+ object.payload.map do |key, value|
30
+ value.merge(key: key)
31
+ end
32
+ end
33
+ end
34
+
35
+ expose :versioned_entity, merge: true, using: ResponseEntity::VersionedEntity
36
+ expose :versioned_entity_snapshot, merge: true, using: ResponseEntity::EntitySnapshot
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,59 @@
1
+ require_relative '../api_helpers'
2
+ require_relative './response_entity'
3
+ require_relative '../../../app/project/endpoint'
4
+ module Skee::API::Routes::Project
5
+ class API < Grape::API
6
+ helpers Skee::API::Routes::APIHelpers
7
+
8
+ resource :projects do
9
+ desc 'List all projects.'
10
+ get do
11
+ projects = Skee::App::Project::Endpoint.list
12
+ present projects,
13
+ with: Skee::API::Routes::Project::ResponseEntity
14
+ end
15
+
16
+ desc 'Retrieve a project.'
17
+ params do
18
+ requires :id, type: String, desc: 'project ID.'
19
+ end
20
+ get ':id' do
21
+ project = Skee::App::Project::Endpoint.get(whitelisted_params)
22
+ present project,
23
+ with: Skee::API::Routes::Project::ResponseEntity
24
+ end
25
+
26
+ desc 'Create a project.'
27
+ params do
28
+ requires :name, type: String, desc: 'project name.'
29
+ optional :description, type: String, desc: 'project description.'
30
+ end
31
+ post do
32
+ new_project = Skee::App::Project::Endpoint.create(whitelisted_params)
33
+ present new_project,
34
+ with: Skee::API::Routes::Project::ResponseEntity
35
+ end
36
+
37
+ desc 'Update a project.'
38
+ params do
39
+ requires :id, type: String, desc: 'project ID.'
40
+ optional :name, type: String, desc: 'project name.'
41
+ optional :description, type: String, desc: 'project description.'
42
+ end
43
+ post ':id' do
44
+ updated_project = Skee::App::Project::Endpoint.update(whitelisted_params)
45
+ present updated_project,
46
+ with: Skee::API::Routes::Project::ResponseEntity
47
+ end
48
+
49
+ desc 'Delete a project.'
50
+ params do
51
+ requires :id, type: String, desc: 'project ID.'
52
+ end
53
+ delete ':id' do
54
+ Skee::App::Project::Endpoint.delete(whitelisted_params)
55
+ status 200
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,13 @@
1
+ module Skee
2
+ module API
3
+ module Routes
4
+ module Project
5
+ class ResponseEntity < Grape::Entity
6
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a project.' }
7
+ expose :name, documentation: { type: 'String', desc: 'Name of the project.' }
8
+ expose :description, documentation: { type: 'String', desc: 'Description of the project.' }
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,78 @@
1
+ require_relative '../api_helpers'
2
+ require_relative './response_entity'
3
+ require_relative '../../../app/property/endpoint'
4
+ module Skee::API::Routes::Property
5
+ class API < Grape::API
6
+ helpers Skee::API::Routes::APIHelpers
7
+
8
+ resource :properties do
9
+ desc 'List all properties.'
10
+ get do
11
+ properties = Skee::App::Property::Endpoint.list
12
+ present properties,
13
+ with: Skee::API::Routes::Property::ResponseEntity
14
+ end
15
+
16
+ desc 'Retrieve a property.'
17
+ params do
18
+ requires :id, type: String, desc: 'Property ID.'
19
+ optional :change_request_id, type: String, desc: 'Change request ID for the request.'
20
+ end
21
+ get ':id' do
22
+ property = Skee::App::Property::Endpoint.get(whitelisted_params)
23
+ present property,
24
+ with: Skee::API::Routes::Property::ResponseEntity
25
+ end
26
+
27
+ desc 'Create a property.'
28
+ params do
29
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
30
+ requires :name, type: String, desc: 'Property name.'
31
+ requires :property_of, type: Symbol, values: [:trackable_object, :event], desc: 'Specifies whether property is that of a trackable object or event'
32
+ requires :data_type, type: String, desc: 'Data type of the property.'
33
+ requires :parent_reference_id, type: String, desc: 'ID of the trackable object the property belongs to.'
34
+ optional :description, type: String, desc: 'Description of the property.'
35
+ optional :is_nullable, type: Boolean, desc: 'Is this property nullable when being passed in an event?.'
36
+ optional :additional_instructions, type: String, desc: 'Additional instructions for the trackable object property.'
37
+ optional :data_format_id, type: String, desc: 'FK to the data format of the property.'
38
+ optional :regex_validation, type: String, desc: 'RegEx expression for validation of the property value sent.'
39
+ end
40
+ post do
41
+ new_property = Skee::App::Property::Endpoint.create(whitelisted_params)
42
+ present new_property,
43
+ with: Skee::API::Routes::Property::ResponseEntity
44
+ end
45
+
46
+ desc 'Update a trackable object property.'
47
+ params do
48
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
49
+ optional :parent_reference_id, type: String, desc: 'ID of the trackable object the property belongs to.'
50
+ requires :id, type: String, desc: 'Property ID.'
51
+ optional :name, type: String, desc: 'Property name.'
52
+ optional :description, type: String, desc: 'Description of the property.'
53
+ optional :is_nullable, type: Boolean, desc: 'Is this property nullable when being passed in an event?.'
54
+ optional :data_type, type: String, desc: 'Data type of the property.'
55
+ optional :additional_instructions, type: String, desc: 'Additional instructions for the property.'
56
+ optional :data_format_id, type: String, desc: 'FK to the data format of the property.'
57
+ optional :regex_validation, type: String, desc: 'RegEx expression for validation of the property value sent.'
58
+ end
59
+ post ':id' do
60
+ updated_property = Skee::App::Property::Endpoint.update(whitelisted_params)
61
+ present updated_property,
62
+ with: Skee::API::Routes::Property::ResponseEntity
63
+ end
64
+
65
+ desc 'Remove a property from the tracking spec.'
66
+ params do
67
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
68
+ optional :parent_reference_id, type: String, desc: 'ID of the trackable object the property belongs to.'
69
+ requires :id, type: String, desc: 'Property ID.'
70
+ end
71
+ post ':id/remove' do
72
+ updated_property = Skee::App::Property::Endpoint.remove(whitelisted_params)
73
+ present updated_property,
74
+ with: Skee::API::Routes::Property::ResponseEntity
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,31 @@
1
+ module Skee
2
+ module API
3
+ module Routes
4
+ module Property
5
+ class ResponseEntity < Grape::Entity
6
+ class VersionedEntity < Grape::Entity
7
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a property.' }
8
+ end
9
+ class EntitySnapshot < Grape::Entity
10
+ expose :id, as: :snapshot_id, documentation: { type: 'String', desc: 'Unique ID of a property snapshot.' }
11
+ expose :change_request_id, documentation: { type: 'String', desc: 'Change request ID of the property snapshot.' }
12
+ expose :previous_snapshot_id, documentation: { type: 'String', desc: 'Snapshot ID of the previous version of the property.' }
13
+ expose :is_removed, safe: true, documentation: { type: 'String', desc: 'Flag to specify that property is removed from the tracking spec.' }
14
+
15
+ expose :name, documentation: { type: 'String', desc: 'Name of the property.' }
16
+ expose :property_of, documentation: { type: 'String', desc: 'Specifies whether property is that of a trackable object or event' }
17
+ expose :data_type, documentation: { type: 'String', desc: 'Data type of the property.' }
18
+ expose :description, documentation: { type: 'String', desc: 'Description of the property.' }
19
+ expose :is_nullable, documentation: { type: 'Boolean', desc: 'Is this property nullable when being passed in an event?.' }
20
+ expose :additional_instructions, documentation: { type: 'String', desc: 'Additional instructions for the property.' }
21
+ expose :data_format_id, documentation: { type: 'String', desc: 'FK to the data format of the property.' }
22
+ expose :regex_validation, documentation: { type: 'String', desc: 'RegEx expression for validation of the property value sent.' }
23
+ end
24
+
25
+ expose :versioned_entity, merge: true, using: ResponseEntity::VersionedEntity
26
+ expose :versioned_entity_snapshot, merge: true, using: ResponseEntity::EntitySnapshot
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,64 @@
1
+ require_relative '../api_helpers'
2
+ require_relative './response_entity'
3
+ require_relative '../../../app/trackable_object/endpoint'
4
+ module Skee::API::Routes::TrackableObject
5
+ class API < Grape::API
6
+ helpers Skee::API::Routes::APIHelpers
7
+
8
+ resource :trackable_objects do
9
+ desc 'List all trackable entitites.'
10
+ get do
11
+ trackable_objects = Skee::App::TrackableObject::Endpoint.list
12
+ present trackable_objects,
13
+ with: Skee::API::Routes::TrackableObject::ResponseEntity
14
+ end
15
+
16
+ desc 'Retrieve a trackable object.'
17
+ params do
18
+ requires :id, type: String, desc: 'Trackable object ID.'
19
+ optional :change_request_id, type: String, desc: 'Change request ID for the request.'
20
+ end
21
+ get ':id' do
22
+ trackable_object = Skee::App::TrackableObject::Endpoint.get(whitelisted_params)
23
+ present trackable_object,
24
+ with: Skee::API::Routes::TrackableObject::ResponseEntity
25
+ end
26
+
27
+ desc 'Create a trackable object.'
28
+ params do
29
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
30
+ requires :name, type: String, desc: 'Trackable object name.'
31
+ optional :property_ids, type: Array[String], desc: 'Property IDs of a Trackable object.'
32
+ end
33
+ post do
34
+ new_trackable_object = Skee::App::TrackableObject::Endpoint.create(whitelisted_params)
35
+ present new_trackable_object,
36
+ with: Skee::API::Routes::TrackableObject::ResponseEntity
37
+ end
38
+
39
+ desc 'Update a trackable object.'
40
+ params do
41
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
42
+ requires :id, type: String, desc: 'Trackable object ID.'
43
+ optional :name, type: String, desc: 'Trackable object name.'
44
+ optional :property_ids, type: Array[String], desc: 'Property IDs of a Trackable object.'
45
+ end
46
+ post ':id' do
47
+ updated_trackable_object = Skee::App::TrackableObject::Endpoint.update(whitelisted_params)
48
+ present updated_trackable_object,
49
+ with: Skee::API::Routes::TrackableObject::ResponseEntity
50
+ end
51
+
52
+ desc 'Remove a trackable object from the tracking spec.'
53
+ params do
54
+ requires :change_request_id, type: String, desc: 'Change request ID for the request.'
55
+ requires :id, type: String, desc: 'Trackable object ID.'
56
+ end
57
+ post ':id/remove' do
58
+ updated_trackable_object = Skee::App::TrackableObject::Endpoint.remove(whitelisted_params)
59
+ present updated_trackable_object,
60
+ with: Skee::API::Routes::TrackableObject::ResponseEntity
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,24 @@
1
+ module Skee
2
+ module API
3
+ module Routes
4
+ module TrackableObject
5
+ class ResponseEntity < Grape::Entity
6
+ class VersionedEntity < Grape::Entity
7
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a trackable_object.' }
8
+ end
9
+ class EntitySnapshot < Grape::Entity
10
+ expose :id, as: :snapshot_id, documentation: { type: 'String', desc: 'Unique ID of a trackable_object.' }
11
+ expose :name, documentation: { type: 'String', desc: 'Name of the trackable object.' }
12
+ expose :change_request_id, documentation: { type: 'String', desc: 'Change request ID for the trackable object.' }
13
+ expose :previous_snapshot_id, documentation: { type: 'String', desc: 'Trackable object ID of the previous version of this trackable object.' }
14
+ expose :is_removed, safe: true, documentation: { type: 'String', desc: 'Marker to specify that trackable object is removed from the tracking spec.' }
15
+ expose :property_ids, documentation: { type: 'Array', desc: 'Property IDs of a trackable object.' }
16
+ end
17
+
18
+ expose :versioned_entity, merge: true, using: ResponseEntity::VersionedEntity
19
+ expose :versioned_entity_snapshot, merge: true, using: ResponseEntity::EntitySnapshot
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,88 @@
1
+ require_relative '../api_helpers'
2
+ require_relative './response_entity'
3
+ require_relative './spec_response'
4
+ require_relative '../../../app/tracking_spec/endpoint'
5
+
6
+ module Skee::API::Routes::TrackingSpec
7
+ class API < Grape::API
8
+ helpers Skee::API::Routes::APIHelpers
9
+
10
+ resource :tracking_specs do
11
+ desc 'List all Tracking Specs.'
12
+ get do
13
+ tracking_specs = Skee::App::TrackingSpec::Endpoint.list
14
+ present tracking_specs,
15
+ with: Skee::API::Routes::TrackingSpec::ResponseEntity
16
+ end
17
+
18
+ desc 'Retrieve a Tracking Spec.'
19
+ params do
20
+ requires :id, type: String, desc: 'Tracking Spec ID.'
21
+ end
22
+ get ':id' do
23
+ tracking_spec = Skee::App::TrackingSpec::Endpoint.get(whitelisted_params)
24
+ present tracking_spec,
25
+ with: Skee::API::Routes::TrackingSpec::ResponseEntity
26
+ end
27
+
28
+ desc 'Generate a full Tracking Spec.'
29
+ params do
30
+ requires :id, type: String, desc: 'Tracking Spec ID.'
31
+ end
32
+ get ':id/full_spec' do
33
+ full_spec = Skee::App::TrackingSpec::Endpoint.full_spec(whitelisted_params)
34
+ present full_spec,
35
+ with: Skee::API::Routes::TrackingSpec::SpecResponse
36
+ end
37
+
38
+ desc 'Create a Tracking Spec.'
39
+ params do
40
+ requires :name, type: String, desc: 'Name of the Tracking Spec.'
41
+ optional :version_identifier, type: String, desc: 'Identifier of a Tracking Spec.'
42
+ optional :project_id, type: String, desc: 'Project in which Tracking Spec created.'
43
+ optional :change_request_id, type: String, desc: 'Change request from which Tracking Spec was created.'
44
+ optional :status, type: String, desc: 'Status of a Tracking Spec.'
45
+ optional :event_ids, type: Array[String], desc: 'Array of event IDs.'
46
+ end
47
+ post do
48
+ new_tracking_spec = Skee::App::TrackingSpec::Endpoint.create(whitelisted_params)
49
+ present new_tracking_spec,
50
+ with: Skee::API::Routes::TrackingSpec::ResponseEntity
51
+ end
52
+
53
+ desc 'Update a Tracking Spec.'
54
+ params do
55
+ requires :id, type: String, desc: 'Tracking Spec ID.'
56
+ optional :name, type: String, desc: 'Name of the Tracking Spec.'
57
+ optional :version_identifier, type: String, desc: 'Identifier of a Tracking Spec.'
58
+ optional :project_id, type: String, desc: 'Project in which Tracking Spec created.'
59
+ optional :change_request_id, type: String, desc: 'Change request from which Tracking Spec was created.'
60
+ optional :status, type: String, desc: 'Status of a Tracking Spec.'
61
+ optional :event_ids, type: Array[String], desc: 'Array of event IDs.'
62
+ end
63
+ post ':id' do
64
+ updated_tracking_spec = Skee::App::TrackingSpec::Endpoint.update(whitelisted_params)
65
+ present updated_tracking_spec,
66
+ with: Skee::API::Routes::TrackingSpec::ResponseEntity
67
+ end
68
+
69
+ desc 'Delete a Tracking Spec.'
70
+ params do
71
+ requires :id, type: String, desc: 'Tracking Spec ID.'
72
+ end
73
+ delete ':id' do
74
+ Skee::App::TrackingSpec::Endpoint.delete(whitelisted_params)
75
+ status 200
76
+ end
77
+
78
+ desc 'Expand a Tracking Spec'
79
+ params do
80
+ requires :id, type: String, desc: 'Tracking Spec ID.'
81
+ requires :change_request_id, type: String, desc: 'Change request from which Tracking Spec was created.'
82
+ end
83
+ get ':id/expand' do
84
+ Skee::App::TrackingSpec::Endpoint.expand(whitelisted_params)
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,17 @@
1
+ module Skee
2
+ module API
3
+ module Routes
4
+ module TrackingSpec
5
+ class ResponseEntity < Grape::Entity
6
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a Tracking Spec.' }
7
+ expose :version_identifier, documentation: { type: 'String', desc: 'Identifier of a Tracking Spec.' }
8
+ expose :project_id, documentation: { type: 'String', desc: 'Project in which Tracking Spec created.' }
9
+ expose :change_request_id, documentation: { type: 'String', desc: 'Change request from which Tracking Spec was created.' }
10
+ expose :status, documentation: { type: 'String', desc: 'Status of a Tracking Spec.' }
11
+ expose :name, documentation: { type: 'String', desc: 'Name of the Tracking Spec.' }
12
+ expose :event_ids, documentation: { type: 'String', desc: 'Dictionary with list of IDs of all entities comprising the tracking spec.' }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../event/response_entity'
2
+ require_relative '../trackable_object/response_entity'
3
+ require_relative '../property/response_entity'
4
+
5
+ module Skee
6
+ module API
7
+ module Routes
8
+ module TrackingSpec
9
+ class SpecResponse < Grape::Entity
10
+ expose :id, documentation: { type: 'String', desc: 'Unique ID of a tracking spec.' }
11
+ expose :version_identifier, documentation: { type: 'String', desc: 'Identifier of a Tracking Spec.' }
12
+ expose :name, documentation: { type: 'String', desc: 'Name of the tracking spec.' }
13
+ expose :change_request_id, documentation: { type: 'String', desc: 'Change request ID for the tracking spec.' }
14
+ expose :events, with: Skee::API::Routes::Event::ResponseEntity
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end