bucket_maker 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YzdkOTI0ZTZjZWMwNTFjNjczODIwNDg5NGYwMjlmZmJhYzVhODFhNA==
5
- data.tar.gz: !binary |-
6
- YmE3NjUxNjgwY2VhMzhkZDEwMmFmYmQ0NzY2OGY1YTJhOGFiMTU1Mg==
2
+ SHA1:
3
+ metadata.gz: 30ed3c7cb0fb1f9410f4b1b51a88469a6513c828
4
+ data.tar.gz: 1403adca94c8adf93701ffad2a142504018231cf
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZjQ3ZThhNWM4OWJlYTU5MDJmMWU1NTg4NTM1NDA5MWMxOWYyZDQ3MWNjY2Nh
10
- YWZmZDU0ZWQ3MmZhZjgzM2M1YzNmOWNkN2JlNzYxYTE2MTA1NGQzODI3OGZk
11
- OTkxYmFmYTYxZTJmODA1ZDI1NzRmOGNiYjE1Zjk4NTFiMjFkYjY=
12
- data.tar.gz: !binary |-
13
- OGQ4NzY2OGZhNzM3ODU3ZTFhMjdkZDczZDNiZTg0Njg4NDFiNWQ3ZjMwY2U3
14
- YmU4M2RiOGRkNTU0ZjRlZDQxMzcxYjM2MGQ3NTk3NTFlZWMxNDhhMjJkMmQ0
15
- MTNkMzU1ZTIyYWZjMjc0MzgxZGI5M2Q3ZTE5ZDEzODkzMzdjZDE=
6
+ metadata.gz: 17a7ac4bf551b6bc25d8139f28c468f946420496f2ddfef1bd4ec0745edfcdf24b029c49f8d672aa303872b54501070fb26ee8907c9ff40012b2cff162b93128
7
+ data.tar.gz: e3d990dc3997393806f57bcc6dabd8374a5388e8d619ce9b2dc05650985d519c2159b2168e4f6445b7e34616363c09971078068bfdd51059b1672ca3786e8106
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  .config
5
5
  .yardoc
6
6
  .log
7
+ gemfiles/
7
8
  Gemfile.lock
8
9
  InstalledFiles
9
10
  _yardoc
@@ -17,3 +18,4 @@ test/tmp
17
18
  test/version_tmp
18
19
  tmp
19
20
  *.log
21
+ spec/dummy/log
data/.travis.yml CHANGED
@@ -1,12 +1,14 @@
1
1
  cache: bundler
2
2
  language:
3
3
  - ruby
4
- before_install: gem install bundler -v=1.5.1
4
+ before_install: gem install bundler
5
5
  install:
6
6
  - 'bundle install'
7
7
  rvm:
8
8
  - 1.9.3
9
9
  - 2.0.0
10
10
  - 2.1.0
11
+ - 2.1.2
12
+ script: 'bundle exec rspec'
11
13
  env:
12
14
  - COVERALLS=true
