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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -1
- data/README.md +3 -1
- data/lib/flutter/persistence.rb +51 -5
- data/lib/flutter/tracker.rb +47 -5
- data/lib/flutter/version.rb +1 -1
- metadata +16 -91
- data/integration_tests/minitest/grape_app/.gitignore +0 -67
- data/integration_tests/minitest/grape_app/.ruby-version +0 -1
- data/integration_tests/minitest/grape_app/Gemfile +0 -17
- data/integration_tests/minitest/grape_app/Gemfile.lock +0 -89
- data/integration_tests/minitest/grape_app/README.md +0 -2
- data/integration_tests/minitest/grape_app/Rakefile +0 -9
- data/integration_tests/minitest/grape_app/api/api.rb +0 -34
- data/integration_tests/minitest/grape_app/api/routes/api_helpers.rb +0 -12
- data/integration_tests/minitest/grape_app/api/routes/change_request/api.rb +0 -69
- data/integration_tests/minitest/grape_app/api/routes/change_request/response_entity.rb +0 -18
- data/integration_tests/minitest/grape_app/api/routes/event/api.rb +0 -121
- data/integration_tests/minitest/grape_app/api/routes/event/response_entity.rb +0 -41
- data/integration_tests/minitest/grape_app/api/routes/project/api.rb +0 -59
- data/integration_tests/minitest/grape_app/api/routes/project/response_entity.rb +0 -13
- data/integration_tests/minitest/grape_app/api/routes/property/api.rb +0 -78
- data/integration_tests/minitest/grape_app/api/routes/property/response_entity.rb +0 -31
- data/integration_tests/minitest/grape_app/api/routes/trackable_object/api.rb +0 -64
- data/integration_tests/minitest/grape_app/api/routes/trackable_object/response_entity.rb +0 -24
- data/integration_tests/minitest/grape_app/api/routes/tracking_spec/api.rb +0 -88
- data/integration_tests/minitest/grape_app/api/routes/tracking_spec/response_entity.rb +0 -17
- data/integration_tests/minitest/grape_app/api/routes/tracking_spec/spec_response.rb +0 -19
- data/integration_tests/minitest/grape_app/api/routes/user/api.rb +0 -22
- data/integration_tests/minitest/grape_app/api/routes/user/response_entity.rb +0 -12
- data/integration_tests/minitest/grape_app/app/app.rb +0 -30
- data/integration_tests/minitest/grape_app/app/change_request/endpoint.rb +0 -24
- data/integration_tests/minitest/grape_app/app/change_request/generate_system_changes.rb +0 -25
- data/integration_tests/minitest/grape_app/app/change_request/service.rb +0 -79
- data/integration_tests/minitest/grape_app/app/event/endpoint.rb +0 -78
- data/integration_tests/minitest/grape_app/app/event/service.rb +0 -68
- data/integration_tests/minitest/grape_app/app/event/validator.rb +0 -108
- data/integration_tests/minitest/grape_app/app/project/endpoint.rb +0 -24
- data/integration_tests/minitest/grape_app/app/project/service.rb +0 -42
- data/integration_tests/minitest/grape_app/app/property/endpoint.rb +0 -39
- data/integration_tests/minitest/grape_app/app/property/service.rb +0 -56
- data/integration_tests/minitest/grape_app/app/trackable_object/endpoint.rb +0 -38
- data/integration_tests/minitest/grape_app/app/trackable_object/service.rb +0 -49
- data/integration_tests/minitest/grape_app/app/trackable_object/validator.rb +0 -40
- data/integration_tests/minitest/grape_app/app/tracking_spec/endpoint.rb +0 -58
- data/integration_tests/minitest/grape_app/app/tracking_spec/expand_tracking_spec_events.rb +0 -91
- data/integration_tests/minitest/grape_app/app/tracking_spec/service.rb +0 -51
- data/integration_tests/minitest/grape_app/app/tracking_spec/validator.rb +0 -61
- data/integration_tests/minitest/grape_app/app/utils/errors/api_exceptions.rb +0 -10
- data/integration_tests/minitest/grape_app/app/utils/errors/service_exceptions.rb +0 -12
- data/integration_tests/minitest/grape_app/app/versioned_entity/entity.rb +0 -110
- data/integration_tests/minitest/grape_app/app/versioned_entity/service.rb +0 -47
- data/integration_tests/minitest/grape_app/app/versioned_entity/validator.rb +0 -61
- data/integration_tests/minitest/grape_app/app/versioned_entity_snapshot/entity.rb +0 -32
- data/integration_tests/minitest/grape_app/config/boot.rb +0 -9
- data/integration_tests/minitest/grape_app/config.ru +0 -3
- data/integration_tests/minitest/grape_app/db/proto/change_request.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/common/doc.rb +0 -86
- data/integration_tests/minitest/grape_app/db/proto/event.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/event_snapshot.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/project.rb +0 -21
- data/integration_tests/minitest/grape_app/db/proto/property.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/property_snapshot.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/trackable_object.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/trackable_object_snapshot.rb +0 -10
- data/integration_tests/minitest/grape_app/db/proto/tracking_spec.rb +0 -10
- data/integration_tests/minitest/grape_app/test/api/functional/event_test.rb +0 -186
- data/integration_tests/minitest/grape_app/test/api/functional/property_test.rb +0 -197
- data/integration_tests/minitest/grape_app/test/api/functional/trackable_object_test.rb +0 -134
- data/integration_tests/minitest/grape_app/test/api/functional/tracking_spec_test.rb +0 -56
- data/integration_tests/minitest/grape_app/test/api/functional/user_test.rb +0 -24
- data/integration_tests/minitest/grape_app/test/api/functional/versioned_entity_helper.rb +0 -157
- data/integration_tests/minitest/grape_app/test/fixtures/change_requests.rb +0 -83
- data/integration_tests/minitest/grape_app/test/fixtures/event_snapshots.rb +0 -105
- data/integration_tests/minitest/grape_app/test/fixtures/events.rb +0 -58
- data/integration_tests/minitest/grape_app/test/fixtures/properties.rb +0 -66
- data/integration_tests/minitest/grape_app/test/fixtures/property_snapshots.rb +0 -124
- data/integration_tests/minitest/grape_app/test/fixtures/sample_tracking_spec.json +0 -125
- data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects.rb +0 -58
- data/integration_tests/minitest/grape_app/test/fixtures/trackable_objects_snapshots.rb +0 -61
- data/integration_tests/minitest/grape_app/test/fixtures/tracking_specs.rb +0 -22
- 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
|