shipeasy-sdk 2.1.0 → 2.3.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.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/docs/skill/SKILL.md +6 -2
  4. data/lib/generators/shipeasy/install/USAGE +24 -0
  5. data/lib/generators/shipeasy/install/install_generator.rb +86 -0
  6. data/lib/generators/shipeasy/install/templates/initializer.rb.tt +41 -0
  7. data/lib/shipeasy/admin.rb +85 -0
  8. data/lib/shipeasy/sdk/version.rb +1 -1
  9. data/lib/shipeasy_admin/api/alert_rules_api.rb +292 -0
  10. data/lib/shipeasy_admin/api/attributes_api.rb +82 -0
  11. data/lib/shipeasy_admin/api/configs_api.rb +680 -0
  12. data/lib/shipeasy_admin/api/events_api.rb +438 -0
  13. data/lib/shipeasy_admin/api/experiments_api.rb +727 -0
  14. data/lib/shipeasy_admin/api/gates_api.rb +438 -0
  15. data/lib/shipeasy_admin/api/i18n_api.rb +507 -0
  16. data/lib/shipeasy_admin/api/killswitches_api.rb +526 -0
  17. data/lib/shipeasy_admin/api/metrics_api.rb +281 -0
  18. data/lib/shipeasy_admin/api/ops_api.rb +525 -0
  19. data/lib/shipeasy_admin/api/projects_api.rb +153 -0
  20. data/lib/shipeasy_admin/api/universes_api.rb +306 -0
  21. data/lib/shipeasy_admin/api_client.rb +441 -0
  22. data/lib/shipeasy_admin/api_error.rb +58 -0
  23. data/lib/shipeasy_admin/api_model_base.rb +88 -0
  24. data/lib/shipeasy_admin/configuration.rb +397 -0
  25. data/lib/shipeasy_admin/models/approve_event_request.rb +198 -0
  26. data/lib/shipeasy_admin/models/approve_event_response.rb +166 -0
  27. data/lib/shipeasy_admin/models/create_alert_rule_request.rb +408 -0
  28. data/lib/shipeasy_admin/models/create_alert_rule_response.rb +165 -0
  29. data/lib/shipeasy_admin/models/create_config_request.rb +280 -0
  30. data/lib/shipeasy_admin/models/create_config_response.rb +201 -0
  31. data/lib/shipeasy_admin/models/create_event_request.rb +253 -0
  32. data/lib/shipeasy_admin/models/create_event_response.rb +193 -0
  33. data/lib/shipeasy_admin/models/create_experiment_request.rb +869 -0
  34. data/lib/shipeasy_admin/models/create_experiment_request_goal_metric.rb +336 -0
  35. data/lib/shipeasy_admin/models/create_experiment_response.rb +212 -0
  36. data/lib/shipeasy_admin/models/create_gate_request.rb +529 -0
  37. data/lib/shipeasy_admin/models/create_gate_response.rb +212 -0
  38. data/lib/shipeasy_admin/models/create_i18n_profile_request.rb +188 -0
  39. data/lib/shipeasy_admin/models/create_i18n_profile_response.rb +193 -0
  40. data/lib/shipeasy_admin/models/create_killswitch_request.rb +263 -0
  41. data/lib/shipeasy_admin/models/create_killswitch_response.rb +201 -0
  42. data/lib/shipeasy_admin/models/create_metric_request.rb +415 -0
  43. data/lib/shipeasy_admin/models/create_metric_response.rb +193 -0
  44. data/lib/shipeasy_admin/models/create_ops_item_request.rb +287 -0
  45. data/lib/shipeasy_admin/models/create_ops_item_response.rb +177 -0
  46. data/lib/shipeasy_admin/models/create_universe_request.rb +289 -0
  47. data/lib/shipeasy_admin/models/create_universe_response.rb +212 -0
  48. data/lib/shipeasy_admin/models/delete_alert_rule_response.rb +188 -0
  49. data/lib/shipeasy_admin/models/delete_config_response.rb +188 -0
  50. data/lib/shipeasy_admin/models/delete_event_response.rb +189 -0
  51. data/lib/shipeasy_admin/models/delete_experiment_response.rb +188 -0
  52. data/lib/shipeasy_admin/models/delete_gate_response.rb +188 -0
  53. data/lib/shipeasy_admin/models/delete_killswitch_response.rb +188 -0
  54. data/lib/shipeasy_admin/models/delete_metric_response.rb +189 -0
  55. data/lib/shipeasy_admin/models/delete_universe_response.rb +188 -0
  56. data/lib/shipeasy_admin/models/disable_gate_response.rb +190 -0
  57. data/lib/shipeasy_admin/models/discard_config_draft_request.rb +190 -0
  58. data/lib/shipeasy_admin/models/discard_config_draft_response.rb +188 -0
  59. data/lib/shipeasy_admin/models/enable_gate_response.rb +190 -0
  60. data/lib/shipeasy_admin/models/error_response.rb +185 -0
  61. data/lib/shipeasy_admin/models/get_config_response.rb +351 -0
  62. data/lib/shipeasy_admin/models/get_current_project_response.rb +606 -0
  63. data/lib/shipeasy_admin/models/get_current_project_response_module_translations.rb +104 -0
  64. data/lib/shipeasy_admin/models/get_event_response.rb +344 -0
  65. data/lib/shipeasy_admin/models/get_experiment_response.rb +688 -0
  66. data/lib/shipeasy_admin/models/get_experiment_results_response.rb +243 -0
  67. data/lib/shipeasy_admin/models/get_experiment_results_response_experiment.rb +248 -0
  68. data/lib/shipeasy_admin/models/get_experiment_results_response_results_inner.rb +252 -0
  69. data/lib/shipeasy_admin/models/get_experiment_timeseries_response.rb +192 -0
  70. data/lib/shipeasy_admin/models/get_experiment_timeseries_response_experiment.rb +261 -0
  71. data/lib/shipeasy_admin/models/get_experiment_timeseries_response_series_inner.rb +278 -0
  72. data/lib/shipeasy_admin/models/get_killswitch_response.rb +270 -0
  73. data/lib/shipeasy_admin/models/get_metric_response.rb +378 -0
  74. data/lib/shipeasy_admin/models/get_ops_item_response.rb +349 -0
  75. data/lib/shipeasy_admin/models/link_pr_to_ops_item_request.rb +186 -0
  76. data/lib/shipeasy_admin/models/link_pr_to_ops_item_response.rb +166 -0
  77. data/lib/shipeasy_admin/models/list_alert_rules_response_inner.rb +478 -0
  78. data/lib/shipeasy_admin/models/list_alert_rules_response_inner_notify.rb +177 -0
  79. data/lib/shipeasy_admin/models/list_alert_rules_response_inner_notify_slack_channel.rb +211 -0
  80. data/lib/shipeasy_admin/models/list_attributes_response_inner.rb +176 -0
  81. data/lib/shipeasy_admin/models/list_config_activity_response_inner.rb +280 -0
  82. data/lib/shipeasy_admin/models/list_configs_response.rb +178 -0
  83. data/lib/shipeasy_admin/models/list_configs_response_data_inner.rb +351 -0
  84. data/lib/shipeasy_admin/models/list_configs_response_data_inner_drafts_value.rb +237 -0
  85. data/lib/shipeasy_admin/models/list_configs_response_data_inner_envs_value.rb +237 -0
  86. data/lib/shipeasy_admin/models/list_events_response_inner.rb +344 -0
  87. data/lib/shipeasy_admin/models/list_events_response_inner_properties_inner.rb +289 -0
  88. data/lib/shipeasy_admin/models/list_experiments_response.rb +178 -0
  89. data/lib/shipeasy_admin/models/list_experiments_response_data_inner.rb +688 -0
  90. data/lib/shipeasy_admin/models/list_experiments_response_data_inner_groups_inner.rb +258 -0
  91. data/lib/shipeasy_admin/models/list_gates_response.rb +178 -0
  92. data/lib/shipeasy_admin/models/list_gates_response_data_inner.rb +395 -0
  93. data/lib/shipeasy_admin/models/list_gates_response_data_inner_enabled.rb +104 -0
  94. data/lib/shipeasy_admin/models/list_gates_response_data_inner_rules_inner.rb +238 -0
  95. data/lib/shipeasy_admin/models/list_gates_response_data_inner_stack_inner.rb +105 -0
  96. data/lib/shipeasy_admin/models/list_gates_response_data_inner_stack_inner_one_of.rb +375 -0
  97. data/lib/shipeasy_admin/models/list_gates_response_data_inner_stack_inner_one_of1.rb +331 -0
  98. data/lib/shipeasy_admin/models/list_gates_response_data_inner_stack_inner_one_of_ramp.rb +319 -0
  99. data/lib/shipeasy_admin/models/list_i18n_drafts_response_inner.rb +272 -0
  100. data/lib/shipeasy_admin/models/list_i18n_keys_response.rb +195 -0
  101. data/lib/shipeasy_admin/models/list_i18n_keys_response_keys_inner.rb +284 -0
  102. data/lib/shipeasy_admin/models/list_i18n_profiles_response_inner.rb +224 -0
  103. data/lib/shipeasy_admin/models/list_killswitches_response.rb +178 -0
  104. data/lib/shipeasy_admin/models/list_killswitches_response_data_inner.rb +270 -0
  105. data/lib/shipeasy_admin/models/list_killswitches_response_data_inner_envs_value.rb +248 -0
  106. data/lib/shipeasy_admin/models/list_metrics_response_inner.rb +378 -0
  107. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir.rb +295 -0
  108. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg.rb +113 -0
  109. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of.rb +188 -0
  110. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of1.rb +188 -0
  111. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of2.rb +188 -0
  112. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of3.rb +188 -0
  113. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of4.rb +188 -0
  114. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of5.rb +188 -0
  115. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of6.rb +188 -0
  116. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of7.rb +217 -0
  117. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of8.rb +233 -0
  118. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of9.rb +240 -0
  119. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of9_numerator.rb +266 -0
  120. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_agg_one_of9_numerator_filters_inner.rb +264 -0
  121. data/lib/shipeasy_admin/models/list_metrics_response_inner_query_ir_group_by.rb +228 -0
  122. data/lib/shipeasy_admin/models/list_ops_items_response_inner.rb +349 -0
  123. data/lib/shipeasy_admin/models/list_slack_channels_response.rb +195 -0
  124. data/lib/shipeasy_admin/models/list_slack_channels_response_channels_inner.rb +203 -0
  125. data/lib/shipeasy_admin/models/list_universes_response.rb +178 -0
  126. data/lib/shipeasy_admin/models/list_universes_response_data_inner.rb +305 -0
  127. data/lib/shipeasy_admin/models/notify_ops_request.rb +261 -0
  128. data/lib/shipeasy_admin/models/notify_ops_response.rb +193 -0
  129. data/lib/shipeasy_admin/models/publish_config_draft_request.rb +190 -0
  130. data/lib/shipeasy_admin/models/publish_config_draft_response.rb +260 -0
  131. data/lib/shipeasy_admin/models/publish_i18n_profile_request.rb +149 -0
  132. data/lib/shipeasy_admin/models/publish_i18n_profile_response.rb +404 -0
  133. data/lib/shipeasy_admin/models/push_i18n_keys_request.rb +205 -0
  134. data/lib/shipeasy_admin/models/push_i18n_keys_request_keys_inner.rb +192 -0
  135. data/lib/shipeasy_admin/models/push_i18n_keys_response.rb +261 -0
  136. data/lib/shipeasy_admin/models/reanalyze_experiment_response.rb +214 -0
  137. data/lib/shipeasy_admin/models/save_config_draft_request.rb +202 -0
  138. data/lib/shipeasy_admin/models/save_config_draft_response.rb +286 -0
  139. data/lib/shipeasy_admin/models/set_experiment_metrics_request.rb +168 -0
  140. data/lib/shipeasy_admin/models/set_experiment_metrics_request_metrics_inner.rb +216 -0
  141. data/lib/shipeasy_admin/models/set_experiment_metrics_response.rb +179 -0
  142. data/lib/shipeasy_admin/models/set_experiment_metrics_response_metrics_inner.rb +201 -0
  143. data/lib/shipeasy_admin/models/set_experiment_status_request.rb +190 -0
  144. data/lib/shipeasy_admin/models/set_experiment_status_response.rb +214 -0
  145. data/lib/shipeasy_admin/models/set_killswitch_switch_request.rb +264 -0
  146. data/lib/shipeasy_admin/models/set_killswitch_switch_response.rb +288 -0
  147. data/lib/shipeasy_admin/models/unset_killswitch_switch_request.rb +237 -0
  148. data/lib/shipeasy_admin/models/unset_killswitch_switch_response.rb +289 -0
  149. data/lib/shipeasy_admin/models/update_alert_rule_request.rb +306 -0
  150. data/lib/shipeasy_admin/models/update_alert_rule_response.rb +165 -0
  151. data/lib/shipeasy_admin/models/update_config_request.rb +198 -0
  152. data/lib/shipeasy_admin/models/update_config_response.rb +165 -0
  153. data/lib/shipeasy_admin/models/update_event_request.rb +198 -0
  154. data/lib/shipeasy_admin/models/update_event_response.rb +166 -0
  155. data/lib/shipeasy_admin/models/update_experiment_request.rb +746 -0
  156. data/lib/shipeasy_admin/models/update_experiment_response.rb +165 -0
  157. data/lib/shipeasy_admin/models/update_gate_request.rb +403 -0
  158. data/lib/shipeasy_admin/models/update_gate_response.rb +166 -0
  159. data/lib/shipeasy_admin/models/update_i18n_key_request.rb +176 -0
  160. data/lib/shipeasy_admin/models/update_i18n_key_response.rb +166 -0
  161. data/lib/shipeasy_admin/models/update_killswitch_request.rb +224 -0
  162. data/lib/shipeasy_admin/models/update_killswitch_response.rb +165 -0
  163. data/lib/shipeasy_admin/models/update_ops_item_request.rb +205 -0
  164. data/lib/shipeasy_admin/models/update_ops_item_response.rb +166 -0
  165. data/lib/shipeasy_admin/models/update_universe_request.rb +213 -0
  166. data/lib/shipeasy_admin/models/update_universe_response.rb +165 -0
  167. data/lib/shipeasy_admin/models/upsert_project_request.rb +222 -0
  168. data/lib/shipeasy_admin/models/upsert_project_response.rb +260 -0
  169. data/lib/shipeasy_admin/version.rb +15 -0
  170. data/lib/shipeasy_admin.rb +196 -0
  171. metadata +230 -2
