icalia-sdk-core 0.3.6

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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/lib/icalia-sdk-core.rb +6 -0
  3. data/lib/icalia-sdk-core/version.rb +7 -0
  4. data/lib/icalia/models.rb +34 -0
  5. data/lib/icalia/models/cloud_identity.rb +14 -0
  6. data/lib/icalia/models/code_commit.rb +9 -0
  7. data/lib/icalia/models/code_merge_request.rb +25 -0
  8. data/lib/icalia/models/code_repository.rb +15 -0
  9. data/lib/icalia/models/code_repository_reference.rb +12 -0
  10. data/lib/icalia/models/email_account.rb +10 -0
  11. data/lib/icalia/models/events/authorization_event.rb +9 -0
  12. data/lib/icalia/models/events/code_merge_request_event.rb +13 -0
  13. data/lib/icalia/models/events/code_repository_event.rb +15 -0
  14. data/lib/icalia/models/events/membership_event.rb +11 -0
  15. data/lib/icalia/models/events/organization_event.rb +14 -0
  16. data/lib/icalia/models/membership.rb +9 -0
  17. data/lib/icalia/models/model_base.rb +62 -0
  18. data/lib/icalia/models/model_collection_proxy.rb +13 -0
  19. data/lib/icalia/models/model_proxy.rb +15 -0
  20. data/lib/icalia/models/oauth_access_token.rb +9 -0
  21. data/lib/icalia/models/organization.rb +10 -0
  22. data/lib/icalia/models/person.rb +14 -0
  23. data/lib/icalia/models/resource_action.rb +12 -0
  24. data/lib/icalia/models/resource_identity.rb +15 -0
  25. data/lib/icalia/models/resource_timestamps.rb +11 -0
  26. data/lib/icalia/serialization.rb +76 -0
  27. data/lib/icalia/serialization/deserializable_authorization_event.rb +15 -0
  28. data/lib/icalia/serialization/deserializable_cloud_identity.rb +20 -0
  29. data/lib/icalia/serialization/deserializable_code_check_run.rb +39 -0
  30. data/lib/icalia/serialization/deserializable_code_check_run_event.rb +20 -0
  31. data/lib/icalia/serialization/deserializable_code_check_suite.rb +20 -0
  32. data/lib/icalia/serialization/deserializable_code_commit.rb +16 -0
  33. data/lib/icalia/serialization/deserializable_code_issue.rb +37 -0
  34. data/lib/icalia/serialization/deserializable_code_issue_occurrence.rb +14 -0
  35. data/lib/icalia/serialization/deserializable_code_merge_request.rb +41 -0
  36. data/lib/icalia/serialization/deserializable_code_merge_request_event.rb +17 -0
  37. data/lib/icalia/serialization/deserializable_code_repository.rb +26 -0
  38. data/lib/icalia/serialization/deserializable_code_repository_event.rb +17 -0
  39. data/lib/icalia/serialization/deserializable_code_repository_reference.rb +15 -0
  40. data/lib/icalia/serialization/deserializable_email_account.rb +18 -0
  41. data/lib/icalia/serialization/deserializable_membership.rb +19 -0
  42. data/lib/icalia/serialization/deserializable_membership_event.rb +16 -0
  43. data/lib/icalia/serialization/deserializable_oauth_access_token.rb +31 -0
  44. data/lib/icalia/serialization/deserializable_oauth_application.rb +13 -0
  45. data/lib/icalia/serialization/deserializable_organization.rb +14 -0
  46. data/lib/icalia/serialization/deserializable_organization_event.rb +16 -0
  47. data/lib/icalia/serialization/deserializable_person.rb +26 -0
  48. data/lib/icalia/serialization/deserializable_property_resource.rb +13 -0
  49. data/lib/icalia/serialization/deserializable_resource.rb +39 -0
  50. data/lib/icalia/serialization/deserializable_resource_action.rb +16 -0
  51. data/lib/icalia/serialization/deserializable_resource_creation_timestamp.rb +11 -0
  52. data/lib/icalia/serialization/deserializable_resource_timestamps.rb +12 -0
  53. data/lib/icalia/serialization/deserializable_user.rb +13 -0
  54. data/lib/icalia/serialization/deserializer.rb +108 -0
  55. metadata +171 -0
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ #= DeserializableOrganizationEvent
5
+ #
6
+ # This class is responsible for converting a JSONAPI.org representation of an
7
+ # Icalia Event's `OrganizationEvent` object
8
+ class DeserializableOrganizationEvent < DeserializableResource
9
+ include DeserializableResourceAction
10
+ include DeserializableResourceCreationTimestamp
11
+
12
+ has_one :organization do |_rel, id, type|
13
+ Hash[organization: get_stand_in(id: id, type: classify_type(type))]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ #= DeserializablePerson
5
+ #
6
+ # This class is responsible for converting a JSONAPI.org representation of an
7
+ # Icalia Event's `Person` object
8
+ class DeserializablePerson < DeserializableResource
9
+ include DeserializableResourceTimestamps
10
+
11
+ attribute(:'full-name') { |value| Hash[full_name: value] }
12
+ attribute(:'given-name') { |value| Hash[given_name: value] }
13
+ attribute(:'family-name') { |value| Hash[family_name: value] }
14
+ attribute(:'gender-type') { |value| Hash[gender_type: value] }
15
+ attribute(:'custom-gender') { |value| Hash[custom_gender: value] }
16
+ attribute(:'date-of-birth') { |value| Hash[date_of_birth: value] }
17
+
18
+ has_many(:'email-accounts') do |rel, _ids, _types|
19
+ Hash[email_accounts: get_stand_ins(rel)]
20
+ end
21
+
22
+ has_many(:'cloud-identities') do |rel, _ids, _types|
23
+ Hash[cloud_identities: get_stand_ins(rel)]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ module DeserializablePropertyResource
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_one :owner do |_rel, id, type|
9
+ Hash[owner: get_stand_in(id: id, type: classify_type(type))]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ class DeserializableResource < JSONAPI::Deserializable::Resource
5
+
6
+ delegate :classify_type,
7
+ :classify_data,
8
+ :get_stand_in,
9
+ :get_stand_ins,
10
+ to: :class
11
+
12
+ id { |value| Hash[id: value] }
13
+ type { |value| Hash[type: classify_type(value)] }
14
+
15
+ class << self
16
+ def classify_type(type)
17
+ type.underscore.camelize
18
+ end
19
+
20
+ def classify_data(data)
21
+ classify_type data['type']
22
+ end
23
+
24
+ def get_stand_in(id:, type:)
25
+ Icalia::ModelProxy.new id: id, type: type
26
+ end
27
+
28
+ def get_stand_ins(rel)
29
+ if rel['data'].nil?
30
+ Icalia::ModelCollectionProxy.new rel['links']
31
+ else
32
+ rel['data'].map do |data|
33
+ get_stand_in id: data['id'], type: classify_data(data)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ module DeserializableResourceAction
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attribute(:action) { |value| Hash[action: value] }
9
+ attribute(:timestamp) { |value| Hash[timestamp: Time.parse(value)] }
10
+
11
+ has_one :actor do |_rel, id, type|
12
+ Hash[actor: get_stand_in(id: id, type: classify_type(type))]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ module DeserializableResourceCreationTimestamp
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attribute(:'created-at') { |value| Hash[created_at: Time.parse(value)] }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ module DeserializableResourceTimestamps
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ include DeserializableResourceCreationTimestamp
9
+ attribute(:'updated-at') { |value| Hash[updated_at: Time.parse(value)] }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Icalia
4
+ #= DeserializableUser
5
+ #
6
+ # This class is responsible for converting a JSONAPI.org representation of an
7
+ # Icalia Event's `User` object
8
+ class DeserializableUser < DeserializableResource
9
+ include DeserializableResourceTimestamps
10
+
11
+ attributes :email
12
+ end
13
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/inflector'
4
+
5
+ module Icalia
6
+ class Deserializer
7
+ attr_reader :data
8
+
9
+ class StandInReplacement
10
+ attr_reader :model, :association, :stand_in, :index
11
+
12
+ def initialize(model:, association:, stand_in:, index: nil)
13
+ @model = model
14
+ @association = association
15
+ @stand_in = stand_in
16
+ @index = index
17
+ end
18
+ end
19
+
20
+ def initialize(jsonapi_data)
21
+ @jsonapi_data = jsonapi_data
22
+ @objects = {}
23
+ @pending_stand_in_replacements = []
24
+ end
25
+
26
+ def perform
27
+ return @data if @data
28
+ deserialize_included
29
+ deserialize_data
30
+ replace_stand_ins
31
+ finalize
32
+ @data
33
+ end
34
+
35
+ def register_stand_in(model:, association:, stand_in:, index: nil)
36
+ @pending_stand_in_replacements << StandInReplacement.new(
37
+ model: model,
38
+ association: association,
39
+ stand_in: stand_in,
40
+ index: index
41
+ )
42
+ end
43
+
44
+ def to_s
45
+ '(...to_s...)'
46
+ end
47
+
48
+ def inspect
49
+ '(...inspect...)'
50
+ end
51
+
52
+ private
53
+
54
+ def replace_stand_ins
55
+ @pending_stand_in_replacements.each do |replacement|
56
+ next unless associated_object = @objects[replacement.stand_in.to_key]
57
+
58
+ model = replacement.model
59
+ index = replacement.index
60
+ variable = "@#{replacement.association}".to_sym
61
+
62
+ if index
63
+ model.instance_variable_get(variable)[index] = associated_object
64
+ else
65
+ model.instance_variable_set(variable, associated_object)
66
+ end
67
+ end
68
+ end
69
+
70
+ def finalize
71
+ # debugger
72
+ end
73
+
74
+ def deserialize_included
75
+ @jsonapi_data.fetch('included', []).each do |object_data|
76
+ if object = deserialize_object_data(object_data)
77
+ add_object_to_index object
78
+ end
79
+ end
80
+ end
81
+
82
+ def add_object_to_index(object)
83
+ @objects[object.to_key] = object
84
+ end
85
+
86
+ def deserialize_data
87
+ root_data = @jsonapi_data.fetch('data')
88
+ if @data = add_object_to_index(deserialize_object_data(root_data))
89
+ add_object_to_index @data
90
+ end
91
+ end
92
+
93
+ def deserialize_object_data(object_data)
94
+ object_class_name = object_data['type'].underscore.classify.gsub(/Oauth/, 'OAuth')
95
+ object_class = "::Icalia::#{object_class_name}".safe_constantize
96
+ return unless object_class
97
+
98
+ deserializer_class = "::Icalia::Deserializable#{object_class_name}".safe_constantize
99
+ return unless deserializer_class
100
+
101
+ object_attributes = deserializer_class
102
+ .call(object_data)
103
+ .merge(serialization_context: self)
104
+
105
+ object_class.new object_attributes
106
+ end
107
+ end
108
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: icalia-sdk-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.6
5
+ platform: ruby
6
+ authors:
7
+ - Roberto Quintanilla
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jsonapi-deserializable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '5.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '5.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.17'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.17'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ description: Official Icalia SDK for Icalia CoreThis gem is part of the Icalia SDK
84
+ for Ruby.
85
+ email:
86
+ - vov@icalialabs.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - lib/icalia-sdk-core.rb
92
+ - lib/icalia-sdk-core/version.rb
93
+ - lib/icalia/models.rb
94
+ - lib/icalia/models/cloud_identity.rb
95
+ - lib/icalia/models/code_commit.rb
96
+ - lib/icalia/models/code_merge_request.rb
97
+ - lib/icalia/models/code_repository.rb
98
+ - lib/icalia/models/code_repository_reference.rb
99
+ - lib/icalia/models/email_account.rb
100
+ - lib/icalia/models/events/authorization_event.rb
101
+ - lib/icalia/models/events/code_merge_request_event.rb
102
+ - lib/icalia/models/events/code_repository_event.rb
103
+ - lib/icalia/models/events/membership_event.rb
104
+ - lib/icalia/models/events/organization_event.rb
105
+ - lib/icalia/models/membership.rb
106
+ - lib/icalia/models/model_base.rb
107
+ - lib/icalia/models/model_collection_proxy.rb
108
+ - lib/icalia/models/model_proxy.rb
109
+ - lib/icalia/models/oauth_access_token.rb
110
+ - lib/icalia/models/organization.rb
111
+ - lib/icalia/models/person.rb
112
+ - lib/icalia/models/resource_action.rb
113
+ - lib/icalia/models/resource_identity.rb
114
+ - lib/icalia/models/resource_timestamps.rb
115
+ - lib/icalia/serialization.rb
116
+ - lib/icalia/serialization/deserializable_authorization_event.rb
117
+ - lib/icalia/serialization/deserializable_cloud_identity.rb
118
+ - lib/icalia/serialization/deserializable_code_check_run.rb
119
+ - lib/icalia/serialization/deserializable_code_check_run_event.rb
120
+ - lib/icalia/serialization/deserializable_code_check_suite.rb
121
+ - lib/icalia/serialization/deserializable_code_commit.rb
122
+ - lib/icalia/serialization/deserializable_code_issue.rb
123
+ - lib/icalia/serialization/deserializable_code_issue_occurrence.rb
124
+ - lib/icalia/serialization/deserializable_code_merge_request.rb
125
+ - lib/icalia/serialization/deserializable_code_merge_request_event.rb
126
+ - lib/icalia/serialization/deserializable_code_repository.rb
127
+ - lib/icalia/serialization/deserializable_code_repository_event.rb
128
+ - lib/icalia/serialization/deserializable_code_repository_reference.rb
129
+ - lib/icalia/serialization/deserializable_email_account.rb
130
+ - lib/icalia/serialization/deserializable_membership.rb
131
+ - lib/icalia/serialization/deserializable_membership_event.rb
132
+ - lib/icalia/serialization/deserializable_oauth_access_token.rb
133
+ - lib/icalia/serialization/deserializable_oauth_application.rb
134
+ - lib/icalia/serialization/deserializable_organization.rb
135
+ - lib/icalia/serialization/deserializable_organization_event.rb
136
+ - lib/icalia/serialization/deserializable_person.rb
137
+ - lib/icalia/serialization/deserializable_property_resource.rb
138
+ - lib/icalia/serialization/deserializable_resource.rb
139
+ - lib/icalia/serialization/deserializable_resource_action.rb
140
+ - lib/icalia/serialization/deserializable_resource_creation_timestamp.rb
141
+ - lib/icalia/serialization/deserializable_resource_timestamps.rb
142
+ - lib/icalia/serialization/deserializable_user.rb
143
+ - lib/icalia/serialization/deserializer.rb
144
+ homepage: https://github.com/IcaliaLabs/icalia-sdk-ruby
145
+ licenses:
146
+ - MIT
147
+ metadata:
148
+ allowed_push_host: https://rubygems.org
149
+ homepage_uri: https://github.com/IcaliaLabs/icalia-sdk-ruby
150
+ source_code_uri: https://github.com/IcaliaLabs/icalia-sdk-ruby
151
+ changelog_uri: https://github.com/IcaliaLabs/icalia-sdk-ruby
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubygems_version: 3.0.3
168
+ signing_key:
169
+ specification_version: 4
170
+ summary: Icalia SDK for Ruby - Core Library
171
+ test_files: []