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,61 +0,0 @@
1
- require_relative '../../app/change_request/service'
2
- module Skee
3
- module App
4
- module VersionedEntity
5
- class Validator
6
- def initialize(params, entity_type)
7
- @params = params
8
- @entity_type = entity_type
9
- end
10
-
11
- ERRORS = Utils::Errors
12
-
13
- def validate_create_params
14
- validate_change_request_status
15
- validate_uniqueness_by_name
16
- end
17
-
18
- def validate_update_params
19
- validate_versioned_entity_present
20
- validate_change_request_status
21
- validate_uniqueness_by_name
22
- end
23
-
24
- def validate_remove_params
25
- validate_versioned_entity_present
26
- validate_change_request_status
27
- validate_uniqueness_by_name
28
- end
29
-
30
- private
31
-
32
- def validate_versioned_entity_present
33
- entity_instance = Skee::App::DB_MAPPING_ENTITY[@entity_type].find(@params[:id])
34
- raise ERRORS::RecordNotFoundException.new('Resource not found') unless entity_instance
35
- end
36
-
37
- def validate_change_request_status
38
- raise ERRORS::RecordNotFoundException.new('Invalid change request') unless change_request
39
- raise ERRORS::NotAllowedToUpdate.new('Invalid change request') if change_request.status != 'open'
40
- end
41
-
42
- def validate_uniqueness_by_name
43
- # todo: fix this when we know structure of tracking spec
44
- # tracking_spec = Skee::App::TrackingSpec::Service.get(id: change_request.source_tracking_spec_id)
45
- # existing_entity_ids = tracking_spec.entity_set[@entity_type]
46
- # new_entity_change_set = change_request.change_set[@entity_type]
47
- # return unless new_entity_change_set
48
- # new_entity_ids = new_entity_change_set.values.flatten
49
- # non_unique_name = Skee::App::DB_MAPPING_ENTITY[@entity_type].find_all(ids: (new_entity_ids + existing_entity_ids)).any? do |entity|
50
- # entity.name == @params[:name]
51
- # end
52
- # raise ERRORS::UniquenessViolationException.new('Invalid name') if non_unique_name
53
- end
54
-
55
- def change_request
56
- @change_request ||= Skee::App::ChangeRequest::Service.get(id: @params[:change_request_id])
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,32 +0,0 @@
1
- require_relative '../../app/change_request/service'
2
- module Skee
3
- module App
4
- module VersionedEntitySnapshot
5
- class Entity
6
- def initialize(entity)
7
- @entity = entity
8
- @db = Skee::App::DB_MAPPING_ENTITY_SNAPSHOT[@entity]
9
- end
10
-
11
- def list(ids:)
12
- return @db.all if ids.empty?
13
- @db.find_all(ids: ids)
14
- end
15
-
16
- def get(params)
17
- # add validator, to reject if nil, or does not exist.
18
- @db.find(params[:id])
19
- end
20
-
21
- def create(params)
22
- @db.create(params)
23
- end
24
-
25
- def update(update_params)
26
- snapshot = @db.find(update_params[:id])
27
- snapshot.update(update_params)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,9 +0,0 @@
1
- require 'rubygems'
2
- require 'grape'
3
- require 'grape-entity'
4
- require 'pry'
5
- require 'dotenv'
6
-
7
- require_relative '../app/app'
8
- require_relative '../api/api'
9
-
@@ -1,3 +0,0 @@
1
- require_relative './config/boot'
2
-
3
- run Skee::API::API
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class ChangeRequest < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,86 +0,0 @@
1
- require 'ostruct'
2
- module Skee
3
- module DB
4
- module Proto
5
- module Common
6
- class Doc
7
- def initialize(doc)
8
- @doc = doc
9
- generate_attribute_readers(doc)
10
- end
11
-
12
- def generate_attribute_readers(doc)
13
- doc.to_h.each do |key, value|
14
- define_singleton_method(key) { value }
15
- end
16
- end
17
-
18
- def to_h
19
- @doc.to_h
20
- end
21
-
22
- def self.all
23
- @all_docs
24
- end
25
-
26
- def self.find(id)
27
- all_docs = all
28
- doc = all_docs.find do |doc|
29
- doc.id == id
30
- end
31
- self.new(doc) if doc
32
- end
33
-
34
- def self.find_all(ids:)
35
- all_docs = all
36
- docs_array = all_docs.filter do |doc|
37
- ids.include? doc.id
38
- end
39
- docs_array.map do |doc|
40
- self.new(doc)
41
- end
42
- end
43
-
44
- def self.where(fields)
45
- all_docs = all
46
- docs_array = all_docs.filter do |doc|
47
- fields.all? do |key, value|
48
- doc[key] == value
49
- end
50
- end
51
- docs_array.map do |doc|
52
- self.new(doc)
53
- end
54
- end
55
-
56
- def self.create(fields)
57
- new_id = rand(0..2**32)
58
- new_doc = OpenStruct.new(
59
- id: new_id
60
- )
61
- fields.each do |key, value|
62
- new_doc[key] = value
63
- end
64
- all << new_doc
65
- find(new_doc.id)
66
- end
67
-
68
- def update(fields)
69
- fields.each do |key, value|
70
- @doc[key] = value
71
- end
72
- @doc
73
- end
74
-
75
- def delete
76
- self.class.all.delete(@doc)
77
- end
78
-
79
- def self.delete_all
80
- @all_docs = []
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class Event < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class EventSnapshot < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,21 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class Project < Proto::Common::Doc
6
- @all_docs = [
7
- OpenStruct.new(
8
- id: 'proj123',
9
- name: 'project 1 lah',
10
- description: 'project desc 1 leh'
11
- ),
12
- OpenStruct.new(
13
- id: 'proj456',
14
- name: 'project 2 lah',
15
- description: 'project desc 2 leh'
16
- )
17
- ]
18
- end
19
- end
20
- end
21
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class Property < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class PropertySnapshot < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class TrackableObject < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class TrackableObjectSnapshot < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require_relative './common/doc'
2
- module Skee
3
- module DB
4
- module Proto
5
- class TrackingSpec < Proto::Common::Doc
6
- @all_docs = []
7
- end
8
- end
9
- end
10
- end
@@ -1,186 +0,0 @@
1
- require_relative '../../test_helper'
2
- require_relative 'versioned_entity_helper'
3
- module Skee
4
- module API
5
- module Test
6
- module Functional
7
- class EventTest < MiniTest::Test
8
- include Rack::Test::Methods
9
- include Skee::API::Test::Functional::VersionedEntityHelper
10
-
11
- def app
12
- Skee::API::Routes::Event::API
13
- end
14
-
15
- def initialize_db
16
- @properties = Skee::Test::Fixtures::Properties.all
17
- @properties.each { |entity| Skee::DB::Proto::Property.create(entity) }
18
- @property_snapshots = Skee::Test::Fixtures::PropertySnapshots.all
19
- @property_snapshots.each { |entity| Skee::DB::Proto::PropertySnapshot.create(entity) }
20
- @trackable_objects = Skee::Test::Fixtures::TrackableObjects.all
21
- @trackable_objects.each { |entity| Skee::DB::Proto::TrackableObject.create(entity) }
22
- @trackable_object_snapshots = Skee::Test::Fixtures::TrackableObjectSnapshots.all
23
- @trackable_object_snapshots.each { |entity| Skee::DB::Proto::TrackableObjectSnapshot.create(entity) }
24
- @change_requests = Skee::Test::Fixtures::ChangeRequests.all
25
- @change_requests.each { |entity| Skee::DB::Proto::ChangeRequest.create(entity) }
26
- @tracking_specs = Skee::Test::Fixtures::TrackingSpecs.all
27
- @tracking_specs.each { |entity| Skee::DB::Proto::TrackingSpec.create(entity) }
28
- @events = Skee::Test::Fixtures::Events.all
29
- @events.each { |entity| Skee::DB::Proto::Event.create(entity) }
30
- @event_snapshots = Skee::Test::Fixtures::EventSnapshots.all
31
- @event_snapshots.each { |entity| Skee::DB::Proto::EventSnapshot.create(entity) }
32
- end
33
-
34
- def clear_db
35
- Skee::DB::Proto::Property.delete_all
36
- Skee::DB::Proto::TrackableObject.delete_all
37
- Skee::DB::Proto::ChangeRequest.delete_all
38
- Skee::DB::Proto::TrackingSpec.delete_all
39
- Skee::DB::Proto::Event.delete_all
40
- end
41
-
42
- def setup
43
- clear_db
44
- initialize_db
45
- @entity_type = :event
46
- @entity_path = 'events'
47
- @entity_fixture = Skee::Test::Fixtures::Events
48
- end
49
-
50
- # def test_get_all_events
51
- # get_all_entities
52
- # end
53
-
54
- def test_retrieve_event
55
- id = '4'
56
- retrieve_entity(id)
57
- end
58
-
59
- def test_retrieve_event_with_change_request
60
- id = '4'
61
- snapshot_id = '5'
62
- params = {'change_request_id' => '1'}
63
- retrieved_entity = retrieve_entity(id, params)
64
- assert_equal(
65
- snapshot_id,
66
- retrieved_entity['snapshot_id']
67
- )
68
- end
69
-
70
- def new_event_params
71
- {
72
- 'change_request_id' => '1',
73
- 'name' => 'Launched App',
74
- 'description' => 'Description of event A.',
75
- 'payload' => [
76
- {
77
- 'key' => 'secondary_user',
78
- 'reference_entity_type' => 'trackable_object',
79
- 'reference_entity_id' => '1',
80
- 'is_array' => false,
81
- 'is_primary' => true,
82
- 'selected_property_ids' => ['1'],
83
- },
84
- {
85
- 'key' => 'created_timestamp',
86
- 'reference_entity_type' => 'property',
87
- 'reference_entity_id' => '2',
88
- 'is_array' => false,
89
- 'is_flatten' => false,
90
- 'is_primary' => nil,
91
- 'selected_property_ids' => ['2']
92
- },
93
- ]
94
- }
95
- end
96
-
97
- def update_event_params
98
- {
99
- 'change_request_id' => '1',
100
- 'name' => 'Exited App',
101
- 'description' => 'Description of updated event A.',
102
- }
103
- end
104
-
105
- def update_event_payload_params
106
- {
107
- 'change_request_id' => '1',
108
- 'payload' => [
109
- {
110
- 'key' => 'primary_user',
111
- 'reference_entity_type' => 'trackable_object',
112
- 'reference_entity_id' => '1',
113
- 'is_array' => false,
114
- 'is_primary' => false,
115
- 'selected_property_ids' => ['1'],
116
- },
117
- ]
118
- }
119
- end
120
-
121
- def add_event_payload_params
122
- {
123
- 'change_request_id' => '1',
124
- 'payload' => [
125
- {
126
- 'key' => 'favorite_products',
127
- 'reference_entity_type' => 'trackable_object',
128
- 'reference_entity_id' => '2',
129
- 'is_array' => true,
130
- 'is_primary' => false,
131
- 'selected_property_ids' => ['4'],
132
- },
133
- ]
134
- }
135
- end
136
-
137
- def test_create_event_invalid_change_request
138
- params = new_event_params.merge('change_request_id' => -999)
139
- create_entity_invalid_change_request(params)
140
- end
141
-
142
- def test_create_event_valid
143
- create_entity_valid_name(new_event_params)
144
- end
145
-
146
- def test_update_event_invalid_change_request
147
- params = update_event_params.merge('change_request_id' => -999)
148
- update_entity_invalid_change_request('1', params)
149
- end
150
-
151
- def test_add_trackable_object_to_payload
152
- id = '1'
153
- post "/api/events/#{id}/add_payload", add_event_payload_params
154
- updated_event = JSON.parse(last_response.body)
155
- change_request = Skee::App::DB_MAPPING_ENTITY[:change_request].find('1')
156
- assert_equal(updated_event['snapshot_id'], change_request.change_set[:event][id].values.first)
157
- updated_payload = updated_event['payload'].find { |payload| payload['key'] == 'favorite_products'}
158
- assert_equal(4, updated_event['payload'].count)
159
- assert_equal('2', updated_payload['reference_entity_id'])
160
- end
161
-
162
- def test_update_trackable_object_in_payload
163
- id = '1'
164
- post "/api/events/#{id}/update_payload", update_event_payload_params
165
- updated_event = JSON.parse(last_response.body)
166
- change_request = Skee::App::DB_MAPPING_ENTITY[:change_request].find('1')
167
- assert_equal(updated_event['snapshot_id'], change_request.change_set[:event][id].values.first)
168
- updated_payload = updated_event['payload'].find { |payload| payload['key'] == 'primary_user'}
169
- assert_equal(3, updated_event['payload'].count)
170
- assert_equal('1', updated_payload['reference_entity_id'])
171
- end
172
-
173
- def test_remove_payload_identifier_from_payload
174
- id = '1'
175
- remove_payload_params = { 'change_request_id' => '1', 'payload_keys' => ['primary_user'] }
176
- post "/api/events/#{id}/remove_payload", remove_payload_params
177
- updated_event = JSON.parse(last_response.body)
178
- change_request = Skee::App::DB_MAPPING_ENTITY[:change_request].find('1')
179
- assert_equal(updated_event['snapshot_id'], change_request.change_set[:event][id].values.first)
180
- assert_equal(2, updated_event['payload'].count)
181
- end
182
- end
183
- end
184
- end
185
- end
186
- end