splitapi-rb 1.0.1 → 1.2.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.
- checksums.yaml +4 -4
- data/CHANGES +16 -0
- data/DetailedReadme.md +65 -53
- data/Gemfile.lock +1 -1
- data/NEWS +4 -0
- data/README.md +1 -1
- data/lib/splitapi-rb.rb +6 -0
- data/lib/splitapi-rb/config.rb +3 -1
- data/lib/splitapi-rb/data_objects/attribute.rb +8 -0
- data/lib/splitapi-rb/data_objects/base_data_object.rb +23 -0
- data/lib/splitapi-rb/data_objects/environment.rb +8 -0
- data/lib/splitapi-rb/data_objects/identity.rb +8 -0
- data/lib/splitapi-rb/data_objects/traffic_type.rb +8 -0
- data/lib/splitapi-rb/models/attributes.rb +24 -3
- data/lib/splitapi-rb/models/environments.rb +6 -1
- data/lib/splitapi-rb/models/identities.rb +38 -4
- data/lib/splitapi-rb/models/traffic_types.rb +7 -1
- data/lib/splitapi-rb/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eec601d03cbbf685c204ea7ebe8425fea35b90ec
|
4
|
+
data.tar.gz: b76629bf58ed478931126350d0b23c3c7082fa32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d467adfe57c0e1698f5fb788299c4457384d20c9ce040b71f70233de716b01b290494b1a464cfb7c1b4979164626cc6fe688ba388647ceea26917a8b122b802b
|
7
|
+
data.tar.gz: 9b2ee377a328b1dc70611af52094ee402c46e116dfd535344f3c81ed169d54d8d607fb7ec4cca8e0c3009a908599e090f5f9ca7996f3e0028811667b3deb0f5b
|
data/CHANGES
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
1.2.0
|
2
|
+
|
3
|
+
Add default uri
|
4
|
+
|
5
|
+
1.1.1
|
6
|
+
|
7
|
+
Fix specs from being false positive, add to_h method
|
8
|
+
|
9
|
+
1.1.0
|
10
|
+
|
11
|
+
Return DTOs instead of hashes
|
12
|
+
|
13
|
+
1.0.2
|
14
|
+
|
15
|
+
Return "failed" and "metadata" alongside with "objects" when calling Identities#save_all
|
16
|
+
|
1
17
|
1.0.1
|
2
18
|
|
3
19
|
Use camel case instead of snake case in JSON response.
|
data/DetailedReadme.md
CHANGED
@@ -22,7 +22,58 @@ client = SplitApi::Client.new(api_key: 'SPLIT_ADMIN_TOKEN', base_uri: 'SPLIT_IDE
|
|
22
22
|
|
23
23
|
Now we have following models `Attributes`, `Environments`, `Identities`, `TrafficTypes`.
|
24
24
|
|
25
|
-
###
|
25
|
+
### Data Objects
|
26
|
+
|
27
|
+
Models can return the following:
|
28
|
+
|
29
|
+
- true/false (when `#delete` method was called)
|
30
|
+
- `SplitApi::DataObjects::Attribute`, `SplitApi::DataObjects::Environment`, `SplitApi::DataObjects::Identify` or `SplitApi::DataObjects::DataType`
|
31
|
+
- array of the above DTOs (when `#save_all` or `#list` was called)
|
32
|
+
|
33
|
+
Data objects structure:
|
34
|
+
|
35
|
+
#### Attribute DTO
|
36
|
+
```
|
37
|
+
#<SplitApi::DataObjects::Attribute
|
38
|
+
@description="string",
|
39
|
+
@display_name="string",
|
40
|
+
@id="string",
|
41
|
+
@is_searchable="true/false",
|
42
|
+
@organization_id="string",
|
43
|
+
@traffic_type_id="string"
|
44
|
+
>
|
45
|
+
```
|
46
|
+
|
47
|
+
#### Environment DTOs
|
48
|
+
```
|
49
|
+
#<SplitApi::DataObjects::Environment
|
50
|
+
@name="string",
|
51
|
+
@id="string",
|
52
|
+
>
|
53
|
+
```
|
54
|
+
|
55
|
+
#### Identity DTO
|
56
|
+
```
|
57
|
+
#<SplitApi::DataObjects::Identity
|
58
|
+
@values="string",
|
59
|
+
@key="string",
|
60
|
+
@environment_id="string",
|
61
|
+
@organization_id="string",
|
62
|
+
@traffic_type_id="string",
|
63
|
+
@timestamp="number"
|
64
|
+
>
|
65
|
+
```
|
66
|
+
|
67
|
+
#### TrafficType DTO
|
68
|
+
```
|
69
|
+
#<SplitApi::DataObjects::TrafficType
|
70
|
+
@name="string",
|
71
|
+
@id="string",
|
72
|
+
@display_attribute_id="string"
|
73
|
+
>
|
74
|
+
```
|
75
|
+
|
76
|
+
### Attributes model
|
26
77
|
|
27
78
|
Available methods:
|
28
79
|
|
@@ -34,13 +85,7 @@ _arguments_: `traffic_type_id`
|
|
34
85
|
client.attributes.list('traffic_type_id')
|
35
86
|
# example response:
|
36
87
|
[
|
37
|
-
|
38
|
-
"id" => "string",
|
39
|
-
"traffic_type_id" => "string",
|
40
|
-
"display_name" => "string",
|
41
|
-
"description" => "string",
|
42
|
-
"dataType" => "string"
|
43
|
-
},
|
88
|
+
SplitApi::DataObjects::Attribute,
|
44
89
|
# ...
|
45
90
|
]
|
46
91
|
```
|
@@ -58,14 +103,7 @@ client.attributes.save(
|
|
58
103
|
data_type: "string"
|
59
104
|
)
|
60
105
|
# example response:
|
61
|
-
|
62
|
-
"id" => "string",
|
63
|
-
"organization_id" => "string",
|
64
|
-
"traffic_type_id" => "string",
|
65
|
-
"display_name" => "string",
|
66
|
-
"description" => "string",
|
67
|
-
"data_type" => "string"
|
68
|
-
}
|
106
|
+
SplitApi::DataObjects::Attribute
|
69
107
|
```
|
70
108
|
|
71
109
|
**delete**: delete attribute by key
|
@@ -78,7 +116,7 @@ client.attributes.delete('traffic_type_id', 'attribute_id')
|
|
78
116
|
true
|
79
117
|
```
|
80
118
|
|
81
|
-
### Environments
|
119
|
+
### Environments model
|
82
120
|
|
83
121
|
Available methods:
|
84
122
|
|
@@ -90,15 +128,12 @@ _arguments_: none
|
|
90
128
|
client.environments.list
|
91
129
|
# example response
|
92
130
|
[
|
93
|
-
|
94
|
-
"id" => "string",
|
95
|
-
"name" => "string"
|
96
|
-
},
|
131
|
+
SplitApi::DataObjects::Environment,
|
97
132
|
# ...
|
98
133
|
]
|
99
134
|
```
|
100
135
|
|
101
|
-
### Identities
|
136
|
+
### Identities model
|
102
137
|
|
103
138
|
Available methods:
|
104
139
|
|
@@ -116,14 +151,7 @@ client.identities.save(
|
|
116
151
|
}
|
117
152
|
)
|
118
153
|
# example response:
|
119
|
-
|
120
|
-
"traffic_type_id" => "string",
|
121
|
-
"environment_id" => "string",
|
122
|
-
"key" => "string",
|
123
|
-
"values" => {
|
124
|
-
"key" => "value"
|
125
|
-
}
|
126
|
-
}
|
154
|
+
SplitApi::DataObjects::Identity
|
127
155
|
```
|
128
156
|
|
129
157
|
**update**: update identity
|
@@ -140,14 +168,7 @@ client.identities.update(
|
|
140
168
|
}
|
141
169
|
)
|
142
170
|
# example response:
|
143
|
-
|
144
|
-
"traffic_type_id" => "string",
|
145
|
-
"environment_id" => "string",
|
146
|
-
"key" => "string",
|
147
|
-
"values" => {
|
148
|
-
"key" => "value"
|
149
|
-
}
|
150
|
-
}
|
171
|
+
SplitApi::DataObjects::Identity
|
151
172
|
```
|
152
173
|
|
153
174
|
**save_all**: save multiple identities
|
@@ -171,16 +192,11 @@ client.identities.save_all("string", "string",
|
|
171
192
|
# example response:
|
172
193
|
{
|
173
194
|
[
|
174
|
-
|
175
|
-
"values" => { "foo" => "bar" },
|
176
|
-
"key" => "string",
|
177
|
-
"environment_id" => "string",
|
178
|
-
"traffic_type_id" => "string",
|
179
|
-
"organization_id" => "string",
|
180
|
-
"timestamp" => "integer"
|
181
|
-
},
|
195
|
+
SplitApi::DataObjects::Identity,
|
182
196
|
# ...
|
183
|
-
]
|
197
|
+
],
|
198
|
+
"failed": [],
|
199
|
+
"metadata": {}
|
184
200
|
}
|
185
201
|
```
|
186
202
|
|
@@ -194,7 +210,7 @@ client.identities.delete(`traffic_type_id`, `environment_id`, `key`)
|
|
194
210
|
true
|
195
211
|
```
|
196
212
|
|
197
|
-
### Traffic Types
|
213
|
+
### Traffic Types model
|
198
214
|
|
199
215
|
Available methods:
|
200
216
|
|
@@ -206,11 +222,7 @@ _arguments_: none
|
|
206
222
|
client.traffic_types.list
|
207
223
|
# example response:
|
208
224
|
[
|
209
|
-
|
210
|
-
"id": "string",
|
211
|
-
"name": "string",
|
212
|
-
"display_attribute_id": "string"
|
213
|
-
},
|
225
|
+
SplitApi::DataObjects::TrafficType
|
214
226
|
# ...
|
215
227
|
]
|
216
228
|
```
|
data/Gemfile.lock
CHANGED
data/NEWS
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Split has built and maintains a API wrappers for:
|
|
18
18
|
|
19
19
|
* Java [Github](https://github.com/splitio/java-api)
|
20
20
|
* Node [Github](https://github.com/splitio/javascript-api)
|
21
|
-
* .NET [Github](https://github.com/splitio
|
21
|
+
* .NET [Github](https://github.com/splitio/.net-api)
|
22
22
|
* Ruby [Github](https://github.com/splitio/ruby-api)
|
23
23
|
* PHP [Github](https://github.com/splitio/php-api)
|
24
24
|
* Python [Github](https://github.com/splitio/python-api)
|
data/lib/splitapi-rb.rb
CHANGED
@@ -5,6 +5,12 @@ require 'splitapi-rb/version'
|
|
5
5
|
require 'splitapi-rb/client'
|
6
6
|
require 'splitapi-rb/config'
|
7
7
|
|
8
|
+
require 'splitapi-rb/data_objects/base_data_object'
|
9
|
+
require 'splitapi-rb/data_objects/attribute'
|
10
|
+
require 'splitapi-rb/data_objects/environment'
|
11
|
+
require 'splitapi-rb/data_objects/identity'
|
12
|
+
require 'splitapi-rb/data_objects/traffic_type'
|
13
|
+
|
8
14
|
require 'splitapi-rb/models/base_model'
|
9
15
|
require 'splitapi-rb/models/attributes'
|
10
16
|
require 'splitapi-rb/models/environments'
|
data/lib/splitapi-rb/config.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
module SplitApi
|
2
2
|
class Config
|
3
|
+
DEFAULT_URI = 'https://api.split.io/internal/api/v1'.freeze
|
4
|
+
|
3
5
|
# Base URI for the API
|
4
6
|
attr_reader :base_uri
|
5
7
|
# API key to authorize API requests
|
6
8
|
attr_reader :api_key
|
7
9
|
|
8
10
|
def initialize(opts)
|
9
|
-
@base_uri = opts[:base_uri]
|
11
|
+
@base_uri = (opts[:base_uri] || DEFAULT_URI).chomp('/')
|
10
12
|
@api_key = opts[:api_key]
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SplitApi
|
2
|
+
module DataObjects
|
3
|
+
class BaseDataObject
|
4
|
+
PROPERTIES = %i().freeze # this is redefined in the subclass
|
5
|
+
|
6
|
+
def initialize(opts = {})
|
7
|
+
opts.each do |k, v|
|
8
|
+
instance_variable_set("@#{k}", v) unless v.nil?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def ==(other_obj)
|
13
|
+
self.class::PROPERTIES.all? { |property| send(property) == other_obj.send(property) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h
|
17
|
+
self.class::PROPERTIES.each_with_object({}) do |property, memo|
|
18
|
+
memo.merge!(property => instance_variable_get("@#{property}"))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -14,12 +14,22 @@ module SplitApi
|
|
14
14
|
RestClient.get(
|
15
15
|
"#{@config.base_uri}/trafficTypes/#{traffic_type_id}/schema", auth_headers
|
16
16
|
).body
|
17
|
-
)
|
17
|
+
).map do |attribute|
|
18
|
+
DataObjects::Attribute.new(
|
19
|
+
description: attribute['description'],
|
20
|
+
display_name: attribute['displayName'],
|
21
|
+
traffic_type_id: attribute['trafficTypeId'],
|
22
|
+
id: attribute['id'],
|
23
|
+
organization_id: attribute['organizationId'],
|
24
|
+
data_type: attribute['dataType'],
|
25
|
+
is_searchable: attribute['isSearchable']
|
26
|
+
)
|
27
|
+
end
|
18
28
|
end
|
19
29
|
|
20
30
|
# PUT /trafficTypes/{traffic_type_id}/schema
|
21
31
|
def save(attribute)
|
22
|
-
JSON.parse(
|
32
|
+
attribute = JSON.parse(
|
23
33
|
RestClient.put(
|
24
34
|
"#{@config.base_uri}/trafficTypes/#{attribute[:traffic_type_id]}/schema",
|
25
35
|
{
|
@@ -28,7 +38,18 @@ module SplitApi
|
|
28
38
|
'displayName' => attribute[:display_name],
|
29
39
|
'description' => attribute[:description],
|
30
40
|
'dataType' => attribute[:data_type]
|
31
|
-
}.to_json, auth_headers
|
41
|
+
}.to_json, auth_headers
|
42
|
+
).body
|
43
|
+
)
|
44
|
+
|
45
|
+
DataObjects::Attribute.new(
|
46
|
+
description: attribute['description'],
|
47
|
+
display_name: attribute['displayName'],
|
48
|
+
traffic_type_id: attribute['trafficTypeId'],
|
49
|
+
id: attribute['id'],
|
50
|
+
organization_id: attribute['organizationId'],
|
51
|
+
data_type: attribute['dataType'],
|
52
|
+
is_searchable: attribute['isSearchable']
|
32
53
|
)
|
33
54
|
end
|
34
55
|
|
@@ -10,7 +10,12 @@ module SplitApi
|
|
10
10
|
|
11
11
|
# GET /environments
|
12
12
|
def list
|
13
|
-
JSON.parse(RestClient.get("#{@config.base_uri}/environments", auth_headers).body)
|
13
|
+
JSON.parse(RestClient.get("#{@config.base_uri}/environments", auth_headers).body).map do |environment|
|
14
|
+
DataObjects::Environment.new(
|
15
|
+
id: environment['id'],
|
16
|
+
name: environment['name']
|
17
|
+
)
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
@@ -10,38 +10,72 @@ module SplitApi
|
|
10
10
|
|
11
11
|
# PUT /trafficTypes/{traffic_type_id}/environments/{environment_id}/identities/{key}
|
12
12
|
def save(identity)
|
13
|
-
JSON.parse(RestClient.put(
|
13
|
+
identity = JSON.parse(RestClient.put(
|
14
14
|
"#{@config.base_uri}/trafficTypes/#{identity[:traffic_type_id]}" \
|
15
15
|
"/environments/#{identity[:environment_id]}/identities/#{identity[:key]}",
|
16
16
|
{
|
17
17
|
'key' => identity[:key],
|
18
18
|
'trafficTypeId' => identity[:traffic_type_id],
|
19
19
|
'environmentId' => identity[:environment_id],
|
20
|
+
'organizationId' => identity[:organization_id],
|
20
21
|
'values' => identity[:values]
|
21
22
|
}.to_json, auth_headers).body)
|
23
|
+
|
24
|
+
DataObjects::Identity.new(
|
25
|
+
key: identity['key'],
|
26
|
+
traffic_type_id: identity['trafficTypeId'],
|
27
|
+
environment_id: identity['environmentId'],
|
28
|
+
organization_id: identity['organizationId'],
|
29
|
+
values: identity['values']
|
30
|
+
)
|
22
31
|
end
|
23
32
|
|
24
33
|
# POST /trafficTypes/{traffic_type_id}/environments/{environment_id}/identities
|
25
34
|
def save_all(traffic_type_id, environment_id, identities)
|
26
|
-
JSON.parse(RestClient.post(
|
35
|
+
result = JSON.parse(RestClient.post(
|
27
36
|
"#{@config.base_uri}/trafficTypes/#{traffic_type_id}" \
|
28
37
|
"/environments/#{environment_id}" \
|
29
38
|
"/identities",
|
30
39
|
identities.to_json, auth_headers).body
|
31
|
-
)
|
40
|
+
)
|
41
|
+
|
42
|
+
objects = result['objects'].map do |identity|
|
43
|
+
DataObjects::Identity.new(
|
44
|
+
key: identity['key'],
|
45
|
+
traffic_type_id: identity['trafficTypeId'],
|
46
|
+
environment_id: identity['environmentId'],
|
47
|
+
organization_id: identity['organizationId'],
|
48
|
+
values: identity['values']
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
{
|
53
|
+
objects: objects,
|
54
|
+
failed: result['failed'],
|
55
|
+
metadata: result['metadata']
|
56
|
+
}
|
32
57
|
end
|
33
58
|
|
34
59
|
# PATCH /trafficTypes/{traffic_type_id}/environments/{environment_id}/identities/{key}
|
35
60
|
def update(identity)
|
36
|
-
JSON.parse(RestClient.patch(
|
61
|
+
identity = JSON.parse(RestClient.patch(
|
37
62
|
"#{@config.base_uri}/trafficTypes/#{identity[:traffic_type_id]}" \
|
38
63
|
"/environments/#{identity[:environment_id]}/identities/#{identity[:key]}",
|
39
64
|
{
|
40
65
|
'key' => identity[:key],
|
41
66
|
'trafficTypeId' => identity[:traffic_type_id],
|
42
67
|
'environmentId' => identity[:environment_id],
|
68
|
+
'organizationId' => identity[:organization_id],
|
43
69
|
'values' => identity[:values]
|
44
70
|
}.to_json, auth_headers).body)
|
71
|
+
|
72
|
+
DataObjects::Identity.new(
|
73
|
+
key: identity['key'],
|
74
|
+
traffic_type_id: identity['trafficTypeId'],
|
75
|
+
environment_id: identity['environmentId'],
|
76
|
+
organization_id: identity['organizationId'],
|
77
|
+
values: identity['values']
|
78
|
+
)
|
45
79
|
end
|
46
80
|
|
47
81
|
# DELETE /trafficTypes/{traffic_type_id}/environments/{environment_id}/identities/{key}
|
@@ -10,7 +10,13 @@ module SplitApi
|
|
10
10
|
|
11
11
|
# GET /trafficTypes
|
12
12
|
def list
|
13
|
-
JSON.parse(RestClient.get("#{@config.base_uri}/trafficTypes", auth_headers).body)
|
13
|
+
JSON.parse(RestClient.get("#{@config.base_uri}/trafficTypes", auth_headers).body).map do |traffic_type|
|
14
|
+
DataObjects::TrafficType.new(
|
15
|
+
id: traffic_type['id'],
|
16
|
+
display_attribute_id: traffic_type['displayAttributeId'],
|
17
|
+
name: traffic_type['name']
|
18
|
+
)
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
data/lib/splitapi-rb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splitapi-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Split Software
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -155,6 +155,11 @@ files:
|
|
155
155
|
- lib/splitapi-rb.rb
|
156
156
|
- lib/splitapi-rb/client.rb
|
157
157
|
- lib/splitapi-rb/config.rb
|
158
|
+
- lib/splitapi-rb/data_objects/attribute.rb
|
159
|
+
- lib/splitapi-rb/data_objects/base_data_object.rb
|
160
|
+
- lib/splitapi-rb/data_objects/environment.rb
|
161
|
+
- lib/splitapi-rb/data_objects/identity.rb
|
162
|
+
- lib/splitapi-rb/data_objects/traffic_type.rb
|
158
163
|
- lib/splitapi-rb/exceptions/splitapi_exception.rb
|
159
164
|
- lib/splitapi-rb/exceptions/splitapi_not_found_exception.rb
|
160
165
|
- lib/splitapi-rb/models/attributes.rb
|