@@ -0,0 +1,415 @@
1
+ =begin
2
+ #Shipeasy Admin API
3
+
4
+ #REST API for managing feature gates, experiments, configs, universes, and killswitches in a Shipeasy project. Authenticate with an admin SDK key (`Authorization: Bearer sdk_admin_…`) and scope every request to a project via the `X-Project-Id` header. Mint admin keys via `POST /api/admin/keys` with `type: \"admin\"`. Keys expire after 90 days; rotate with the `revoke` action.
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Shipeasy::Admin::Generated
17
+ # Body for `POST /api/admin/metrics`. Requires `name`, `event_name`, and exactly one of `query` / `query_ir`.
18
+ class CreateMetricRequest < ApiModelBase
19
+ # Stable metric key. Single segment or `folder.name`; lowercase letters, digits, `_`/`-`; max 128 chars.
20
+ attr_accessor :name
21
+
22
+ # Optional folder name used to group items in the dashboard. Part of the SDK lookup key: an item in folder `checkout` named `new-cart` is referenced as `checkout/new-cart` from the SDK.
23
+ attr_accessor :folder
24
+
25
+ # Source event the query reads from.
26
+ attr_accessor :event_name
27
+
28
+ # Metric query DSL string, e.g. `sum(purchase, amount)`. Provide this OR `query_ir`.
29
+ attr_accessor :query
30
+
31
+ attr_accessor :query_ir
32
+
33
+ # Winsorise percentile (1–99) to clamp outliers. Defaults to 99.
34
+ attr_accessor :winsorize_pct
35
+
36
+ # Minimum detectable effect (relative, 0–1) for power planning. `null` to omit.
37
+ attr_accessor :min_detectable_effect
38
+
39
+ # Desired direction of movement. `higher_better` (default), `lower_better`, or `neutral` (guardrail).
40
+ attr_accessor :direction
41
+
42
+ class EnumAttributeValidator
43
+ attr_reader :datatype
44
+ attr_reader :allowable_values
45
+
46
+ def initialize(datatype, allowable_values)
47
+ @allowable_values = allowable_values.map do |value|
48
+ case datatype.to_s
49
+ when /Integer/i
50
+ value.to_i
51
+ when /Float/i
52
+ value.to_f
53
+ else
54
+ value
55
+ end
56
+ end
57
+ end
58
+
59
+ def valid?(value)
60
+ !value || allowable_values.include?(value)
61
+ end
62
+ end
63
+
64
+ # Attribute mapping from ruby-style variable name to JSON key.
65
+ def self.attribute_map
66
+ {
67
+ :'name' => :'name',
68
+ :'folder' => :'folder',
69
+ :'event_name' => :'event_name',
70
+ :'query' => :'query',
71
+ :'query_ir' => :'query_ir',
72
+ :'winsorize_pct' => :'winsorize_pct',
73
+ :'min_detectable_effect' => :'min_detectable_effect',
74
+ :'direction' => :'direction'
75
+ }
76
+ end
77
+
78
+ # Returns attribute mapping this model knows about
79
+ def self.acceptable_attribute_map
80
+ attribute_map
81
+ end
82
+
83
+ # Returns all the JSON keys this model knows about
84
+ def self.acceptable_attributes
85
+ acceptable_attribute_map.values
86
+ end
87
+
88
+ # Attribute type mapping.
89
+ def self.openapi_types
90
+ {
91
+ :'name' => :'String',
92
+ :'folder' => :'String',
93
+ :'event_name' => :'String',
94
+ :'query' => :'String',
95
+ :'query_ir' => :'ListMetricsResponseInnerQueryIr',
96
+ :'winsorize_pct' => :'Integer',
97
+ :'min_detectable_effect' => :'Float',
98
+ :'direction' => :'String'
99
+ }
100
+ end
101
+
102
+ # List of attributes with nullable: true
103
+ def self.openapi_nullable
104
+ Set.new([
105
+ :'folder',
106
+ :'min_detectable_effect',
107
+ ])
108
+ end
109
+
110
+ # Initializes the object
111
+ # @param [Hash] attributes Model attributes in the form of hash
112
+ def initialize(attributes = {})
113
+ if (!attributes.is_a?(Hash))
114
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Shipeasy::Admin::Generated::CreateMetricRequest` initialize method"
115
+ end
116
+
117
+ # check to see if the attribute exists and convert string to symbol for hash key
118
+ acceptable_attribute_map = self.class.acceptable_attribute_map
119
+ attributes = attributes.each_with_object({}) { |(k, v), h|
120
+ if (!acceptable_attribute_map.key?(k.to_sym))
121
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Shipeasy::Admin::Generated::CreateMetricRequest`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
122
+ end
123
+ h[k.to_sym] = v
124
+ }
125
+
126
+ if attributes.key?(:'name')
127
+ self.name = attributes[:'name']
128
+ else
129
+ self.name = nil
130
+ end
131
+
132
+ if attributes.key?(:'folder')
133
+ self.folder = attributes[:'folder']
134
+ end
135
+
136
+ if attributes.key?(:'event_name')
137
+ self.event_name = attributes[:'event_name']
138
+ else
139
+ self.event_name = nil
140
+ end
141
+
142
+ if attributes.key?(:'query')
143
+ self.query = attributes[:'query']
144
+ end
145
+
146
+ if attributes.key?(:'query_ir')
147
+ self.query_ir = attributes[:'query_ir']
148
+ end
149
+
150
+ if attributes.key?(:'winsorize_pct')
151
+ self.winsorize_pct = attributes[:'winsorize_pct']
152
+ else
153
+ self.winsorize_pct = 99
154
+ end
155
+
156
+ if attributes.key?(:'min_detectable_effect')
157
+ self.min_detectable_effect = attributes[:'min_detectable_effect']
158
+ else
159
+ self.min_detectable_effect = nil
160
+ end
161
+
162
+ if attributes.key?(:'direction')
163
+ self.direction = attributes[:'direction']
164
+ else
165
+ self.direction = 'higher_better'
166
+ end
167
+ end
168
+
169
+ # Show invalid properties with the reasons. Usually used together with valid?
170
+ # @return Array for valid properties with the reasons
171
+ def list_invalid_properties
172
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
173
+ invalid_properties = Array.new
174
+ if @name.nil?
175
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
176
+ end
177
+
178
+ if @name.to_s.length > 128
179
+ invalid_properties.push('invalid value for "name", the character length must be smaller than or equal to 128.')
180
+ end
181
+
182
+ pattern = Regexp.new(/^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?)?$/)
183
+ if @name !~ pattern
184
+ invalid_properties.push("invalid value for \"name\", must conform to the pattern #{pattern}.")
185
+ end
186
+
187
+ if !@folder.nil? && @folder.to_s.length > 256
188
+ invalid_properties.push('invalid value for "folder", the character length must be smaller than or equal to 256.')
189
+ end
190
+
191
+ pattern = Regexp.new(/^[a-zA-Z0-9_-]+$/)
192
+ if !@folder.nil? && @folder !~ pattern
193
+ invalid_properties.push("invalid value for \"folder\", must conform to the pattern #{pattern}.")
194
+ end
195
+
196
+ if @event_name.nil?
197
+ invalid_properties.push('invalid value for "event_name", event_name cannot be nil.')
198
+ end
199
+
200
+ if @event_name.to_s.length < 1
201
+ invalid_properties.push('invalid value for "event_name", the character length must be greater than or equal to 1.')
202
+ end
203
+
204
+ if !@query.nil? && @query.to_s.length > 4096
205
+ invalid_properties.push('invalid value for "query", the character length must be smaller than or equal to 4096.')
206
+ end
207
+
208
+ if !@query.nil? && @query.to_s.length < 1
209
+ invalid_properties.push('invalid value for "query", the character length must be greater than or equal to 1.')
210
+ end
211
+
212
+ if @winsorize_pct.nil?
213
+ invalid_properties.push('invalid value for "winsorize_pct", winsorize_pct cannot be nil.')
214
+ end
215
+
216
+ if @winsorize_pct > 99
217
+ invalid_properties.push('invalid value for "winsorize_pct", must be smaller than or equal to 99.')
218
+ end
219
+
220
+ if @winsorize_pct < 1
221
+ invalid_properties.push('invalid value for "winsorize_pct", must be greater than or equal to 1.')
222
+ end
223
+
224
+ if @direction.nil?
225
+ invalid_properties.push('invalid value for "direction", direction cannot be nil.')
226
+ end
227
+
228
+ invalid_properties
229
+ end
230
+
231
+ # Check to see if the all the properties in the model are valid
232
+ # @return true if the model is valid
233
+ def valid?
234
+ warn '[DEPRECATED] the `valid?` method is obsolete'
235
+ return false if @name.nil?
236
+ return false if @name.to_s.length > 128
237
+ return false if @name !~ Regexp.new(/^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?)?$/)
238
+ return false if !@folder.nil? && @folder.to_s.length > 256
239
+ return false if !@folder.nil? && @folder !~ Regexp.new(/^[a-zA-Z0-9_-]+$/)
240
+ return false if @event_name.nil?
241
+ return false if @event_name.to_s.length < 1
242
+ return false if !@query.nil? && @query.to_s.length > 4096
243
+ return false if !@query.nil? && @query.to_s.length < 1
244
+ return false if @winsorize_pct.nil?
245
+ return false if @winsorize_pct > 99
246
+ return false if @winsorize_pct < 1
247
+ return false if @direction.nil?
248
+ direction_validator = EnumAttributeValidator.new('String', ["higher_better", "lower_better", "neutral"])
249
+ return false unless direction_validator.valid?(@direction)
250
+ true
251
+ end
252
+
253
+ # Custom attribute writer method with validation
254
+ # @param [Object] name Value to be assigned
255
+ def name=(name)
256
+ if name.nil?
257
+ fail ArgumentError, 'name cannot be nil'
258
+ end
259
+
260
+ if name.to_s.length > 128
261
+ fail ArgumentError, 'invalid value for "name", the character length must be smaller than or equal to 128.'
262
+ end
263
+
264
+ pattern = Regexp.new(/^[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9_-]*[a-z0-9])?)?$/)
265
+ if name !~ pattern
266
+ fail ArgumentError, "invalid value for \"name\", must conform to the pattern #{pattern}."
267
+ end
268
+
269
+ @name = name
270
+ end
271
+
272
+ # Custom attribute writer method with validation
273
+ # @param [Object] folder Value to be assigned
274
+ def folder=(folder)
275
+ if !folder.nil? && folder.to_s.length > 256
276
+ fail ArgumentError, 'invalid value for "folder", the character length must be smaller than or equal to 256.'
277
+ end
278
+
279
+ pattern = Regexp.new(/^[a-zA-Z0-9_-]+$/)
280
+ if !folder.nil? && folder !~ pattern
281
+ fail ArgumentError, "invalid value for \"folder\", must conform to the pattern #{pattern}."
282
+ end
283
+
284
+ @folder = folder
285
+ end
286
+
287
+ # Custom attribute writer method with validation
288
+ # @param [Object] event_name Value to be assigned
289
+ def event_name=(event_name)
290
+ if event_name.nil?
291
+ fail ArgumentError, 'event_name cannot be nil'
292
+ end
293
+
294
+ if event_name.to_s.length < 1
295
+ fail ArgumentError, 'invalid value for "event_name", the character length must be greater than or equal to 1.'
296
+ end
297
+
298
+ @event_name = event_name
299
+ end
300
+
301
+ # Custom attribute writer method with validation
302
+ # @param [Object] query Value to be assigned
303
+ def query=(query)
304
+ if query.nil?
305
+ fail ArgumentError, 'query cannot be nil'
306
+ end
307
+
308
+ if query.to_s.length > 4096
309
+ fail ArgumentError, 'invalid value for "query", the character length must be smaller than or equal to 4096.'
310
+ end
311
+
312
+ if query.to_s.length < 1
313
+ fail ArgumentError, 'invalid value for "query", the character length must be greater than or equal to 1.'
314
+ end
315
+
316
+ @query = query
317
+ end
318
+
319
+ # Custom attribute writer method with validation
320
+ # @param [Object] winsorize_pct Value to be assigned
321
+ def winsorize_pct=(winsorize_pct)
322
+ if winsorize_pct.nil?
323
+ fail ArgumentError, 'winsorize_pct cannot be nil'
324
+ end
325
+
326
+ if winsorize_pct > 99
327
+ fail ArgumentError, 'invalid value for "winsorize_pct", must be smaller than or equal to 99.'
328
+ end
329
+
330
+ if winsorize_pct < 1
331
+ fail ArgumentError, 'invalid value for "winsorize_pct", must be greater than or equal to 1.'
332
+ end
333
+
334
+ @winsorize_pct = winsorize_pct
335
+ end
336
+
337
+ # Custom attribute writer method checking allowed values (enum).
338
+ # @param [Object] direction Object to be assigned
339
+ def direction=(direction)
340
+ validator = EnumAttributeValidator.new('String', ["higher_better", "lower_better", "neutral"])
341
+ unless validator.valid?(direction)
342
+ fail ArgumentError, "invalid value for \"direction\", must be one of #{validator.allowable_values}."
343
+ end
344
+ @direction = direction
345
+ end
346
+
347
+ # Checks equality by comparing each attribute.
348
+ # @param [Object] Object to be compared
349
+ def ==(o)
350
+ return true if self.equal?(o)
351
+ self.class == o.class &&
352
+ name == o.name &&
353
+ folder == o.folder &&
354
+ event_name == o.event_name &&
355
+ query == o.query &&
356
+ query_ir == o.query_ir &&
357
+ winsorize_pct == o.winsorize_pct &&
358
+ min_detectable_effect == o.min_detectable_effect &&
359
+ direction == o.direction
360
+ end
361
+
362
+ # @see the `==` method
363
+ # @param [Object] Object to be compared
364
+ def eql?(o)
365
+ self == o
366
+ end
367
+
368
+ # Calculates hash code according to all attributes.
369
+ # @return [Integer] Hash code
370
+ def hash
371
+ [name, folder, event_name, query, query_ir, winsorize_pct, min_detectable_effect, direction].hash
372
+ end
373
+
374
+ # Builds the object from hash
375
+ # @param [Hash] attributes Model attributes in the form of hash
376
+ # @return [Object] Returns the model itself
377
+ def self.build_from_hash(attributes)
378
+ return nil unless attributes.is_a?(Hash)
379
+ attributes = attributes.transform_keys(&:to_sym)
380
+ transformed_hash = {}
381
+ openapi_types.each_pair do |key, type|
382
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
383
+ transformed_hash["#{key}"] = nil
384
+ elsif type =~ /\AArray<(.*)>/i
385
+ # check to ensure the input is an array given that the attribute
386
+ # is documented as an array but the input is not
387
+ if attributes[attribute_map[key]].is_a?(Array)
388
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
389
+ end
390
+ elsif !attributes[attribute_map[key]].nil?
391
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
392
+ end
393
+ end
394
+ new(transformed_hash)
395
+ end
396
+
397
+ # Returns the object in the form of hash
398
+ # @return [Hash] Returns the object in the form of hash
399
+ def to_hash
400
+ hash = {}
401
+ self.class.attribute_map.each_pair do |attr, param|
402
+ value = self.send(attr)
403
+ if value.nil?
404
+ is_nullable = self.class.openapi_nullable.include?(attr)
405
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
406
+ end
407
+
408
+ hash[param] = _to_hash(value)
409
+ end
410
+ hash
411
+ end
412
+
413
+ end
414
+
415
+ end
@@ -0,0 +1,193 @@
1
+ =begin
2
+ #Shipeasy Admin API
3
+
4
+ #REST API for managing feature gates, experiments, configs, universes, and killswitches in a Shipeasy project. Authenticate with an admin SDK key (`Authorization: Bearer sdk_admin_…`) and scope every request to a project via the `X-Project-Id` header. Mint admin keys via `POST /api/admin/keys` with `type: \"admin\"`. Keys expire after 90 days; rotate with the `revoke` action.
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Shipeasy::Admin::Generated
17
+ # Result of a successful metric create.
18
+ class CreateMetricResponse < ApiModelBase
19
+ # Newly assigned metric id.
20
+ attr_accessor :id
21
+
22
+ # Metric name that was created.
23
+ attr_accessor :name
24
+
25
+ # Attribute mapping from ruby-style variable name to JSON key.
26
+ def self.attribute_map
27
+ {
28
+ :'id' => :'id',
29
+ :'name' => :'name'
30
+ }
31
+ end
32
+
33
+ # Returns attribute mapping this model knows about
34
+ def self.acceptable_attribute_map
35
+ attribute_map
36
+ end
37
+
38
+ # Returns all the JSON keys this model knows about
39
+ def self.acceptable_attributes
40
+ acceptable_attribute_map.values
41
+ end
42
+
43
+ # Attribute type mapping.
44
+ def self.openapi_types
45
+ {
46
+ :'id' => :'String',
47
+ :'name' => :'String'
48
+ }
49
+ end
50
+
51
+ # List of attributes with nullable: true
52
+ def self.openapi_nullable
53
+ Set.new([
54
+ ])
55
+ end
56
+
57
+ # Initializes the object
58
+ # @param [Hash] attributes Model attributes in the form of hash
59
+ def initialize(attributes = {})
60
+ if (!attributes.is_a?(Hash))
61
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Shipeasy::Admin::Generated::CreateMetricResponse` initialize method"
62
+ end
63
+
64
+ # check to see if the attribute exists and convert string to symbol for hash key
65
+ acceptable_attribute_map = self.class.acceptable_attribute_map
66
+ attributes = attributes.each_with_object({}) { |(k, v), h|
67
+ if (!acceptable_attribute_map.key?(k.to_sym))
68
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Shipeasy::Admin::Generated::CreateMetricResponse`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
69
+ end
70
+ h[k.to_sym] = v
71
+ }
72
+
73
+ if attributes.key?(:'id')
74
+ self.id = attributes[:'id']
75
+ else
76
+ self.id = nil
77
+ end
78
+
79
+ if attributes.key?(:'name')
80
+ self.name = attributes[:'name']
81
+ else
82
+ self.name = nil
83
+ end
84
+ end
85
+
86
+ # Show invalid properties with the reasons. Usually used together with valid?
87
+ # @return Array for valid properties with the reasons
88
+ def list_invalid_properties
89
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
90
+ invalid_properties = Array.new
91
+ if @id.nil?
92
+ invalid_properties.push('invalid value for "id", id cannot be nil.')
93
+ end
94
+
95
+ if @name.nil?
96
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
97
+ end
98
+
99
+ invalid_properties
100
+ end
101
+
102
+ # Check to see if the all the properties in the model are valid
103
+ # @return true if the model is valid
104
+ def valid?
105
+ warn '[DEPRECATED] the `valid?` method is obsolete'
106
+ return false if @id.nil?
107
+ return false if @name.nil?
108
+ true
109
+ end
110
+
111
+ # Custom attribute writer method with validation
112
+ # @param [Object] id Value to be assigned
113
+ def id=(id)
114
+ if id.nil?
115
+ fail ArgumentError, 'id cannot be nil'
116
+ end
117
+
118
+ @id = id
119
+ end
120
+
121
+ # Custom attribute writer method with validation
122
+ # @param [Object] name Value to be assigned
123
+ def name=(name)
124
+ if name.nil?
125
+ fail ArgumentError, 'name cannot be nil'
126
+ end
127
+
128
+ @name = name
129
+ end
130
+
131
+ # Checks equality by comparing each attribute.
132
+ # @param [Object] Object to be compared
133
+ def ==(o)
134
+ return true if self.equal?(o)
135
+ self.class == o.class &&
136
+ id == o.id &&
137
+ name == o.name
138
+ end
139
+
140
+ # @see the `==` method
141
+ # @param [Object] Object to be compared
142
+ def eql?(o)
143
+ self == o
144
+ end
145
+
146
+ # Calculates hash code according to all attributes.
147
+ # @return [Integer] Hash code
148
+ def hash
149
+ [id, name].hash
150
+ end
151
+
152
+ # Builds the object from hash
153
+ # @param [Hash] attributes Model attributes in the form of hash
154
+ # @return [Object] Returns the model itself
155
+ def self.build_from_hash(attributes)
156
+ return nil unless attributes.is_a?(Hash)
157
+ attributes = attributes.transform_keys(&:to_sym)
158
+ transformed_hash = {}
159
+ openapi_types.each_pair do |key, type|
160
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
161
+ transformed_hash["#{key}"] = nil
162
+ elsif type =~ /\AArray<(.*)>/i
163
+ # check to ensure the input is an array given that the attribute
164
+ # is documented as an array but the input is not
165
+ if attributes[attribute_map[key]].is_a?(Array)
166
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
167
+ end
168
+ elsif !attributes[attribute_map[key]].nil?
169
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
170
+ end
171
+ end
172
+ new(transformed_hash)
173
+ end
174
+
175
+ # Returns the object in the form of hash
176
+ # @return [Hash] Returns the object in the form of hash
177
+ def to_hash
178
+ hash = {}
179
+ self.class.attribute_map.each_pair do |attr, param|
180
+ value = self.send(attr)
181
+ if value.nil?
182
+ is_nullable = self.class.openapi_nullable.include?(attr)
183
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
184
+ end
185
+
186
+ hash[param] = _to_hash(value)
187
+ end
188
+ hash
189
+ end
190
+
191
+ end
192
+
193
+ end