data/README.md CHANGED
@@ -5,6 +5,8 @@
5
5
  [![Build Status](https://travis-ci.org/dinks/bucket_maker.png?branch=master)](https://travis-ci.org/dinks/bucket_maker)
6
6
  [![Coverage Status](https://coveralls.io/repos/dinks/bucket_maker/badge.png)](https://coveralls.io/r/dinks/bucket_maker)
7
7
  [![Dependency Status](https://gemnasium.com/dinks/bucket_maker.png)](https://gemnasium.com/dinks/bucket_maker)
8
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/dinks/bucket_maker/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
9
+ [![bucket_maker API Documentation](https://www.omniref.com/ruby/gems/bucket_maker.png)](https://www.omniref.com/ruby/gems/bucket_maker)
8
10
 
9
11
  A Gem to categorize Objects into buckets. Typical use case is an A/B test for Users
10
12
 
data/bucket_maker.gemspec CHANGED
@@ -29,8 +29,12 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "activerecord", ">= 3.1.0" # For model test
30
30
  spec.add_development_dependency "sqlite3"
31
31
  spec.add_development_dependency "appraisal" # Check against different Rails Versions
32
- spec.add_development_dependency "capybara", "= 2.0.3"
33
- spec.add_development_dependency "pry-debugger"
32
+ spec.add_development_dependency "capybara" # "= 2.0.3"
33
+ if RUBY_VERSION > "1.9.3"
34
+ spec.add_development_dependency "pry-byebug"
35
+ else
36
+ spec.add_development_dependency "pry-debugger"
37
+ end
34
38
  spec.add_development_dependency "rspec-rails"
35
39
  spec.add_development_dependency "factory_girl_rails"
36
40
  spec.add_development_dependency "mock_redis"
@@ -32,8 +32,8 @@ module BucketMaker
32
32
 
33
33
  # Iterator going through each bucket
34
34
  #
35
- def each_bucket
36
- @buckets.each do |bucket_name, bucket|
35
+ def map_bucket
36
+ @buckets.map do |bucket_name, bucket|
37
37
  yield bucket_name, bucket
38
38
  end if block_given?
39
39
  end
@@ -1,4 +1,5 @@
1
1
  require 'singleton'
2
+ require 'yaml'
2
3
  require 'active_support/inflector'
3
4
  require 'bucket_maker/series'
4
5
  require 'bucket_maker/bucket'
@@ -25,7 +26,7 @@ module BucketMaker
25
26
  absolute_config_path = Rails.root + config
26
27
 
27
28
  if File.exists?(absolute_config_path)
28
- @configuration = YAML.load_file(absolute_config_path)
29
+ @configuration = ::YAML.load_file(absolute_config_path)
29
30
 
30
31
  @series = @configuration[BUCKET_ROOT].inject({}) do |result, (series_name, series_options)|
31
32
  result[series_name.to_sym] = BucketMaker::Series.new(series_name, series_options)
@@ -47,9 +48,9 @@ module BucketMaker
47
48
  #
48
49
  def for_each_series_with_bucketable
49
50
  @series.map do |series_name, series|
50
- series.each_bucket do |bucket_name, bucket|
51
+ series.map_bucket do |bucket_name, bucket|
51
52
  yield self, series_name, bucket_name
52
- end
53
+ end.inject(true) {|result, value| result && value }
53
54
  end.inject(true) {|result, value| result && value } if block_given?
54
55
  end
55
56
 
@@ -1,5 +1,5 @@
1
1
  module BucketMaker
2
2
  # Get the version number
3
3
  #
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
  end
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
  require 'json'
3
3
 
4
- describe BucketMakerController do
4
+ describe BucketMakerController, type: :controller do
5
5
 
6
6
  let(:user) { build(:user) }
7
7
 
8
8
  before do
9
- ApplicationController.any_instance.stub(:set_current_user) { true }
9
+ allow_any_instance_of(ApplicationController).to receive(:set_current_user).and_return(true)
10
10
  controller.instance_variable_set(:@current_user, user)
11
11
  end
12
12
 
@@ -19,7 +19,7 @@ describe BucketMakerController do
19
19
  before { get :show, series_name: 'test_series_one', bucket_name: 'actual_test_one', group_name: 'group_one'}
20
20
 
21
21
  it 'returns failure' do
22
- response.should_not be_success
22
+ expect(response.status).to eql(401)
23
23
  end
24
24
  end
25
25
 
@@ -27,7 +27,7 @@ describe BucketMakerController do
27
27
  before { post :switch, series_name: 'test_series_one', bucket_name: 'actual_test_one', group_name: 'group_one'}
28
28
 
29
29
  it 'returns failure' do
30
- response.should_not be_success
30
+ expect(response.status).to eql(401)
31
31
  end
32
32
  end
33
33
 
@@ -35,7 +35,7 @@ describe BucketMakerController do
35
35
  before { post :randomize, series_name: 'test_series_one', bucket_name: 'actual_test_one'}
36
36
 
37
37
  it 'returns failure' do
38
- response.should_not be_success
38
+ expect(response.status).to eql(401)
39
39
  end
40
40
  end
41
41
  end
@@ -46,7 +46,7 @@ describe BucketMakerController do
46
46
  before { get :show, series_name: 'non_existant_series', bucket_name: 'actual_test_one', group_name: 'group_one'}
47
47
 
48
48
  it 'returns failure' do
49
- response.should_not be_success
49
+ expect(response.status).to eql(404)
50
50
  end
51
51
  end
52
52
 
@@ -54,7 +54,7 @@ describe BucketMakerController do
54
54
  before { post :switch, series_name: 'non_existant_series', bucket_name: 'actual_test_one', group_name: 'group_one'}
55
55
 
56
56
  it 'returns failure' do
57
- response.should_not be_success
57
+ expect(response.status).to eql(404)
58
58
  end
59
59
  end
60
60
 
@@ -62,7 +62,7 @@ describe BucketMakerController do
62
62
  before { post :randomize, series_name: 'non_existant_series', bucket_name: 'actual_test_one'}
63
63
 
64
64
  it 'returns failure' do
65
- response.should_not be_success
65
+ expect(response.status).to eql(404)
66
66
  end
67
67
  end
68
68
  end
@@ -70,17 +70,17 @@ describe BucketMakerController do
70
70
  context 'for get group' do
71
71
  it 'returns success' do
72
72
  get :show, series_name: 'test_series_one', bucket_name: 'actual_test_one', group_name: 'group_one'
73
- response.should be_success
73
+ expect(response.status).to eql(200)
74
74
  end
75
75
 
76
76
  context 'for the correct bucket' do
77
77
  before do
78
- user.stub(:in_bucket?).with('test_series_one', 'actual_test_one', 'group_one') { true }
78
+ allow(user).to receive(:in_bucket?).and_return(true)
79
79
  get :show, series_name: 'test_series_one', bucket_name: 'actual_test_one', group_name: 'group_one'
80
80
  end
81
81
 
82
82
  it 'has a true response' do
83
- response.body.should include('true')
83
+ expect(response.body).to include('true')
84
84
  end
85
85
  end
86
86
  end
@@ -89,11 +89,11 @@ describe BucketMakerController do
89
89
  before { post :switch, series_name: 'test_series_one', bucket_name: 'actual_test_one', group_name: 'group_one'}
90
90
 
91
91
  it 'returns success' do
92
- response.should be_success
92
+ expect(response.status).to eql(200)
93
93
  end
94
94
 
95
95
  it 'has a true response' do
96
- response.body.should include('true')
96
+ expect(response.body).to include('true')
97
97
  end
98
98
  end
99
99
 
@@ -101,11 +101,11 @@ describe BucketMakerController do
101
101
  before { post :randomize, series_name: 'test_series_one', bucket_name: 'actual_test_one'}
102
102
 
103
103
  it 'returns success' do
104
- response.should be_success
104
+ expect(response.status).to eql(200)
105
105
  end
106
106
 
107
107
  it 'has a true response' do
108
- response.body.should include('true')
108
+ expect(response.body).to include('true')
109
109
  end
110
110
  end
111
111
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Routes' do
3
+ describe 'Routes', type: :routing do
4
4
  context 'with default routes' do
5
5
  it 'should have get bucket route' do
6
6
  expect(get: '/2bOrNot2B/test_series_one/actual_test_one/group_one.json').to route_to(
@@ -36,18 +36,22 @@ describe 'Routes' do
36
36
  end
37
37
 
38
38
  context 'with special prefix' do
39
+ let(:new_path) { 'non_default_path/' }
40
+
39
41
  around do |example|
40
42
  default_base_path = BucketMaker.configuration.path_prefix
41
- BucketMaker.configuration.path_prefix = 'non_default_path'
43
+ BucketMaker.configuration.path_prefix = new_path
42
44
 
43
45
  Rails.application.reload_routes!
44
46
 
47
+ example.run
48
+
45
49
  BucketMaker.configuration.path_prefix = default_base_path
46
50
  Rails.application.reload_routes!
47
51
  end
48
52
 
49
53
  it 'should have get bucket route' do
50
- expect(get: '/non_default_path/test_series_one/actual_test_one/group_one.json').to route_to(
54
+ expect(get: "/#{new_path}test_series_one/actual_test_one/group_one.json").to route_to(
51
55
  controller: 'bucket_maker',
52
56
  action: 'show',
53
57
  series_name: 'test_series_one',
@@ -58,7 +62,7 @@ describe 'Routes' do
58
62
  end
59
63
 
60
64
  it 'should have force set bucket route' do
61
- expect(post: '/non_default_path/test_series_one/actual_test_one/group_one.json').to route_to(
65
+ expect(post: "/#{new_path}test_series_one/actual_test_one/group_one.json").to route_to(
62
66
  controller: 'bucket_maker',
63
67
  action: 'switch',
64
68
  series_name: 'test_series_one',
@@ -69,7 +73,7 @@ describe 'Routes' do
69
73
  end
70
74
 
71
75
  it 'should have randomize bucket route' do
72
- expect(post: '/non_default_path/test_series_one/actual_test_one.json').to route_to(
76
+ expect(post: "/#{new_path}test_series_one/actual_test_one.json").to route_to(
73
77
  controller: 'bucket_maker',
74
78
  action: 'randomize',
75
79
  series_name: 'test_series_one',
@@ -17,41 +17,59 @@ describe BucketMaker::Bucket do
17
17
 
18
18
  context 'for configuration' do
19
19
  it 'should have the correct distributions' do
20
- bucket.distributions[:group_one].should == 0.3
21
- bucket.distributions[:group_two].should == 0.5
22
- bucket.distributions[:group_three].should == 0.2
20
+ expect(bucket.distributions[:group_one]).to eql(0.3)
21
+ expect(bucket.distributions[:group_two]).to eql(0.5)
22
+ expect(bucket.distributions[:group_three]).to eql(0.2)
23
23
  end
24
24
 
25
25
  context 'and distributions percent' do
26
26
  before { bucket.random_group }
27
27
 
28
28
  it 'should have the correct distribution percentages' do
29
- bucket.distributions_percent[:group_one].should == (0..30)
30
- bucket.distributions_percent[:group_two].should == (30..80)
31
- bucket.distributions_percent[:group_three].should == (80..100)
29
+ expect(bucket.distributions_percent[:group_one]).to eql(0..30.0)
30
+ expect(bucket.distributions_percent[:group_two]).to eql(30.0..80.0)
31
+ expect(bucket.distributions_percent[:group_three]).to eql(80.0..100.0)
32
32
  end
33
33
  end
34
34
  end
35
35
 
36
36
  context '#is_bucketable?' do
37
- it 'should return false if created after doesnt satisfy' do
38
- user = build(:user, id: 12345, created_at: DateTime.parse('1st Jan 2010'))
39
- bucket.is_bucketable?(user).should be_false
37
+ subject { bucket.is_bucketable?(user) }
38
+
39
+ context 'created after doesnt satisfy' do
40
+ let(:user) { build(:user, id: 12345, created_at: DateTime.parse('1st Jan 2010')) }
41
+
42
+ it 'should return false' do
43
+ expect(subject).to eql(false)
44
+ end
40
45
  end
41
46
 
42
- it 'should return true if created after does satisfy' do
43
- user = build(:user, id: 12345, created_at: DateTime.parse('3rd Jan 2010'))
44
- bucket.is_bucketable?(user).should be_true
47
+ context 'created after does satisfy' do
48
+ let(:user) { build(:user, id: 12345, created_at: DateTime.parse('3rd Jan 2010')) }
49
+
50
+ it 'should return true' do
51
+ expect(subject).to eql(true)
52
+ end
45
53
  end
46
54
  end
47
55
 
48
56
  context '#has_group?' do
49
- it 'should return false for non existant group' do
50
- bucket.has_group?('non_existant_test').should be_false
57
+ subject { bucket.has_group?(group) }
58
+
59
+ context 'for non existant group' do
60
+ let(:group) { 'non_existant_test' }
61
+
62
+ it 'should return false' do
63
+ expect(subject).to eql(false)
64
+ end
51
65
  end
52
66
 
53
- it 'should return true for existing group' do
54
- bucket.has_group?('group_two').should be_true
67
+ context 'for existing group' do
68
+ let(:group) { 'group_two' }
69
+
70
+ it 'should return true' do
71
+ expect(subject).to eql(true)
72
+ end
55
73
  end
56
74
  end
57
75
  end
@@ -9,6 +9,7 @@ describe BucketMaker::Models::Bucketable do
9
9
  let(:existing_series) { 'test_series_one' }
10
10
  let(:existing_bucket) { 'actual_test_one' }
11
11
  let(:existing_group) { 'group_two' }
12
+ let(:non_existant_series) { 'non_existant_series' }
12
13
 
13
14
  before do
14
15
  dummy.extend BucketMaker::Models::Bucketable
@@ -32,68 +33,84 @@ describe BucketMaker::Models::Bucketable do
32
33
 
33
34
  context 'with stubbed group_for_key and set_group_for_key' do
34
35
  before do
35
- dummy.stub(:group_for_key) { true }
36
- dummy.stub(:set_group_for_key) { true }
37
- dummy.stub(:has_attribute?) { true }
38
- dummy.stub(:created_at) { DateTime.parse('1st Jan 2010') }
36
+ allow(dummy).to receive(:group_for_key).and_return(true)
37
+ allow(dummy).to receive(:set_group_for_key).and_return(true)
38
+ allow(dummy).to receive(:has_attribute?).and_return(true)
39
+ allow(dummy).to receive(:created_at).and_return(DateTime.parse('1st Jan 2010'))
39
40
  end
40
41
 
41
42
  context '#in_bucket?' do
42
43
  context 'with invalid params' do
44
+ subject { dummy.in_bucket?(non_existant_series, existing_bucket, existing_group) }
45
+
43
46
  it 'should return false' do
44
- dummy.in_bucket?('non_existant_series', existing_bucket, existing_group).should be_false
47
+ expect(subject).to eql(false)
45
48
  end
46
49
  end
47
50
 
48
51
  context 'with valid params' do
52
+ subject { dummy.in_bucket?(existing_series, existing_bucket, existing_group) }
53
+
49
54
  it 'should return false' do
50
55
  # group_for_key return true and true == existing_group is false
51
- dummy.in_bucket?(existing_series, existing_bucket, existing_group).should be_false
56
+ expect(subject).to eql(false)
52
57
  end
53
58
 
54
59
  context 'when group_for_key returns the current group' do
55
60
  before do
56
- dummy.stub(:group_for_key).with(anything()) { existing_group }
61
+ allow(dummy).to receive(:group_for_key).and_return(existing_group)
57
62
  end
58
63
 
59
64
  it 'should return true' do
60
- dummy.in_bucket?(existing_series, existing_bucket, existing_group).should be_true
65
+ expect(subject).to eql(true)
61
66
  end
62
67
  end
63
68
  end
64
69
  end
65
70
 
66
71
  context '#force_to_bucket!' do
72
+ subject { dummy.force_to_bucket!(series, existing_bucket, existing_group) }
73
+
67
74
  context 'with invalid params' do
75
+ let(:series) { non_existant_series }
76
+
68
77
  it 'should return false' do
69
- dummy.force_to_bucket!('non_existant_series', existing_bucket, existing_group).should be_false
78
+ expect(subject).to eql(false)
70
79
  end
71
80
  end
72
81
 
73
82
  context 'with valid params' do
83
+ let(:series) { existing_series }
84
+
74
85
  it 'should return true' do
75
- dummy.force_to_bucket!(existing_series, existing_bucket, existing_group).should be_true
86
+ expect(subject).to eql(true)
76
87
  end
77
88
  end
78
89
  end
79
90
 
80
91
  context '#bucketize_for_series_and_bucket!' do
92
+ subject { dummy.bucketize_for_series_and_bucket!(series, existing_bucket) }
93
+
81
94
  context 'with invalid params' do
95
+ let(:series) { non_existant_series }
96
+
82
97
  it 'should return false' do
83
- dummy.bucketize_for_series_and_bucket!('non_existant_series', existing_bucket).should be_false
98
+ expect(subject).to eql(false)
84
99
  end
85
100
  end
86
101
 
87
102
  context 'with valid params' do
103
+ let(:series) { existing_series }
104
+
88
105
  it 'should return true' do
89
- dummy.bucketize_for_series_and_bucket!(existing_series, existing_bucket).should be_true
106
+ expect(subject).to eql(true)
90
107
  end
91
108
  end
92
109
  end
93
110
 
94
111
  context '#bucketize!' do
95
112
  it 'should return true' do
96
- dummy.bucketize!.should be_true
113
+ expect(dummy.bucketize!).to eql(true)
97
114
  end
98
115
  end
99
116
  end
@@ -6,86 +6,137 @@ describe BucketMaker::SeriesMaker do
6
6
  let(:existing_series) { 'test_series_one' }
7
7
  let(:existing_bucket) { 'actual_test_one' }
8
8
  let(:existing_group) { 'group_two' }
9
+ let(:non_existing_series) { 'non_existing_series' }
9
10
 
10
11
  before do
11
- BucketMaker::Bucket.any_instance.stub(:random_group) { existing_group }
12
+ allow_any_instance_of(BucketMaker::Bucket).to receive(:random_group).and_return(existing_group)
12
13
  end
13
14
 
14
15
  context 'for configuration' do
16
+ let(:series) { bucket_maker.series_with_name(existing_series) }
17
+
15
18
  it 'should have correct number of series' do
16
- bucket_maker.series.keys.length.should == 2 # Look at config/buckets.yml
19
+ expect(bucket_maker.series.keys.length).to eql(2) # Look at config/buckets.yml
17
20
  end
18
21
 
19
22
  it 'should have correct number of buckets' do
20
- bucket_maker.series_with_name(existing_series).buckets.keys.length.should == 2
23
+ expect(series.buckets.keys.length).to eql(2)
21
24
  end
22
25
 
23
26
  it 'should have correct number of distribut' do
24
- bucket_maker.series_with_name(existing_series).bucket_with_name(existing_bucket).distributions.keys.length.should == 3
27
+ expect(series.bucket_with_name(existing_bucket).distributions.keys.length).to eql(3)
25
28
  end
26
29
  end
27
30
 
28
31
  context '#configured?' do
32
+ subject { bucket_maker.configured? }
33
+
29
34
  it 'should be configured' do
30
- bucket_maker.configured?.should be_true
35
+ expect(subject).to eql(true)
31
36
  end
32
37
  end
33
38
 
34
39
  context '#key_for_series' do
40
+ subject { bucket_maker.key_for_series(user, 'series_one', 'bucket_one') }
41
+
35
42
  it 'should return the correct key' do
36
- bucket_maker.key_for_series(user, 'series_one', 'bucket_one').should == 'bucket_maker:user_12345:series_one:bucket_one'
43
+ expect(subject).to eql('bucket_maker:user_12345:series_one:bucket_one')
37
44
  end
38
45
  end
39
46
 
40
47
  context '#has_series?' do
41
- it 'should return true for an existing series' do
42
- bucket_maker.has_series?(existing_series).should be_true
48
+ subject { bucket_maker.has_series?(series) }
49
+
50
+ context 'for an existing series' do
51
+ let(:series) { existing_series }
52
+
53
+ it 'should return true' do
54
+ expect(subject).to eql(true)
55
+ end
43
56
  end
44
57
 
45
- it 'should return false for a non existing series' do
46
- bucket_maker.has_series?('non_existing_series').should be_false
58
+ context 'for a non existing series' do
59
+ let(:series) { non_existing_series }
60
+
61
+ it 'should return false' do
62
+ expect(subject).to eql(false)
63
+ end
47
64
  end
48
65
  end
49
66
 
50
67
  context '#series_with_name' do
68
+ subject { bucket_maker.series_with_name(existing_series) }
69
+
51
70
  it 'should return a Series object' do
52
- bucket_maker.series_with_name(existing_series).should be_kind_of(BucketMaker::Series)
71
+ expect(subject).to be_kind_of(BucketMaker::Series)
53
72
  end
54
73
  end
55
74
 
56
75
  context '#has_bucket_in_series?' do
57
- it 'should return true for an existing bucket' do
58
- bucket_maker.has_bucket_in_series?(existing_series, existing_bucket).should be_true
76
+ subject { bucket_maker.has_bucket_in_series?(series, existing_bucket) }
77
+
78
+ context 'for an existing bucket' do
79
+ let(:series) { existing_series }
80
+
81
+ it 'should return true' do
82
+ expect(subject).to eql(true)
83
+ end
59
84
  end
60
85
 
61
- it 'should return false for a non existing bucket' do
62
- bucket_maker.has_bucket_in_series?('non_existing_series', existing_bucket).should be_false
86
+ context 'for a non existing bucket' do
87
+ let(:series) { non_existing_series }
88
+
89
+ it 'should return false' do
90
+ expect(subject).to eql(false)
91
+ end
63
92
  end
64
93
  end
65
94
 
66
95
  context '#has_group_in_bucket_in_series?' do
67
- it 'should return true for an existing group' do
68
- bucket_maker.has_group_in_bucket_in_series?(existing_series, existing_bucket, existing_group).should be_true
96
+ subject { bucket_maker.has_group_in_bucket_in_series?(series, existing_bucket, existing_group) }
97
+
98
+ context 'for an existing group' do
99
+ let(:series) { existing_series }
100
+
101
+ it 'should return true' do
102
+ expect(subject).to eql(true)
103
+ end
69
104
  end
70
105
 
71
- it 'should return false for a non existing group' do
72
- bucket_maker.has_group_in_bucket_in_series?('non_existing_series', existing_bucket, existing_group).should be_false
106
+ context 'for a non existing group' do
107
+ let(:series) { non_existing_series }
108
+
109
+ it 'should return false' do
110
+ expect(subject).to eql(false)
111
+ end
73
112
  end
74
113
  end
75
114
 
76
115
  context '#bucketize' do
116
+ subject { bucket_maker.bucketize(existing_series, existing_bucket) }
117
+
77
118
  it 'should return a valid group' do
78
- bucket_maker.bucketize(existing_series, existing_bucket).should == existing_group
119
+ expect(subject).to eql(existing_group)
79
120
  end
80
121
  end
81
122
 
82
123
  context '#bucketable?' do
83
- it 'should return true for valid params' do
84
- bucket_maker.bucketable?(user, existing_series, existing_bucket, existing_group).should be_true
124
+ subject { bucket_maker.bucketable?(user, series, existing_bucket, existing_group) }
125
+
126
+ context 'for valid params' do
127
+ let(:series) { existing_series }
128
+
129
+ it 'should return true' do
130
+ expect(subject).to eql(true)
131
+ end
85
132
  end
86
133
 
87
- it 'should return false for invalid params' do
88
- bucket_maker.bucketable?(user, 'non_existing_series', existing_bucket, existing_group).should be_false
134
+ context 'for invalid params' do
135
+ let(:series) { non_existing_series }
136
+
137
+ it 'should return false' do
138
+ expect(subject).to eql(false)
139
+ end
89
140
  end
90
141
  end
91
142
  end
@@ -19,46 +19,86 @@ describe BucketMaker::Series do
19
19
  end
20
20
 
21
21
  let(:series) { BucketMaker::Series.new('test_series', series_options) }
22
+ let(:existant_bucket) { 'actual_test_one' }
23
+ let(:non_existant_bucket) { 'non_existant_test' }
22
24
 
23
25
  context '#bucket_with_name' do
24
- it 'should return a Bucket object' do
25
- series.bucket_with_name('actual_test_one').should be_kind_of(BucketMaker::Bucket)
26
+ subject { series.bucket_with_name(bucket) }
27
+
28
+ context 'with an existing bucket' do
29
+ let(:bucket) { existant_bucket }
30
+
31
+ it 'should return a Bucket object' do
32
+ expect(subject).to be_kind_of(BucketMaker::Bucket)
33
+ end
26
34
  end
27
35
 
28
- it 'should return a Bucket object' do
29
- series.bucket_with_name('non_existant_test').should be_nil
36
+ context 'with a non existing bucket' do
37
+ let(:bucket) { non_existant_bucket }
38
+
39
+ it 'should return nil' do
40
+ expect(subject).to be_nil
41
+ end
30
42
  end
31
43
  end
32
44
 
33
45
  context '#is_bucketable?' do
34
- it 'should return false if created after doesnt satisfy' do
35
- user = build(:user, id: 12345, created_at: DateTime.parse('1st Jan 2010'))
36
- series.is_bucketable?(user).should be_false
46
+ subject { series.is_bucketable?(user) }
47
+
48
+ context 'when created after doesnt satisfy' do
49
+ let(:user) { build(:user, id: 12345, created_at: DateTime.parse('1st Jan 2010')) }
50
+
51
+ it 'should return false' do
52
+ expect(subject).to eql(false)
53
+ end
37
54
  end
38
55
 
39
- it 'should return true if created after does satisfy' do
40
- user = build(:user, id: 12345, created_at: DateTime.parse('3rd Jan 2010'))
41
- series.is_bucketable?(user).should be_true
56
+ context 'when created after does satisfy' do
57
+ let(:user) { build(:user, id: 12345, created_at: DateTime.parse('3rd Jan 2010')) }
58
+
59
+ it 'should return true' do
60
+ expect(subject).to eql(true)
61
+ end
42
62
  end
43
63
  end
44
64
 
45
65
  context '#has_bucket?' do
46
- it 'should return false for non existant bucket' do
47
- series.has_bucket?('non_existant_test').should be_false
66
+ subject { series.has_bucket?(bucket) }
67
+
68
+ context 'for non existant bucket' do
69
+ let(:bucket) { non_existant_bucket }
70
+
71
+ it 'should return false' do
72
+ expect(subject).to eql(false)
73
+ end
48
74
  end
49
75
 
50
- it 'should return true for existing bucket' do
51
- series.has_bucket?('actual_test_one').should be_true
76
+ context 'for non existant bucket' do
77
+ let(:bucket) { existant_bucket }
78
+
79
+ it 'should return true' do
80
+ expect(subject).to eql(true)
81
+ end
52
82
  end
53
83
  end
54
84
 
55
85
  context '#has_group_in_bucket?' do
56
- it 'should return false for non existant group' do
57
- series.has_group_in_bucket?('actual_test_one', 'non_existant_test').should be_false
86
+ subject { series.has_group_in_bucket?(existant_bucket, group) }
87
+
88
+ context 'for non existant group' do
89
+ let(:group) { 'non_existant_test' }
90
+
91
+ it 'should return false' do
92
+ expect(subject).to eql(false)
93
+ end
58
94
  end
59
95
 
60
- it 'should return false for non existant group' do
61
- series.has_group_in_bucket?('actual_test_one', 'group_two').should be_true
96
+ context 'for an existant group' do
97
+ let(:group) { 'group_two' }
98
+
99
+ it 'should return true' do
100
+ expect(subject).to eql(true)
101
+ end
62
102
  end
63
103
  end
64
104
  end
metadata CHANGED
@@ -1,206 +1,206 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bucket_maker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dinesh Vasudevan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-04 00:00:00.000000000 Z
11
+ date: 2014-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activesupport
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 3.1.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 3.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activerecord
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 3.1.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 3.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sqlite3
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: appraisal
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: capybara
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 2.0.3
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 2.0.3
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: pry-debugger
126
+ name: pry-byebug
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rspec-rails
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ! '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ! '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: factory_girl_rails
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ! '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ! '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: mock_redis
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ! '>='
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ! '>='
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: coveralls
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ! '>='
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ! '>='
192
+ - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
- description: ! ' Create Simple A/B categories '
195
+ description: " Create Simple A/B categories "
196
196
  email:
197
197
  - dinesh.vasudevan@gmail.com
198
198
  executables: []
199
199
  extensions: []
200
200
  extra_rdoc_files: []
201
201
  files:
202
- - .gitignore
203
- - .travis.yml
202
+ - ".gitignore"
203
+ - ".travis.yml"
204
204
  - Appraisals
205
205
  - Gemfile
206
206
  - LICENSE.txt
@@ -262,7 +262,7 @@ files:
262
262
  - spec/dummy/db/migrate/20131223144333_create_users.rb
263
263
  - spec/dummy/db/test.sqlite3
264
264
  - spec/factories/factories.rb
265
- - spec/routing/routes_spec.rb
265
+ - spec/routes/routes_spec.rb
266
266
  - spec/spec_helper.rb
267
267
  - spec/unit/bucket_spec.rb
268
268
  - spec/unit/bucketable_spec.rb
@@ -278,17 +278,17 @@ require_paths:
278
278
  - lib
279
279
  required_ruby_version: !ruby/object:Gem::Requirement
280
280
  requirements:
281
- - - ! '>='
281
+ - - ">="
282
282
  - !ruby/object:Gem::Version
283
283
  version: 1.9.3
284
284
  required_rubygems_version: !ruby/object:Gem::Requirement
285
285
  requirements:
286
- - - ! '>='
286
+ - - ">="
287
287
  - !ruby/object:Gem::Version
288
288
  version: '0'
289
289
  requirements: []
290
290
  rubyforge_project:
291
- rubygems_version: 2.1.10
291
+ rubygems_version: 2.2.2
292
292
  signing_key:
293
293
  specification_version: 4
294
294
  summary: A Gem to categorize Objects into buckets. Typical use case is an A/B test
@@ -331,7 +331,7 @@ test_files:
331
331
  - spec/dummy/db/migrate/20131223144333_create_users.rb
332
332
  - spec/dummy/db/test.sqlite3
333
333
  - spec/factories/factories.rb
334
- - spec/routing/routes_spec.rb
334
+ - spec/routes/routes_spec.rb
335
335
  - spec/spec_helper.rb
336
336
  - spec/unit/bucket_spec.rb
337
337
  - spec/unit/bucketable_spec.rb