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