bernoulli-metrics 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/bernoulli.rb +47 -0
  3. data/tests/tests.rb +64 -0
  4. metadata +88 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ab39610307cd757c6b6b10aea218f146d0213769
4
+ data.tar.gz: 045decaa3e6221ca98b38a5797595d58c793109d
5
+ SHA512:
6
+ metadata.gz: 04a0e74482e683730a12a02b016f59168d881f9d8bf6c9fd26d72ff46b2363473caaa33e800ffcce56fbbb09e81d09e2dbcb59764b9439fefe878858d6e565b5
7
+ data.tar.gz: ec73928f534a133e2fd68a210e52e7f15c76716cc279d838a2df2f4b5c1488eae212db9c4bd8198ef438b51d8965ae975700041d0dea6450480f67d0399991d1
data/lib/bernoulli.rb ADDED
@@ -0,0 +1,47 @@
1
+ require 'rest_client'
2
+ require 'json'
3
+
4
+ class Bernoulli
5
+ URL = 'https://bernoulli.herokuapp.com/client/api/experiments/'
6
+
7
+ def self.get_experiments(client_id, experiment_ids, user_id, segment_data, should_bucket=true)
8
+ if client_id == nil
9
+ raise ArgumentError, 'client_id'
10
+ end
11
+
12
+ if experiment_ids.kind_of?(Array)
13
+ experiment_ids = experiment_ids.join(',')
14
+ end
15
+
16
+ response = RestClient.get(URL, {
17
+ :accept => :json,
18
+ :params => {
19
+ :clientId => client_id,
20
+ :experimentIds => experiment_ids,
21
+ :userId => user_id,
22
+ :segmentData => segment_data,
23
+ :shouldBucketIfNecessary => should_bucket,
24
+ }
25
+ })
26
+
27
+ data = JSON.parse(response)
28
+
29
+ if data['status'] == 'ok'
30
+ return data['value']
31
+ else
32
+ raise data['message']
33
+ end
34
+
35
+ end
36
+
37
+ def self.goal_attained(client_id, experiment_id, user_id)
38
+ response = RestClient.post(URL, {
39
+ :clientId => client_id,
40
+ :experimentId => experiment_id,
41
+ :userId => user_id,
42
+ })
43
+
44
+ data = JSON.parse(response)
45
+ return data['status'] == 'ok'
46
+ end
47
+ end
data/tests/tests.rb ADDED
@@ -0,0 +1,64 @@
1
+ require_relative '../lib/bernoulli'
2
+ require 'webmock/rspec'
3
+ require 'json'
4
+
5
+ describe Bernoulli do
6
+ it 'throws when no client_id is given' do
7
+ has_thrown = false
8
+ begin
9
+ Bernoulli.get_experiments(nil, 'first', 'user59', nil, true)
10
+ rescue
11
+ has_thrown = true
12
+ end
13
+
14
+ has_thrown.should eql(true)
15
+ end
16
+
17
+ it 'handles success' do
18
+ ret_val = {
19
+ :status => 'ok',
20
+ :value => [{
21
+ :id => 32
22
+ }]
23
+ }
24
+ stub_request(:get, "http://localhost:5000/client/api/experiments/?clientId=1&experimentIds=first&segmentData=&shouldBucketIfNecessary=true&userId=user59").to_return(
25
+ :body => ret_val.to_json)
26
+
27
+ response = Bernoulli.get_experiments(1, 'first', 'user59', nil, true)
28
+ response.length.should eql(1)
29
+ response[0]['id'].should eql(32)
30
+ end
31
+
32
+ it 'handles failure' do
33
+ ret_val = {
34
+ :status => 'error',
35
+ :message => 'invalid clientId',
36
+ }
37
+
38
+ stub_request(:get, "http://localhost:5000/client/api/experiments/?clientId=1&experimentIds=first&segmentData=&shouldBucketIfNecessary=true&userId=user59").to_return(
39
+ :body => ret_val.to_json)
40
+
41
+ has_thrown = false
42
+ begin
43
+ response = Bernoulli.get_experiments(1, 'first', 'user59', nil, true)
44
+ rescue
45
+ has_thrown = true
46
+ end
47
+
48
+ has_thrown.should eql(true)
49
+ end
50
+
51
+ it 'goal attained makes call' do
52
+ ret_val = {
53
+ :status => 'ok',
54
+ :value => true,
55
+ }
56
+
57
+ stub_request(:post, "http://localhost:5000/client/api/experiments/").to_return(
58
+ :body => ret_val.to_json)
59
+
60
+ response = Bernoulli.goal_attained(1, 'first', 'user59')
61
+
62
+ response.should eql(true)
63
+ end
64
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bernoulli-metrics
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Joe Gasiorek
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 2.14.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 2.14.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: webmock
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.17.3
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.17.3
55
+ description: Bernoulli a/b testing platform
56
+ email: joe.gasiorek@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/bernoulli.rb
62
+ - tests/tests.rb
63
+ homepage: http://github.com/joeyg
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.2.2
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Ruby gem for Bernoulli
87
+ test_files:
88
+ - tests/tests.rb