bernoulli-metrics 0.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.
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