flutter 0.1.0.pre.2

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 (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,22 @@
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
@@ -0,0 +1,12 @@
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
@@ -0,0 +1,30 @@
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
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,25 @@
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
@@ -0,0 +1,79 @@
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
@@ -0,0 +1,78 @@
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
@@ -0,0 +1,68 @@
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
@@ -0,0 +1,108 @@
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
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,42 @@
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
@@ -0,0 +1,39 @@
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
@@ -0,0 +1,56 @@
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
@@ -0,0 +1,38 @@
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