bucket_maker 0.0.3 → 0.0.4

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 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