flutter 0.1.0.pre.2 → 0.1.0.pre.3

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -1
  3. data/README.md +3 -1
  4. data/lib/flutter/persistence.rb +51 -5
  5. data/lib/flutter/tracker.rb +47 -5
  6. data/lib/flutter/version.rb +1 -1
  7. metadata +16 -91
  8. data/integration_tests/minitest/grape_app/.gitignore +0 -67
  9. data/integration_tests/minitest/grape_app/.ruby-version +0 -1
  10. data/integration_tests/minitest/grape_app/Gemfile +0 -17
  11. data/integration_tests/minitest/grape_app/Gemfile.lock +0 -89
  12. data/integration_tests/minitest/grape_app/README.md +0 -2
  13. data/integration_tests/minitest/grape_app/Rakefile +0 -9
  14. data/integration_tests/minitest/grape_app/api/api.rb +0 -34
  15. data/integration_tests/minitest/grape_app/api/routes/api_helpers.rb +0 -12
  16. data/integration_tests/minitest/grape_app/api/routes/change_request/api.rb +0 -69
  17. data/integration_tests/minitest/grape_app/api/routes/change_request/response_entity.rb +0 -18
  18. data/integration_tests/minitest/grape_app/api/routes/event/api.rb +0 -121
  19. data/integration_tests/minitest/grape_app/api/routes/event/response_entity.rb +0 -41
  20. data/integration_tests/minitest/grape_app/api/routes/project/api.rb +0 -59
  21. data/integration_tests/minitest/grape_app/api/routes/project/response_entity.rb +0 -13
  22. data/integration_tests/minitest/grape_app/api/routes/property/api.rb +0 -78
  23. data/integration_tests/minitest/grape_app/api/routes/property/response_entity.rb +0 -31
  24. data/integration_tests/minitest/grape_app/api/routes/trackable_object/api.rb +0 -64
  25. data/integration_tests/minitest/grape_app/api/routes/trackable_object/response_entity.rb +0 -24
  26. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/api.rb +0 -88
  27. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/response_entity.rb +0 -17
  28. data/integration_tests/minitest/grape_app/api/routes/tracking_spec/spec_response.rb +0 -19
  29. data/integration_tests/minitest/grape_app/api/routes/user/api.rb +0 -22
  30. data/integration_tests/minitest/grape_app/api/routes/user/response_entity.rb +0 -12
  31. data/integration_tests/minitest/grape_app/app/app.rb +0 -30
  32. data/integration_tests/minitest/grape_app/app/change_request/endpoint.rb +0 -24
  33. data/integration_tests/minitest/grape_app/app/change_request/generate_system_changes.rb +0 -25
  34. data/integration_tests/minitest/grape_app/app/change_request/service.rb +0 -79
  35. data/integration_tests/minitest/grape_app/app/event/endpoint.rb +0 -78
  36. data/integration_tests/minitest/grape_app/app/event/service.rb +0 -68
  37. data/integration_tests/minitest/grape_app/app/event/validator.rb +0 -108
  38. data/integration_tests/minitest/grape_app/app/project/endpoint.rb +0 -24
  39. data/integration_tests/minitest/grape_app/app/project/service.rb +0 -42
  40. data/integration_tests/minitest/grape_app/app/property/endpoint.rb +0 -39
  41. data/integration_tests/minitest/grape_app/app/property/service.rb +0 -56
  42. data/integration_tests/minitest/grape_app/app/trackable_object/endpoint.rb +0 -38
  43. data/integration_tests/minitest/grape_app/app/trackable_object/service.rb +0 -49
  44. data/integration_tests/minitest/grape_app/app/trackable_object/validator.rb +0 -40
  45. data/integration_tests/minitest/grape_app/app/tracking_spec/endpoint.rb +0 -58
  46. data/integration_tests/minitest/grape_app/app/tracking_spec/expand_tracking_spec_events.rb +0 -91
  47. data/integration_tests/minitest/grape_app/app/tracking_spec/service.rb +0 -51
  48. data/integration_tests/minitest/grape_app/app/tracking_spec/validator.rb +0 -61
  49. data/integration_tests/minitest/grape_app/app/utils/errors/api_exceptions.rb +0 -10
  50. data/integration_tests/minitest/grape_app/app/utils/errors/service_exceptions.rb +0 -12
  51. data/integration_tests/minitest/grape_app/app/versioned_entity/entity.rb +0 -110
  52. data/integration_tests/minitest/grape_app/app/versioned_entity/service.rb +0 -47
  53. data/integration_tests/minitest/grape_app/app/versioned_entity/validator.rb +0 -61
  54. data/integration_tests/minitest/grape_app/app/versioned_entity_snapshot/entity.rb +0 -32
  55. data/integration_tests/minitest/grape_app/config/boot.rb +0 -9
  56. data/integration_tests/minitest/grape_app/config.ru +0 -3
  57. data/integration_tests/minitest/grape_app/db/proto/change_request.rb +0 -10
  58. data/integration_tests/minitest/grape_app/db/proto/common/doc.rb +0 -86
  59. data/integration_tests/minitest/grape_app/db/proto/event.rb +0 -10
  60. data/integration_tests/minitest/grape_app/db/proto/event_snapshot.rb +0 -10
  61. data/integration_tests/minitest/grape_app/db/proto/project.rb +0 -21
  62. data/integration_tests/minitest/grape_app/db/proto/property.rb +0 -10
  63. data/integration_tests/minitest/grape_app/db/proto/property_snapshot.rb +0 -10
  64. data/integration_tests/minitest/grape_app/db/proto/trackable_object.rb +0 -10
  65. data/integration_tests/minitest/grape_app/db/proto/trackable_object_snapshot.rb +0 -10
  66. data/integration_tests/minitest/grape_app/db/proto/tracking_spec.rb +0 -10
  67. data/integration_tests/minitest/grape_app/test/api/functional/event_test.rb +0 -186
  68. data/integration_tests/minitest/grape_app/test/api/functional/property_test.rb +0 -197
  69. data/integration_tests/minitest/grape_app/test/api/functional/trackable_object_test.rb +0 -134
  70. data/integration_tests/minitest/grape_app/test/api/functional/tracking_spec_test.rb +0 -56
  71. data/integration_tests/minitest/grape_app/test/api/functional/user_test.rb +0 -24
  72. data/integration_tests/minitest/grape_app/test/api/functional/versioned_entity_helper.rb +0 -157
  73. data/integration_tests/minitest/grape_app/test/fixtures/change_requests.rb +0 -83
  74. data/integration_tests/minitest/grape_app/test/fixtures/event_snapshots.rb +0 -105
  75. data/integration_tests/minitest/grape_app/test/fixtures/events.rb +0 -58
  76. data/integration_tests/minitest/grape_app/test/fixtures/properties.rb +0 -66
  77. data/integration_tests/minitest/grape_app/test/fixtures/property_snapshots.rb +0 -124
  78. data/integration_tests/minitest/grape_app/test/fixtures/sample_tracking_spec.json +0 -125
  79. data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects.rb +0 -58
  80. data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects_snapshots.rb +0 -61
  81. data/integration_tests/minitest/grape_app/test/fixtures/tracking_specs.rb +0 -22
  82. data/integration_tests/minitest/grape_app/test/test_helper.rb +0 -15
