optimizely 1.2.1 → 1.2.2
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/.gitignore +2 -1
- data/Gemfile +1 -3
- data/Gemfile.lock +20 -5
- data/lib/optimizely/engine.rb +149 -170
- data/lib/optimizely/experiment.rb +7 -2
- data/lib/optimizely/project.rb +7 -2
- data/lib/optimizely/variation.rb +18 -13
- data/lib/optimizely/version.rb +1 -1
- data/optimizely.gemspec +8 -2
- metadata +63 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 16e4c9c9f52348b79e7fcad30925d0b718658925
|
|
4
|
+
data.tar.gz: 4a8b4e33663afe5bdc4f627ab040d78e08579e23
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2d9d10c4893688e1cb96fd4542e6892b510f8fda1d13e562642bba5144d8d8c0707126a8dbfdea4dc3690c47b5cfd6ed6b803a3fc270f6c0ea2119e7a36edc55
|
|
7
|
+
data.tar.gz: d7c300fe8d53ddb225dd9bb28eb68d7446db43c8847fb4a63cea86c8bf21a10f797965060811b9682c3c2e8fc6c57a56b09bb22ac5b7ea0add33a11314937b9f
|
data/.gitignore
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
.DS_Store
|
|
1
|
+
.DS_Store
|
|
2
|
+
*.swp
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -2,18 +2,33 @@ PATH
|
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
4
|
optimizely (1.2.1)
|
|
5
|
+
json (~> 1.8.3)
|
|
5
6
|
|
|
6
7
|
GEM
|
|
7
8
|
remote: http://www.rubygems.org/
|
|
8
9
|
specs:
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
coderay (1.1.0)
|
|
11
|
+
json (1.8.3)
|
|
12
|
+
method_source (0.8.2)
|
|
13
|
+
power_assert (0.2.4)
|
|
14
|
+
pry (0.10.1)
|
|
15
|
+
coderay (~> 1.1.0)
|
|
16
|
+
method_source (~> 0.8.1)
|
|
17
|
+
slop (~> 3.4)
|
|
18
|
+
rake (10.4.2)
|
|
19
|
+
slop (3.6.0)
|
|
20
|
+
test-unit (3.1.2)
|
|
21
|
+
power_assert
|
|
11
22
|
|
|
12
23
|
PLATFORMS
|
|
13
24
|
ruby
|
|
14
25
|
|
|
15
26
|
DEPENDENCIES
|
|
16
|
-
bundler
|
|
17
|
-
json
|
|
27
|
+
bundler (~> 1.10.6)
|
|
18
28
|
optimizely!
|
|
19
|
-
|
|
29
|
+
pry (~> 0.10.1)
|
|
30
|
+
rake (~> 10.4.2)
|
|
31
|
+
test-unit (~> 3.1.2)
|
|
32
|
+
|
|
33
|
+
BUNDLED WITH
|
|
34
|
+
1.10.6
|
data/lib/optimizely/engine.rb
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
module Optimizely
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
2
|
+
class Engine
|
|
3
|
+
|
|
4
|
+
BASE_URL = "https://www.optimizelyapis.com/experiment/v1/"
|
|
5
|
+
|
|
6
|
+
attr_accessor :url
|
|
7
|
+
|
|
8
|
+
# Initialize Optimizely using an API token.
|
|
9
|
+
#
|
|
10
|
+
# == Options:
|
|
11
|
+
# +:api_token+:: Use an API token you received before.
|
|
12
|
+
# +:timeout+:: Set Net:HTTP timeout in seconds (default is 300).
|
|
13
|
+
#
|
|
14
|
+
def initialize(options={})
|
|
15
|
+
@options = options
|
|
16
|
+
check_init_auth_requirements
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Initalize the Token so it can be used in every request we'll do later on.
|
|
20
|
+
# Besides that also set the authentication header.
|
|
21
|
+
def token=(token)
|
|
22
22
|
@token = token
|
|
23
23
|
set_headers
|
|
24
24
|
end
|
|
@@ -29,13 +29,13 @@ module Optimizely
|
|
|
29
29
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
30
30
|
# projects = optimizely.projects # Look up all projects.
|
|
31
31
|
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
def projects
|
|
33
|
+
if @projects.nil?
|
|
34
|
+
response = self.get("projects")
|
|
35
|
+
@projects = response.collect { |project_json| Project.new(project_json) }
|
|
36
|
+
end
|
|
37
|
+
@projects
|
|
38
|
+
end
|
|
39
39
|
|
|
40
40
|
# Returns the details for a specific project.
|
|
41
41
|
#
|
|
@@ -43,16 +43,13 @@ module Optimizely
|
|
|
43
43
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
44
44
|
# project = optimizely.project(12345) # Look up the project.
|
|
45
45
|
#
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
def project(id)
|
|
47
|
+
@url = "projects/#{id}"
|
|
48
|
+
raise OptimizelyError::NoProjectID, "A Project ID is required to retrieve the project." if id.nil?
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
end
|
|
54
|
-
@project
|
|
55
|
-
end
|
|
50
|
+
response = self.get(@url)
|
|
51
|
+
Project.new(response)
|
|
52
|
+
end
|
|
56
53
|
|
|
57
54
|
# Returns the list of experiments for a specified project.
|
|
58
55
|
#
|
|
@@ -60,15 +57,12 @@ module Optimizely
|
|
|
60
57
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
61
58
|
# experiments = optimizely.experiments(12345) # Look up all experiments for a project.
|
|
62
59
|
#
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
def experiments(project_id)
|
|
61
|
+
raise OptimizelyError::NoProjectID, "A Project ID is required to retrieve experiments." if project_id.nil?
|
|
65
62
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
end
|
|
70
|
-
@experiments
|
|
71
|
-
end
|
|
63
|
+
response = self.get("projects/#{project_id}/experiments")
|
|
64
|
+
response.collect { |response_json| Experiment.new(response_json) }
|
|
65
|
+
end
|
|
72
66
|
|
|
73
67
|
# Returns the details for a specific experiment.
|
|
74
68
|
#
|
|
@@ -76,16 +70,13 @@ module Optimizely
|
|
|
76
70
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
77
71
|
# experiment = optimizely.experiment(12345) # Look up the experiment.
|
|
78
72
|
#
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
def experiment(id)
|
|
74
|
+
@url = "experiments/#{id}"
|
|
75
|
+
raise OptimizelyError::NoExperimentID, "An Experiment ID is required to retrieve the experiment." if id.nil?
|
|
82
76
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
end
|
|
87
|
-
@experiment
|
|
88
|
-
end
|
|
77
|
+
response = self.get(@url)
|
|
78
|
+
Experiment.new(response)
|
|
79
|
+
end
|
|
89
80
|
|
|
90
81
|
# Returns the list of variations for a specified experiment.
|
|
91
82
|
#
|
|
@@ -93,15 +84,12 @@ module Optimizely
|
|
|
93
84
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
94
85
|
# variations = optimizely.variations(12345) # Look up all variations for an experiment.
|
|
95
86
|
#
|
|
96
|
-
|
|
97
|
-
|
|
87
|
+
def variations(experiment_id)
|
|
88
|
+
raise OptimizelyError::NoExperimentID, "An Experiment ID is required to retrieve variations." if experiment_id.nil?
|
|
98
89
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
end
|
|
103
|
-
@variations
|
|
104
|
-
end
|
|
90
|
+
response = self.get("experiments/#{experiment_id}/variations")
|
|
91
|
+
response.collect { |variation_json| Variation.new(variation_json) }
|
|
92
|
+
end
|
|
105
93
|
|
|
106
94
|
# Returns the details for a specific variation.
|
|
107
95
|
#
|
|
@@ -109,16 +97,13 @@ module Optimizely
|
|
|
109
97
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
110
98
|
# variation = optimizely.variation(12345) # Look up the variation.
|
|
111
99
|
#
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
100
|
+
def variation(id)
|
|
101
|
+
@url = "variations/#{id}"
|
|
102
|
+
raise OptimizelyError::NoVariationID, "A Variation ID is required to retrieve the variation." if id.nil?
|
|
115
103
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
end
|
|
120
|
-
@variation
|
|
121
|
-
end
|
|
104
|
+
response = self.get(@url)
|
|
105
|
+
Variation.new(response)
|
|
106
|
+
end
|
|
122
107
|
|
|
123
108
|
# Returns the list of audiences for a specified project.
|
|
124
109
|
#
|
|
@@ -126,15 +111,12 @@ module Optimizely
|
|
|
126
111
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
127
112
|
# audiences = optimizely.audiences(12345) # Look up all audiences for a project.
|
|
128
113
|
#
|
|
129
|
-
|
|
130
|
-
|
|
114
|
+
def audiences(project_id)
|
|
115
|
+
raise OptimizelyError::NoProjectID, "A Project ID is required to retrieve audiences." if project_id.nil?
|
|
131
116
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
end
|
|
136
|
-
@audiences
|
|
137
|
-
end
|
|
117
|
+
response = self.get("projects/#{project_id}/audiences")
|
|
118
|
+
response.collect { |audience_json| Audience.new(audience_json) }
|
|
119
|
+
end
|
|
138
120
|
|
|
139
121
|
# Returns the details for a specific audience.
|
|
140
122
|
#
|
|
@@ -142,78 +124,75 @@ module Optimizely
|
|
|
142
124
|
# optimizely = Optimizely.new({ api_token: 'oauth2_token' })
|
|
143
125
|
# audience = optimizely.audience(12345) # Look up the audience.
|
|
144
126
|
#
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
response = https.request(request)
|
|
165
|
-
|
|
166
|
-
# Response code error checking
|
|
127
|
+
def audience(id)
|
|
128
|
+
@url = "audiences/#{id}"
|
|
129
|
+
raise OptimizelyError::NoAudienceID, "An Audience ID is required to retrieve the audience." if id.nil?
|
|
130
|
+
|
|
131
|
+
response = self.get(@url)
|
|
132
|
+
Audience.new(response)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Return the parsed JSON data for a request that is done to the Optimizely REST API.
|
|
136
|
+
def get(url)
|
|
137
|
+
uri = URI.parse("#{BASE_URL}#{url}/")
|
|
138
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
|
139
|
+
https.read_timeout = @options[:timeout] if @options[:timeout]
|
|
140
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
141
|
+
https.use_ssl = true
|
|
142
|
+
request = Net::HTTP::Get.new(uri.request_uri, @headers)
|
|
143
|
+
response = https.request(request)
|
|
144
|
+
|
|
145
|
+
# Response code error checking
|
|
167
146
|
if response.code != '200'
|
|
168
147
|
check_response(response.code, response.body)
|
|
169
148
|
else
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
149
|
+
parse_json(response.body)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def post
|
|
154
|
+
uri = URI.parse("#{BASE_URL}#{url}/")
|
|
155
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
|
156
|
+
https.read_timeout = @options[:timeout] if @options[:timeout]
|
|
157
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
158
|
+
https.use_ssl = true
|
|
159
|
+
request = Net::HTTP::Post.new(uri.request_uri, @headers)
|
|
160
|
+
response = https.request(request)
|
|
161
|
+
|
|
162
|
+
# Response code error checking
|
|
184
163
|
check_response(response.code, response.body) if response.code != '201'
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def put
|
|
167
|
+
uri = URI.parse("#{BASE_URL}#{url}/")
|
|
168
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
|
169
|
+
https.read_timeout = @options[:timeout] if @options[:timeout]
|
|
170
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
171
|
+
https.use_ssl = true
|
|
172
|
+
request = Net::HTTP::Put.new(uri.request_uri, @headers)
|
|
173
|
+
response = https.request(request)
|
|
174
|
+
|
|
175
|
+
# Response code error checking
|
|
197
176
|
check_response(response.code, response.body) if response.code != '202'
|
|
198
|
-
|
|
177
|
+
end
|
|
199
178
|
|
|
200
|
-
|
|
201
|
-
|
|
179
|
+
def delete
|
|
180
|
+
raise OptimizelyError::NoId, "An ID is required to delete data." if @url.nil?
|
|
202
181
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
182
|
+
uri = URI.parse("#{BASE_URL}#{@url}")
|
|
183
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
|
184
|
+
https.read_timeout = @options[:timeout] if @options[:timeout]
|
|
185
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
186
|
+
https.use_ssl = true
|
|
187
|
+
request = Net::HTTP::Delete.new(uri.request_uri, @headers)
|
|
188
|
+
response = https.request(request)
|
|
210
189
|
|
|
211
|
-
|
|
190
|
+
# Response code error checking
|
|
212
191
|
check_response(response.code, response.body) if response.code != '204'
|
|
213
|
-
|
|
192
|
+
end
|
|
214
193
|
|
|
215
|
-
|
|
216
|
-
|
|
194
|
+
def check_response(code, body)
|
|
195
|
+
case code
|
|
217
196
|
when '400'
|
|
218
197
|
raise OptimizelyError::BadRequest, body + "Your request was not sent in valid JSON. (status code: #{code})."
|
|
219
198
|
when '401'
|
|
@@ -221,37 +200,37 @@ module Optimizely
|
|
|
221
200
|
when '403'
|
|
222
201
|
raise OptimizelyError::Forbidden, body + "You provided an API token but it was invalid or revoked, or if you don't have read/ write access to the entity you're trying to view/edit (status code: #{code})."
|
|
223
202
|
when '404'
|
|
224
|
-
|
|
203
|
+
raise OptimizelyError::NotFound, body + "The id used in the request was inaccurate or you didn't have permission to view/edit it (status code: #{code})."
|
|
225
204
|
else
|
|
226
205
|
raise OptimizelyError::UnknownError, body + " (status code: #{code})."
|
|
227
206
|
end
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
private
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
# If there is no API token or an empty API token raise an exception.
|
|
214
|
+
def check_init_auth_requirements
|
|
215
|
+
if @options[:api_token].nil? || @options[:api_token].empty?
|
|
216
|
+
raise OptimizelyError::NoAPIToken, "An API token is required to initialize Optimizely."
|
|
217
|
+
else
|
|
218
|
+
self.token = @options[:api_token]
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# As the authentication for the Optimizely Experiments API is handled via the
|
|
223
|
+
# Token header in every request we set the header + also make clear we expect JSON.
|
|
224
|
+
def set_headers
|
|
225
|
+
@headers = {}
|
|
226
|
+
@headers['Token'] = @token
|
|
227
|
+
@headers['Content-Type'] = "application/json"
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Parse the JSON data that's been requested through the get method.
|
|
231
|
+
def parse_json(data)
|
|
232
|
+
json = JSON.parse(data)
|
|
233
|
+
json
|
|
234
|
+
end
|
|
235
|
+
end
|
|
257
236
|
end
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
module Optimizely
|
|
2
|
-
|
|
2
|
+
class Experiment
|
|
3
3
|
|
|
4
4
|
attr_reader :id, :project_id, :variation_ids, :edit_url, :status
|
|
5
5
|
|
|
6
6
|
def initialize(json)
|
|
7
|
+
@json = json
|
|
7
8
|
@id = json['id']
|
|
8
9
|
@project_id = json['project_id']
|
|
9
10
|
@variation_ids = json['variation_ids']
|
|
@@ -11,5 +12,9 @@ module Optimizely
|
|
|
11
12
|
@status = json['status']
|
|
12
13
|
end
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
def [](x)
|
|
16
|
+
return @json[x]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
15
20
|
end
|
data/lib/optimizely/project.rb
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
module Optimizely
|
|
2
|
-
|
|
2
|
+
class Project
|
|
3
3
|
|
|
4
4
|
attr_reader :project_name, :project_status, :id, :account_id
|
|
5
5
|
|
|
6
6
|
def initialize(json)
|
|
7
|
+
@json = json
|
|
7
8
|
@project_name = json['project_name']
|
|
8
9
|
@project_status = json['project_status']
|
|
9
10
|
@id = json['id']
|
|
10
11
|
@account_id = json['account_id']
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
def [](x)
|
|
15
|
+
return @json[x]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
14
19
|
end
|
data/lib/optimizely/variation.rb
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
module Optimizely
|
|
2
|
-
|
|
2
|
+
class Variation
|
|
3
3
|
|
|
4
4
|
attr_reader :is_paused, :description, :weight, :created, :variation_id,
|
|
5
|
-
|
|
5
|
+
:section_id, :js_component, :experiment_id, :project_id, :id
|
|
6
6
|
|
|
7
7
|
def initialize(json)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
@json = json
|
|
9
|
+
@is_paused = json['is_paused']
|
|
10
|
+
@description = json['description']
|
|
11
|
+
@weight = json['weight']
|
|
12
|
+
@created = DateTime.parse(json['created'])
|
|
13
|
+
@variation_id = json['variation_id']
|
|
14
|
+
@section_id = json['section_id']
|
|
15
|
+
@js_component = json['js_component']
|
|
16
|
+
@experiment_id = json['experiment_id']
|
|
17
|
+
@project_id = json['project_id']
|
|
18
|
+
@id = json['id']
|
|
18
19
|
end
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
def [](x)
|
|
22
|
+
return @json[x]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
21
26
|
end
|
data/lib/optimizely/version.rb
CHANGED
data/optimizely.gemspec
CHANGED
|
@@ -17,5 +17,11 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
18
18
|
s.require_paths = ["lib"]
|
|
19
19
|
s.extra_rdoc_files = ["README.md"]
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
|
|
21
|
+
s.add_runtime_dependency 'json', '~> 1.8.3'
|
|
22
|
+
|
|
23
|
+
s.add_development_dependency 'bundler', '~> 1.10.6'
|
|
24
|
+
s.add_development_dependency 'rake', '~> 10.4.2'
|
|
25
|
+
s.add_development_dependency 'test-unit', '~> 3.1.2'
|
|
26
|
+
s.add_development_dependency 'pry', '~> 0.10.1'
|
|
27
|
+
end
|
metadata
CHANGED
|
@@ -1,29 +1,85 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: optimizely
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Martijn Scheijbeler
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: json
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ~>
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 1.8.3
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ~>
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 1.8.3
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ~>
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 1.10.6
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ~>
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 1.10.6
|
|
13
41
|
- !ruby/object:Gem::Dependency
|
|
14
42
|
name: rake
|
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
|
16
44
|
requirements:
|
|
17
|
-
- -
|
|
45
|
+
- - ~>
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 10.4.2
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ~>
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 10.4.2
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: test-unit
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ~>
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 3.1.2
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ~>
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 3.1.2
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: pry
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ~>
|
|
18
74
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
75
|
+
version: 0.10.1
|
|
20
76
|
type: :development
|
|
21
77
|
prerelease: false
|
|
22
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
79
|
requirements:
|
|
24
|
-
- -
|
|
80
|
+
- - ~>
|
|
25
81
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
82
|
+
version: 0.10.1
|
|
27
83
|
description: A Ruby gem to communicate with the Optimizely Experiments API, it lets
|
|
28
84
|
you create and manage Optimizely projects and experiments.
|
|
29
85
|
email: martijn@marusem.com
|
|
@@ -67,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
67
123
|
version: '0'
|
|
68
124
|
requirements: []
|
|
69
125
|
rubyforge_project:
|
|
70
|
-
rubygems_version: 2.
|
|
126
|
+
rubygems_version: 2.4.2
|
|
71
127
|
signing_key:
|
|
72
128
|
specification_version: 4
|
|
73
129
|
summary: The Optimizely Experiment API lets you create and manage Optimizely projects
|