devcycle-ruby-server-sdk 1.2.0 → 2.0.1
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/Gemfile +6 -0
- data/devcycle-ruby-server-sdk.gemspec +9 -1
- data/lib/devcycle-ruby-server-sdk/api/devcycle_api.rb +128 -21
- data/lib/devcycle-ruby-server-sdk/api_client.rb +1 -1
- data/lib/devcycle-ruby-server-sdk/configuration.rb +5 -5
- data/lib/devcycle-ruby-server-sdk/localbucketing/bucketed_user_config.rb +21 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/bucketing-lib.release.wasm +0 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/config_manager.rb +97 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/dvc_options.rb +119 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/event_queue.rb +120 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/event_types.rb +8 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/events_payload.rb +23 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/local_bucketing.rb +257 -0
- data/lib/devcycle-ruby-server-sdk/localbucketing/platform_data.rb +29 -0
- data/lib/devcycle-ruby-server-sdk/models/event.rb +6 -6
- data/lib/devcycle-ruby-server-sdk/models/user_data.rb +78 -107
- data/lib/devcycle-ruby-server-sdk/models/variable.rb +0 -13
- data/lib/devcycle-ruby-server-sdk/version.rb +1 -1
- data/lib/devcycle-ruby-server-sdk.rb +9 -0
- data/spec/api/devcycle_api_spec.rb +26 -37
- metadata +77 -25
- data/Gemfile.lock +0 -70
- data/Rakefile +0 -10
- data/docs/DevcycleApi.md +0 -290
- data/docs/ErrorResponse.md +0 -20
- data/docs/Event.md +0 -26
- data/docs/Feature.md +0 -26
- data/docs/UserData.md +0 -48
- data/docs/Variable.md +0 -24
- data/examples/sinatra/Gemfile +0 -8
- data/examples/sinatra/Gemfile.lock +0 -51
- data/examples/sinatra/README.md +0 -14
- data/examples/sinatra/app.rb +0 -48
- data/git_push.sh +0 -57
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'sorbet-runtime'
|
2
|
+
|
3
|
+
module DevCycle
|
4
|
+
class EventsPayload
|
5
|
+
attr_reader :records
|
6
|
+
attr_reader :payloadId
|
7
|
+
attr_reader :eventCount
|
8
|
+
|
9
|
+
def initialize(records, payloadId, eventCount)
|
10
|
+
@records = records
|
11
|
+
@payloadId = payloadId
|
12
|
+
@eventCount = eventCount
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class EventsRecord
|
17
|
+
def initialize(user, events)
|
18
|
+
@user = user
|
19
|
+
@events = events
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,257 @@
|
|
1
|
+
require 'wasmtime'
|
2
|
+
require 'date'
|
3
|
+
require 'bigdecimal'
|
4
|
+
require 'sorbet-runtime'
|
5
|
+
|
6
|
+
require_relative 'dvc_options'
|
7
|
+
require_relative 'platform_data'
|
8
|
+
require_relative 'events_payload'
|
9
|
+
require_relative 'config_manager'
|
10
|
+
|
11
|
+
module DevCycle
|
12
|
+
class LocalBucketing
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
attr_reader :options
|
16
|
+
attr_accessor :initialized
|
17
|
+
|
18
|
+
@@rand = Random.new(seed = Random.new_seed)
|
19
|
+
@@engine = Wasmtime::Engine.new
|
20
|
+
|
21
|
+
@@wasmmodule = Wasmtime::Module.from_file(@@engine, "#{__dir__}/bucketing-lib.release.wasm")
|
22
|
+
@@wasi_ctx = Wasmtime::WasiCtxBuilder.new
|
23
|
+
.inherit_stdout
|
24
|
+
.inherit_stderr
|
25
|
+
.set_argv(ARGV)
|
26
|
+
.set_env(ENV)
|
27
|
+
@@store = Wasmtime::Store.new(@@engine, wasi_ctx: @@wasi_ctx)
|
28
|
+
@@linker = Wasmtime::Linker.new(@@engine, wasi: true)
|
29
|
+
|
30
|
+
@@linker.func_new("env", "Date.now", [], [:f64]) do |_caller|
|
31
|
+
DateTime.now.strftime("%Q").to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
inline_read_asc_string = lambda { |address|
|
35
|
+
raw_bytes = @@memory.read(address - 4, 4).bytes.reverse
|
36
|
+
message_len = 0
|
37
|
+
raw_bytes.each { |j|
|
38
|
+
message_len = (message_len << 8) + (j & 0xFF)
|
39
|
+
}
|
40
|
+
length = message_len
|
41
|
+
result = ""
|
42
|
+
i = 0
|
43
|
+
while i < length
|
44
|
+
result += @@memory.read(address + i, 1)
|
45
|
+
i += 2
|
46
|
+
end
|
47
|
+
result
|
48
|
+
}
|
49
|
+
|
50
|
+
@@stack_tracer = lambda {}
|
51
|
+
|
52
|
+
@@linker.func_new("env", "abort", [:i32, :i32, :i32, :i32], []) do |_caller, messagePtr, filenamePtr, lineNum, colNum|
|
53
|
+
|
54
|
+
exception_message = ""
|
55
|
+
exception_filename = ""
|
56
|
+
|
57
|
+
[messagePtr, filenamePtr].each { |m|
|
58
|
+
result = inline_read_asc_string.call(m)
|
59
|
+
if m == messagePtr
|
60
|
+
exception_message = result
|
61
|
+
else
|
62
|
+
if m == filenamePtr
|
63
|
+
exception_filename = result
|
64
|
+
end
|
65
|
+
end
|
66
|
+
}
|
67
|
+
@@stack_tracer.call("WASM Exception: #{exception_message} - #{exception_filename} #{lineNum}:#{colNum}")
|
68
|
+
end
|
69
|
+
|
70
|
+
@@linker.func_new("env", "console.log", [:i32], []) do |_caller, messagePtr|
|
71
|
+
@logger.info(inline_read_asc_string.call(messagePtr))
|
72
|
+
end
|
73
|
+
|
74
|
+
@@linker.func_new("env", "seed", [], [:f64]) do |_caller|
|
75
|
+
@@rand.rand(1.0) * DateTime.now.strftime("%Q").to_i
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
@@instance = @@linker.instantiate(@@store, @@wasmmodule)
|
80
|
+
@@memory = @@instance.export("memory").to_memory
|
81
|
+
|
82
|
+
sig { params(
|
83
|
+
sdkkey: String,
|
84
|
+
options: DVCOptions,
|
85
|
+
wait_for_init: T::Boolean
|
86
|
+
).void }
|
87
|
+
def initialize(sdkkey, options, wait_for_init)
|
88
|
+
@initialized = false
|
89
|
+
@sdkkey = sdkkey
|
90
|
+
@options = options
|
91
|
+
@logger = options.logger
|
92
|
+
|
93
|
+
platform_data = PlatformData.new('server', VERSION, RUBY_VERSION, nil, 'Ruby', Socket.gethostname)
|
94
|
+
set_platform_data(platform_data)
|
95
|
+
@configmanager = ConfigManager.new(@sdkkey, self, wait_for_init)
|
96
|
+
end
|
97
|
+
|
98
|
+
def close
|
99
|
+
@configmanager.close
|
100
|
+
@configmanager = nil
|
101
|
+
end
|
102
|
+
|
103
|
+
sig { params(user: UserData).returns(BucketedUserConfig) }
|
104
|
+
def generate_bucketed_config(user)
|
105
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
106
|
+
user_addr = malloc_asc_string(user.to_json)
|
107
|
+
@@stack_tracer = lambda { |message| raise message }
|
108
|
+
config_addr = @@instance.invoke("generateBucketedConfigForUser", sdkkey_addr, user_addr)
|
109
|
+
bucketed_config_json = read_asc_string(config_addr)
|
110
|
+
bucketed_config_hash = Oj.load(bucketed_config_json)
|
111
|
+
BucketedUserConfig.new(bucketed_config_hash['project'],
|
112
|
+
bucketed_config_hash['environment'],
|
113
|
+
bucketed_config_hash['features'],
|
114
|
+
bucketed_config_hash['featureVariationMap'],
|
115
|
+
bucketed_config_hash['variableVariationMap'],
|
116
|
+
bucketed_config_hash['variables'],
|
117
|
+
bucketed_config_hash['knownVariableKeys'])
|
118
|
+
end
|
119
|
+
|
120
|
+
sig { returns(T::Array[EventsPayload]) }
|
121
|
+
def flush_event_queue
|
122
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
123
|
+
@@stack_tracer = lambda { |message| raise message }
|
124
|
+
payload_addr = @@instance.invoke("flushEventQueue", sdkkey_addr)
|
125
|
+
raw_json = read_asc_string(payload_addr)
|
126
|
+
raw_payloads = Oj.load(raw_json)
|
127
|
+
|
128
|
+
if raw_payloads == nil
|
129
|
+
return []
|
130
|
+
end
|
131
|
+
raw_payloads.map { |raw_payload| EventsPayload.new(raw_payload["records"], raw_payload["payloadId"], raw_payload["eventCount"]) }
|
132
|
+
end
|
133
|
+
|
134
|
+
sig { returns(Integer) }
|
135
|
+
def check_event_queue_size
|
136
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
137
|
+
@@stack_tracer = lambda { |message| raise message }
|
138
|
+
@@instance.invoke("eventQueueSize", sdkkey_addr)
|
139
|
+
end
|
140
|
+
|
141
|
+
sig { params(payload_id: String).returns(NilClass) }
|
142
|
+
def on_payload_success(payload_id)
|
143
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
144
|
+
payload_addr = malloc_asc_string(payload_id)
|
145
|
+
@@stack_tracer = lambda { |message| raise message }
|
146
|
+
@@instance.invoke("onPayloadSuccess", sdkkey_addr, payload_addr)
|
147
|
+
end
|
148
|
+
|
149
|
+
sig { params(user: UserData, event: Event).returns(NilClass) }
|
150
|
+
def queue_event(user, event)
|
151
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
152
|
+
user_addr = malloc_asc_string(Oj.dump(user))
|
153
|
+
event_addr = malloc_asc_string(Oj.dump(event))
|
154
|
+
@@stack_tracer = lambda { |message| raise message }
|
155
|
+
@@instance.invoke("queueEvent", sdkkey_addr, user_addr, event_addr)
|
156
|
+
end
|
157
|
+
|
158
|
+
sig { params(event: Event, bucketeduser: T.nilable(BucketedUserConfig)).returns(NilClass) }
|
159
|
+
def queue_aggregate_event(event, bucketeduser)
|
160
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
161
|
+
variable_variation_map =
|
162
|
+
if !bucketeduser.nil?
|
163
|
+
bucketeduser.variable_variation_map
|
164
|
+
else
|
165
|
+
{}
|
166
|
+
end
|
167
|
+
varmap_addr = malloc_asc_string(Oj.dump(variable_variation_map))
|
168
|
+
event_addr = malloc_asc_string(Oj.dump(event))
|
169
|
+
@@stack_tracer = lambda { |message| raise message }
|
170
|
+
@@instance.invoke("queueAggregateEvent", sdkkey_addr, event_addr, varmap_addr)
|
171
|
+
end
|
172
|
+
|
173
|
+
sig { params(payload_id: String, retryable: Object).returns(NilClass) }
|
174
|
+
def on_payload_failure(payload_id, retryable)
|
175
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
176
|
+
payload_addr = malloc_asc_string(payload_id)
|
177
|
+
@@stack_tracer = lambda { |message| raise message }
|
178
|
+
@@instance.invoke("onPayloadFailure", sdkkey_addr, payload_addr, retryable ? 1 : 0)
|
179
|
+
end
|
180
|
+
|
181
|
+
sig { params(sdkkey: String, config: String).returns(NilClass) }
|
182
|
+
def store_config(sdkkey, config)
|
183
|
+
sdkkey_addr = malloc_asc_string(sdkkey)
|
184
|
+
config_addr = malloc_asc_string(config)
|
185
|
+
@@stack_tracer = lambda { |message| raise message }
|
186
|
+
@@instance.invoke("setConfigData", sdkkey_addr, config_addr)
|
187
|
+
end
|
188
|
+
|
189
|
+
sig { params(options: EventQueueOptions).returns(NilClass) }
|
190
|
+
def init_event_queue(options)
|
191
|
+
options_json = Oj.dump(options)
|
192
|
+
sdkkey_addr = malloc_asc_string(@sdkkey)
|
193
|
+
options_addr = malloc_asc_string(options_json)
|
194
|
+
@@stack_tracer = lambda { |message| raise message }
|
195
|
+
@@instance.invoke("initEventQueue", sdkkey_addr, options_addr)
|
196
|
+
end
|
197
|
+
|
198
|
+
sig { params(customdata: Hash).returns(NilClass) }
|
199
|
+
def set_client_custom_data(customdata)
|
200
|
+
customdata_json = Oj.dump(customdata)
|
201
|
+
customdata_addr = malloc_asc_string(customdata_json)
|
202
|
+
@@stack_tracer = lambda { |message| raise message }
|
203
|
+
@@instance.invoke("setClientCustomData", customdata_addr)
|
204
|
+
end
|
205
|
+
|
206
|
+
private
|
207
|
+
|
208
|
+
sig { params(platformdata: PlatformData).returns(NilClass) }
|
209
|
+
def set_platform_data(platformdata)
|
210
|
+
platformdata_json = Oj.dump(platformdata)
|
211
|
+
platformdata_addr = malloc_asc_string(platformdata_json)
|
212
|
+
@@stack_tracer = lambda { |message| raise message }
|
213
|
+
@@instance.invoke("setPlatformData", platformdata_addr)
|
214
|
+
end
|
215
|
+
|
216
|
+
# @param [String] string utf8 string to allocate
|
217
|
+
# @return [Integer] address to WASM String
|
218
|
+
sig { params(string: String).returns(Integer) }
|
219
|
+
def malloc_asc_string(string)
|
220
|
+
wasm_object_id = 1
|
221
|
+
@@stack_tracer = lambda { |message| raise message }
|
222
|
+
wasm_new = @@instance.export("__new").to_func
|
223
|
+
utf8_bytes = string.encode("iso-8859-1").force_encoding("utf-8").bytes
|
224
|
+
byte_len = utf8_bytes.length
|
225
|
+
|
226
|
+
start_addr = wasm_new.call(byte_len * 2, wasm_object_id)
|
227
|
+
i = 0
|
228
|
+
while i < byte_len
|
229
|
+
@@stack_tracer = lambda { |message| raise message }
|
230
|
+
@@memory.write(start_addr + (i * 2), [utf8_bytes[i]].pack('U'))
|
231
|
+
i += 1
|
232
|
+
end
|
233
|
+
start_addr
|
234
|
+
end
|
235
|
+
|
236
|
+
# @param [Integer] address start address of string.
|
237
|
+
# @return [String] resulting string
|
238
|
+
sig { params(address: Integer).returns(String) }
|
239
|
+
def read_asc_string(address)
|
240
|
+
@@stack_tracer = lambda { |message| raise message }
|
241
|
+
raw_bytes = @@memory.read(address - 4, 4).bytes.reverse
|
242
|
+
len = 0
|
243
|
+
raw_bytes.each { |j|
|
244
|
+
len = (len << 8) + (j & 0xFF)
|
245
|
+
}
|
246
|
+
result = ""
|
247
|
+
i = 0
|
248
|
+
while i < len
|
249
|
+
@@stack_tracer = lambda { |message| raise message }
|
250
|
+
result += @@memory.read(address + i, 1)
|
251
|
+
i += 2
|
252
|
+
end
|
253
|
+
result
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'socket'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module DevCycle
|
7
|
+
class PlatformData
|
8
|
+
attr_accessor :deviceModel, :platformVersion, :sdkVersion, :sdkType, :platform, :hostname
|
9
|
+
|
10
|
+
def initialize(sdk_type = nil, sdk_version = nil, platform_version = nil, device_model = nil, platform = nil, hostname = nil)
|
11
|
+
@sdkType = sdk_type
|
12
|
+
@sdkVersion = sdk_version
|
13
|
+
@platformVersion = platform_version
|
14
|
+
@deviceModel = device_model
|
15
|
+
@platform = platform
|
16
|
+
@hostname = hostname
|
17
|
+
end
|
18
|
+
|
19
|
+
def default
|
20
|
+
@sdkType = 'server'
|
21
|
+
@sdkVersion = VERSION
|
22
|
+
@platformVersion = RUBY_VERSION
|
23
|
+
@deviceModel = nil
|
24
|
+
@platform = 'Ruby'
|
25
|
+
@hostname = Socket.gethostname
|
26
|
+
self
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -28,7 +28,7 @@ module DevCycle
|
|
28
28
|
attr_accessor :value
|
29
29
|
|
30
30
|
# Extra JSON metadata for event. Contextual to event type
|
31
|
-
attr_accessor :
|
31
|
+
attr_accessor :metaData
|
32
32
|
|
33
33
|
# Attribute mapping from ruby-style variable name to JSON key.
|
34
34
|
def self.attribute_map
|
@@ -37,7 +37,7 @@ module DevCycle
|
|
37
37
|
:'target' => :'target',
|
38
38
|
:'date' => :'date',
|
39
39
|
:'value' => :'value',
|
40
|
-
:'
|
40
|
+
:'metaData' => :'metaData'
|
41
41
|
}
|
42
42
|
end
|
43
43
|
|
@@ -53,7 +53,7 @@ module DevCycle
|
|
53
53
|
:'target' => :'String',
|
54
54
|
:'date' => :'Float',
|
55
55
|
:'value' => :'Float',
|
56
|
-
:'
|
56
|
+
:'metaData' => :'Object'
|
57
57
|
}
|
58
58
|
end
|
59
59
|
|
@@ -94,8 +94,8 @@ module DevCycle
|
|
94
94
|
self.value = attributes[:'value']
|
95
95
|
end
|
96
96
|
|
97
|
-
if attributes.key?(:'
|
98
|
-
self.
|
97
|
+
if attributes.key?(:'metaData')
|
98
|
+
self.metaData = attributes[:'metaData']
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -138,7 +138,7 @@ module DevCycle
|
|
138
138
|
# Calculates hash code according to all attributes.
|
139
139
|
# @return [Integer] Hash code
|
140
140
|
def hash
|
141
|
-
[type, target, date, value,
|
141
|
+
[type, target, date, value, metaData].hash
|
142
142
|
end
|
143
143
|
|
144
144
|
# Builds the object from hash
|
@@ -12,9 +12,14 @@ OpenAPI Generator version: 5.3.0
|
|
12
12
|
|
13
13
|
require 'date'
|
14
14
|
require 'time'
|
15
|
+
require 'oj'
|
15
16
|
|
16
17
|
module DevCycle
|
17
18
|
class UserData
|
19
|
+
|
20
|
+
def to_json
|
21
|
+
Oj.dump(self)
|
22
|
+
end
|
18
23
|
# Unique id to identify the user
|
19
24
|
attr_accessor :user_id
|
20
25
|
|
@@ -31,37 +36,39 @@ module DevCycle
|
|
31
36
|
attr_accessor :country
|
32
37
|
|
33
38
|
# App Version of the running application
|
34
|
-
attr_accessor :
|
39
|
+
attr_accessor :appVersion
|
35
40
|
|
36
41
|
# App Build number of the running application
|
37
|
-
attr_accessor :
|
42
|
+
attr_accessor :appBuild
|
38
43
|
|
39
44
|
# User's custom data to target the user with, data will be logged to DevCycle for use in dashboard.
|
40
|
-
attr_accessor :
|
45
|
+
attr_accessor :customData
|
41
46
|
|
42
47
|
# User's custom data to target the user with, data will not be logged to DevCycle only used for feature bucketing.
|
43
|
-
attr_accessor :
|
48
|
+
attr_accessor :privateCustomData
|
49
|
+
|
50
|
+
# User's device model
|
51
|
+
attr_accessor :deviceModel
|
52
|
+
|
53
|
+
# read-only instance variables
|
44
54
|
|
45
55
|
# Date the user was created, Unix epoch timestamp format
|
46
|
-
|
56
|
+
attr_reader :createdDate
|
47
57
|
|
48
58
|
# Date the user was created, Unix epoch timestamp format
|
49
|
-
|
59
|
+
attr_reader :lastSeenDate
|
50
60
|
|
51
61
|
# Platform the Client SDK is running on
|
52
|
-
|
62
|
+
attr_reader :platform
|
53
63
|
|
54
64
|
# Version of the platform the Client SDK is running on
|
55
|
-
|
56
|
-
|
57
|
-
# User's device model
|
58
|
-
attr_accessor :device_model
|
65
|
+
attr_reader :platformVersion
|
59
66
|
|
60
67
|
# DevCycle SDK type
|
61
|
-
|
68
|
+
attr_reader :sdkType
|
62
69
|
|
63
70
|
# DevCycle SDK Version
|
64
|
-
|
71
|
+
attr_reader :sdkVersion
|
65
72
|
|
66
73
|
class EnumAttributeValidator
|
67
74
|
attr_reader :datatype
|
@@ -93,17 +100,17 @@ module DevCycle
|
|
93
100
|
:'name' => :'name',
|
94
101
|
:'language' => :'language',
|
95
102
|
:'country' => :'country',
|
96
|
-
:'
|
97
|
-
:'
|
98
|
-
:'
|
99
|
-
:'
|
100
|
-
:'
|
101
|
-
:'
|
103
|
+
:'appVersion' => :'appVersion',
|
104
|
+
:'appBuild' => :'appBuild',
|
105
|
+
:'customData' => :'customData',
|
106
|
+
:'privateCustomData' => :'privateCustomData',
|
107
|
+
:'createdDate' => :'createdDate',
|
108
|
+
:'lastSeenDate' => :'lastSeenDate',
|
102
109
|
:'platform' => :'platform',
|
103
|
-
:'
|
104
|
-
:'
|
105
|
-
:'
|
106
|
-
:'
|
110
|
+
:'platformVersion' => :'platformVersion',
|
111
|
+
:'deviceModel' => :'deviceModel',
|
112
|
+
:'sdkType' => :'sdkType',
|
113
|
+
:'sdkVersion' => :'sdkVersion'
|
107
114
|
}
|
108
115
|
end
|
109
116
|
|
@@ -120,24 +127,23 @@ module DevCycle
|
|
120
127
|
:'name' => :'String',
|
121
128
|
:'language' => :'String',
|
122
129
|
:'country' => :'String',
|
123
|
-
:'
|
124
|
-
:'
|
125
|
-
:'
|
126
|
-
:'
|
127
|
-
:'
|
128
|
-
:'
|
130
|
+
:'appVersion' => :'String',
|
131
|
+
:'appBuild' => :'String',
|
132
|
+
:'customData' => :'Object',
|
133
|
+
:'privateCustomData' => :'Object',
|
134
|
+
:'createdDate' => :'Float',
|
135
|
+
:'lastSeenDate' => :'Float',
|
129
136
|
:'platform' => :'String',
|
130
|
-
:'
|
131
|
-
:'
|
132
|
-
:'
|
133
|
-
:'
|
137
|
+
:'platformVersion' => :'String',
|
138
|
+
:'deviceModel' => :'String',
|
139
|
+
:'sdkType' => :'String',
|
140
|
+
:'sdkVersion' => :'String'
|
134
141
|
}
|
135
142
|
end
|
136
143
|
|
137
144
|
# List of attributes with nullable: true
|
138
145
|
def self.openapi_nullable
|
139
|
-
Set.new([
|
140
|
-
])
|
146
|
+
Set.new([])
|
141
147
|
end
|
142
148
|
|
143
149
|
# Initializes the object
|
@@ -155,8 +161,6 @@ module DevCycle
|
|
155
161
|
h[k.to_sym] = v
|
156
162
|
}
|
157
163
|
|
158
|
-
self.set_default_platform_info()
|
159
|
-
|
160
164
|
if attributes.key?(:'user_id')
|
161
165
|
self.user_id = attributes[:'user_id']
|
162
166
|
end
|
@@ -177,56 +181,34 @@ module DevCycle
|
|
177
181
|
self.country = attributes[:'country']
|
178
182
|
end
|
179
183
|
|
180
|
-
if attributes.key?(:'
|
181
|
-
self.
|
182
|
-
end
|
183
|
-
|
184
|
-
if attributes.key?(:'app_build')
|
185
|
-
self.app_build = attributes[:'app_build']
|
186
|
-
end
|
187
|
-
|
188
|
-
if attributes.key?(:'custom_data')
|
189
|
-
self.custom_data = attributes[:'custom_data']
|
190
|
-
end
|
191
|
-
|
192
|
-
if attributes.key?(:'private_custom_data')
|
193
|
-
self.private_custom_data = attributes[:'private_custom_data']
|
184
|
+
if attributes.key?(:'appVersion')
|
185
|
+
self.appVersion = attributes[:'appVersion']
|
194
186
|
end
|
195
187
|
|
196
|
-
if attributes.key?(:'
|
197
|
-
self.
|
188
|
+
if attributes.key?(:'appBuild')
|
189
|
+
self.appBuild = attributes[:'appBuild']
|
198
190
|
end
|
199
191
|
|
200
|
-
if attributes.key?(:'
|
201
|
-
self.
|
192
|
+
if attributes.key?(:'customData')
|
193
|
+
self.customData = attributes[:'customData']
|
202
194
|
end
|
203
195
|
|
204
|
-
if attributes.key?(:'
|
205
|
-
self.
|
196
|
+
if attributes.key?(:'privateCustomData')
|
197
|
+
self.privateCustomData = attributes[:'privateCustomData']
|
206
198
|
end
|
207
199
|
|
208
|
-
if attributes.key?(:'
|
209
|
-
self.
|
200
|
+
if attributes.key?(:'deviceModel')
|
201
|
+
self.deviceModel = attributes[:'deviceModel']
|
210
202
|
end
|
211
203
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
if attributes.key?(:'sdk_version')
|
221
|
-
self.sdk_version = attributes[:'sdk_version']
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
def set_default_platform_info
|
226
|
-
self.sdk_type = 'server'
|
227
|
-
self.sdk_version = VERSION
|
228
|
-
self.platform = 'ruby'
|
229
|
-
self.platform_version = RUBY_VERSION
|
204
|
+
# set read-only instance variables
|
205
|
+
default_platform_data = PlatformData.new.default
|
206
|
+
@sdkType = default_platform_data.sdkType
|
207
|
+
@sdkVersion = default_platform_data.sdkVersion
|
208
|
+
@platform = default_platform_data.platform
|
209
|
+
@platformVersion = default_platform_data.platformVersion
|
210
|
+
@createdDate = Time.now.utc.iso8601
|
211
|
+
@lastSeenDate = Time.now.utc.iso8601
|
230
212
|
end
|
231
213
|
|
232
214
|
# Show invalid properties with the reasons. Usually used together with valid?
|
@@ -279,37 +261,27 @@ module DevCycle
|
|
279
261
|
@country = country
|
280
262
|
end
|
281
263
|
|
282
|
-
# Custom attribute writer method checking allowed values (enum).
|
283
|
-
# @param [Object] sdk_type Object to be assigned
|
284
|
-
def sdk_type=(sdk_type)
|
285
|
-
validator = EnumAttributeValidator.new('String', ["api", "server"])
|
286
|
-
unless validator.valid?(sdk_type)
|
287
|
-
fail ArgumentError, "invalid value for \"sdk_type\", must be one of #{validator.allowable_values}."
|
288
|
-
end
|
289
|
-
@sdk_type = sdk_type
|
290
|
-
end
|
291
|
-
|
292
264
|
# Checks equality by comparing each attribute.
|
293
265
|
# @param [Object] Object to be compared
|
294
266
|
def ==(o)
|
295
267
|
return true if self.equal?(o)
|
296
268
|
self.class == o.class &&
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
269
|
+
user_id == o.user_id &&
|
270
|
+
email == o.email &&
|
271
|
+
name == o.name &&
|
272
|
+
language == o.language &&
|
273
|
+
country == o.country &&
|
274
|
+
appVersion == o.appVersion &&
|
275
|
+
appBuild == o.appBuild &&
|
276
|
+
customData == o.customData &&
|
277
|
+
privateCustomData == o.privateCustomData &&
|
278
|
+
createdDate == o.createdDate &&
|
279
|
+
lastSeenDate == o.lastSeenDate &&
|
280
|
+
platform == o.platform &&
|
281
|
+
platformVersion == o.platformVersion &&
|
282
|
+
deviceModel == o.deviceModel &&
|
283
|
+
sdkType == o.sdkType &&
|
284
|
+
sdkVersion == o.sdkVersion
|
313
285
|
end
|
314
286
|
|
315
287
|
# @see the `==` method
|
@@ -321,7 +293,7 @@ module DevCycle
|
|
321
293
|
# Calculates hash code according to all attributes.
|
322
294
|
# @return [Integer] Hash code
|
323
295
|
def hash
|
324
|
-
[user_id, email, name, language, country,
|
296
|
+
[user_id, email, name, language, country, appVersion, appBuild, customData, privateCustomData, createdDate, lastSeenDate, platform, platformVersion, deviceModel, sdkType, sdkVersion].hash
|
325
297
|
end
|
326
298
|
|
327
299
|
# Builds the object from hash
|
@@ -389,7 +361,8 @@ module DevCycle
|
|
389
361
|
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
|
390
362
|
end
|
391
363
|
end
|
392
|
-
else
|
364
|
+
else
|
365
|
+
# model
|
393
366
|
# models (e.g. Pet) or oneOf
|
394
367
|
klass = DevCycle.const_get(type)
|
395
368
|
klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
|
@@ -441,7 +414,5 @@ module DevCycle
|
|
441
414
|
value
|
442
415
|
end
|
443
416
|
end
|
444
|
-
|
445
417
|
end
|
446
|
-
|
447
418
|
end
|