@@ -1,24 +0,0 @@
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
@@ -1,88 +0,0 @@
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
@@ -1,17 +0,0 @@
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
@@ -1,19 +0,0 @@
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
@@ -1,22 +0,0 @@
1
- require_relative '../api_helpers'
2
- require_relative './response_entity'
3
- require 'ostruct'
4
-
5
- module Skee::API::Routes::User
6
- class API < Grape::API
7
- helpers Skee::API::Routes::APIHelpers
8
-
9
- resource :users do
10
- desc 'Authenticate a user'
11
- params do
12
- requires :username, type: String, desc: 'username of the user'
13
- requires :password, type: String, desc: 'password of the user'
14
- end
15
- post ':authenticate' do
16
- response = OpenStruct.new({ username: params[:username], access_token: '123' })
17
- present response,
18
- with: Skee::API::Routes::User::ResponseEntity
19
- end
20
- end
21
- end
22
- end
@@ -1,12 +0,0 @@
1
- module Skee
2
- module API
3
- module Routes
4
- module User
5
- class ResponseEntity < Grape::Entity
6
- expose :username, documentation: {type: 'String', desc: 'Username of the user'}
7
- expose :access_token, documentation: {type: 'String', desc: 'AccessToken for the user'}
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,30 +0,0 @@
1
- require_relative './utils/errors/api_exceptions'
2
- require_relative './utils/errors/service_exceptions'
3
-
4
- require_relative '../db/proto/project'
5
- require_relative '../db/proto/change_request'
6
-
7
- require_relative '../db/proto/event'
8
- require_relative '../db/proto/event_snapshot'
9
- require_relative '../db/proto/trackable_object'
10
- require_relative '../db/proto/trackable_object_snapshot'
11
- require_relative '../db/proto/property'
12
- require_relative '../db/proto/property_snapshot'
13
-
14
- module Skee
15
- module App
16
- DB = Skee::DB::Proto
17
- DB_MAPPING_ENTITY = {
18
- change_request: Skee::DB::Proto::ChangeRequest,
19
- event: Skee::DB::Proto::Event,
20
- project: Skee::DB::Proto::Project,
21
- trackable_object: Skee::DB::Proto::TrackableObject,
22
- property: Skee::DB::Proto::Property,
23
- }.freeze
24
- DB_MAPPING_ENTITY_SNAPSHOT = {
25
- event: Skee::DB::Proto::EventSnapshot,
26
- trackable_object: Skee::DB::Proto::TrackableObjectSnapshot,
27
- property: Skee::DB::Proto::PropertySnapshot,
28
- }.freeze
29
- end
30
- end
@@ -1,24 +0,0 @@
1
- require_relative './service'
2
- module Skee::App::ChangeRequest
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,25 +0,0 @@
1
- module Skee
2
- module App
3
- module ChangeRequest
4
- class GenerateSystemChanges
5
- def initialize(change_request)
6
- @change_request = change_request
7
- end
8
-
9
- def call
10
-
11
- end
12
-
13
- private
14
-
15
- def create_new_change
16
-
17
- end
18
-
19
- def update_existing_change
20
-
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,79 +0,0 @@
1
- require_relative '../../db/proto/change_request'
2
- module Skee
3
- module App
4
- module ChangeRequest
5
- class Service
6
- DB = Skee::DB::Proto
7
-
8
- def self.list
9
- DB::ChangeRequest.all
10
- end
11
-
12
- def self.get(params)
13
- DB::ChangeRequest.find(params[:id])
14
- end
15
-
16
- def self.create(params)
17
- # add any validation or filtering logic here to
18
- # derive fields from params
19
- fields = {
20
- identifier: params[:identifier],
21
- project_id: params[:project_id],
22
- base_tracking_spec_id: params[:base_tracking_spec_id],
23
- status: params[:status],
24
- name: params[:name],
25
- description: params[:description],
26
- change_set: params[:change_set]
27
- }
28
- DB::ChangeRequest.create(fields)
29
- end
30
-
31
- def self.update(params)
32
- # send valid fields excluding id
33
- fields = {
34
- identifier: params[:identifier],
35
- project_id: params[:project_id],
36
- base_tracking_spec_id: params[:base_tracking_spec_id],
37
- status: params[:status],
38
- name: params[:name],
39
- description: params[:description],
40
- change_set: params[:change_set]
41
- }.compact
42
- change_request = DB::ChangeRequest.find(params[:id])
43
- change_request.update(fields)
44
- end
45
-
46
- def self.update_change_set(params)
47
- change_request = DB::ChangeRequest.find(params[:id])
48
- existing_change_set = change_request.change_set
49
- params[:changes].each do |entity, change_hash|
50
- existing_change_set[entity] ||= {}
51
- change_hash.each do |prev_id, new_id|
52
- if prev_id
53
- existing_change_set[entity][prev_id] = new_id
54
- else
55
- existing_change_set[entity][nil] ||= []
56
- existing_change_set[entity][nil] << new_id
57
- end
58
- end
59
- end
60
- end
61
-
62
- def self.remove_from_change_set(id:, entity:, entity_id:)
63
- change_request = DB::ChangeRequest.find(id)
64
- existing_change_set = change_request.change_set
65
- if existing_change_set[entity].values.include?(entity_id)
66
- existing_change_set[entity].delete_if {|_,value| value == entity_id}
67
- elsif existing_change_set[entity][nil].include?(entity_id)
68
- existing_change_set[entity][nil].delete(entity_id)
69
- end
70
- end
71
-
72
- def self.delete(params)
73
- change_request = DB::ChangeRequest.find(params[:id])
74
- change_request.delete
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -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