big_ml 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +1 -1
  3. data/.rvmrc.example +1 -1
  4. data/.travis.yml +1 -1
  5. data/README.md +6 -5
  6. data/lib/big_ml.rb +5 -0
  7. data/lib/big_ml/base.rb +31 -0
  8. data/lib/big_ml/batch_prediction.rb +39 -0
  9. data/lib/big_ml/ensemble.rb +32 -0
  10. data/lib/big_ml/evaluation.rb +31 -0
  11. data/lib/big_ml/prediction.rb +2 -2
  12. data/lib/big_ml/util/client.rb +1 -0
  13. data/lib/big_ml/util/config.rb +4 -1
  14. data/lib/big_ml/util/request.rb +9 -4
  15. data/lib/big_ml/version.rb +1 -1
  16. data/spec/integration/dataset_spec.rb +21 -23
  17. data/spec/integration/ensemble_spec.rb +73 -0
  18. data/spec/integration/evaluation_spec.rb +64 -0
  19. data/spec/integration/model_spec.rb +23 -25
  20. data/spec/integration/prediction_spec.rb +20 -22
  21. data/spec/integration/source_spec.rb +22 -24
  22. data/spec/spec_helper.rb +4 -3
  23. data/spec/units/client_spec.rb +58 -26
  24. data/spec/units/source_spec.rb +3 -3
  25. data/spec/vcr_cassettes/BigML_Dataset/one_dataset/can_be_converted_in_a_model.yml +180 -99
  26. data/spec/vcr_cassettes/BigML_Dataset/one_dataset/must_be_able_to_be_find_using_the_reference.yml +144 -163
  27. data/spec/vcr_cassettes/BigML_Ensemble/no_ensemble/_all/must_be_empty.yml +223 -0
  28. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/can_be_converted_in_a_prediction.yml +1074 -0
  29. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_be_able_to_be_deleted_using_the_destroy_method.yml +1082 -0
  30. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_be_able_to_be_find_using_the_reference.yml +734 -0
  31. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_be_able_to_remove_the_ensemble.yml +1215 -0
  32. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_be_able_to_set_number_of_models.yml +853 -0
  33. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_be_able_to_update_the_name.yml +1226 -0
  34. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_be_able_to_update_the_name_from_the_instance.yml +1226 -0
  35. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_have_only_one_item.yml +686 -0
  36. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/must_have_the_same_size.yml +732 -0
  37. data/spec/vcr_cassettes/BigML_Ensemble/one_ensemble/was_created_successfully.yml +495 -0
  38. data/spec/vcr_cassettes/BigML_Evaluation/no_evaluation/_all/must_be_empty.yml +600 -0
  39. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_be_able_to_be_deleted_using_the_destroy_method.yml +1127 -0
  40. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_be_able_to_be_find_using_the_reference.yml +1151 -0
  41. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_be_able_to_remove_the_evaluation.yml +1203 -0
  42. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_be_able_to_update_the_name.yml +1374 -0
  43. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_be_able_to_update_the_name_from_the_instance.yml +1373 -0
  44. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_have_only_one_item.yml +1103 -0
  45. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/must_have_the_same_name.yml +1108 -0
  46. data/spec/vcr_cassettes/BigML_Evaluation/one_evaluation/was_created_successfully.yml +922 -0
  47. data/spec/vcr_cassettes/BigML_Model/one_model/must_be_able_to_be_find_using_the_reference.yml +269 -282
  48. data/spec/vcr_cassettes/BigML_Prediction/one_prediction/must_be_able_to_be_find_using_the_reference.yml +360 -312
  49. data/spec/vcr_cassettes/BigML_Source/one_source/must_be_able_to_be_find_using_the_reference.yml +75 -72
  50. data/spec/vcr_cassettes/BigML_Util_Client/response_handling/debug_mode/raises_on_bad_request.yml +38 -0
  51. data/spec/vcr_cassettes/BigML_Util_Client/response_handling/normal_mode/does_not_raise_on_bad_request.yml +38 -0
  52. metadata +74 -43
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+
3
+ describe BigML::Evaluation, :vcr do
4
+
5
+ before do
6
+ BigML::Source.delete_all
7
+ BigML::Dataset.delete_all
8
+ BigML::Model.delete_all
9
+ BigML::Evaluation.delete_all
10
+ end
11
+
12
+ describe "no evaluation" do
13
+ describe ".all" do
14
+ it "must be empty" do
15
+ expect(BigML::Evaluation.all).to eq([])
16
+ end
17
+ end
18
+ end
19
+
20
+ describe "one evaluation" do
21
+ let(:source) { BigML::Source.create 'spec/fixtures/iris.csv' }
22
+ let(:dataset) { BigML::Dataset.create source.wait_for_ready.resource }
23
+ let(:model) { BigML::Model.create dataset.wait_for_ready.resource }
24
+ let!(:evaluation) { BigML::Evaluation.create model.wait_for_ready.resource, dataset.wait_for_ready.resource }
25
+
26
+ it "was created successfully" do
27
+ expect(evaluation.code).to eq(201)
28
+ end
29
+
30
+ it "must have only one item" do
31
+ expect(BigML::Evaluation.all.length).to eq(1)
32
+ end
33
+
34
+ it "must have the same name" do
35
+ expect(BigML::Evaluation.all.first.name).to match(/^Evaluation of iris/)
36
+ end
37
+
38
+ it "must be able to be find using the reference" do
39
+ expect(BigML::Evaluation.find(evaluation.id).id).to eq(evaluation.id)
40
+ end
41
+
42
+ it "must be able to update the name" do
43
+ expect(BigML::Evaluation.update(evaluation.wait_for_ready.id, { :name => 'foo name' }).code).to eq(202)
44
+ expect(BigML::Evaluation.find(evaluation.id).name).to eq('foo name')
45
+ end
46
+
47
+ it "must be able to update the name from the instance" do
48
+ expect(evaluation.wait_for_ready.update(name: 'foo name').code).to eq(202)
49
+ expect(BigML::Evaluation.find(evaluation.id).name).to eq('foo name')
50
+ end
51
+
52
+ it "must be able to remove the evaluation" do
53
+ BigML::Evaluation.delete evaluation.id
54
+ expect(BigML::Evaluation.find evaluation.id).to be_nil
55
+ expect(BigML::Evaluation.all.length).to eq(0)
56
+ end
57
+
58
+ it "must be able to be deleted using the destroy method" do
59
+ evaluation_id = evaluation.id
60
+ evaluation.destroy
61
+ expect(BigML::Evaluation.find evaluation_id).to be_nil
62
+ end
63
+ end
64
+ end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe BigML::Model, :vcr do
4
4
 
5
- before(:each) do
5
+ before do
6
6
  BigML::Source.delete_all
7
7
  BigML::Dataset.delete_all
8
8
  BigML::Model.delete_all
@@ -11,60 +11,58 @@ describe BigML::Model, :vcr do
11
11
  describe "no model" do
12
12
  describe ".all" do
13
13
  it "must be empty" do
14
- BigML::Model.all.should == []
14
+ expect(BigML::Model.all).to eq([])
15
15
  end
16
16
  end
17
17
  end
18
18
 
19
19
  describe "one model" do
20
- before do
21
- @source = BigML::Source.create("spec/fixtures/iris.csv")
22
- @dataset = BigML::Dataset.create(@source.resource)
23
- @model = BigML::Model.create(@dataset.resource)
24
- end
20
+ let(:source) { BigML::Source.create 'spec/fixtures/iris.csv' }
21
+ let(:dataset) { BigML::Dataset.create source.resource }
22
+ let(:model) { BigML::Model.create dataset.resource }
25
23
 
26
24
  it "was created successfully" do
27
- @model.code.should == 201
25
+ expect(model.code).to eq(201)
28
26
  end
29
27
 
30
- it "must have only one item" do
31
- BigML::Model.all.should have(1).models
28
+ it "must have only one item" do
29
+ expect(BigML::Model.all.length).to eq(1)
32
30
  end
33
31
 
34
32
  it "must have the same size" do
35
- BigML::Model.all.first.size.should == 4608
33
+ expect(BigML::Model.all.first.size).to eq(4608)
36
34
  end
37
35
 
38
36
  it "must be able to be find using the reference" do
39
- BigML::Model.find(@model.id) == @model
37
+ expect(BigML::Model.find(model.id).id).to eq(model.id)
40
38
  end
41
39
 
42
40
  it "must be able to update the name" do
43
- BigML::Model.update(@model.id, { :name => 'foo name' }).code.should == 202
44
- BigML::Model.find(@model.id).name.should == 'foo name'
41
+ expect(BigML::Model.update(model.id, { name: 'foo name' }).code).to eq(202)
42
+ expect(BigML::Model.find(model.id).name).to eq('foo name')
45
43
  end
46
44
 
47
45
  it "must be able to update the name from the instance" do
48
- @model.update( :name => 'foo name' ).code.should == 202
49
- BigML::Model.find(@model.id).name.should == 'foo name'
46
+ expect(model.update(name: 'foo name').code).to eq(202)
47
+ expect(BigML::Model.find(model.id).name).to eq('foo name')
50
48
  end
51
49
 
52
50
  it "must be able to remove the model" do
53
- BigML::Model.delete(@model.id)
54
- BigML::Model.find(@model.id).should be_nil
55
- BigML::Model.all.should have(0).models
51
+ BigML::Model.delete model.id
52
+ expect(BigML::Model.find model.id).to be_nil
53
+ expect(BigML::Model.all.length).to eq(0)
56
54
  end
57
55
 
58
56
  it "must be able to be deleted using the destroy method" do
59
- model_id = @model.id
60
- @model.destroy
61
- BigML::Model.find(model_id).should be_nil
57
+ model_id = model.id
58
+ model.destroy
59
+ expect(BigML::Model.find model_id).to be_nil
62
60
  end
63
61
 
64
62
  it "can be converted in a prediction" do
65
- prediction = @model.to_prediction(:input_data => { "000001" => 3 })
66
- prediction.instance_of?(BigML::Prediction).should be_true
67
- prediction.code.should == 201
63
+ prediction = model.to_prediction(input_data: { "000001" => 3 })
64
+ expect(prediction).to be_instance_of(BigML::Prediction)
65
+ expect(prediction.code).to eq(201)
68
66
  end
69
67
  end
70
68
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe BigML::Prediction, :vcr do
4
4
 
5
- before(:each) do
5
+ before do
6
6
  BigML::Source.delete_all
7
7
  BigML::Dataset.delete_all
8
8
  BigML::Model.delete_all
@@ -12,55 +12,53 @@ describe BigML::Prediction, :vcr do
12
12
  describe "no prediction" do
13
13
  describe ".all" do
14
14
  it "must be empty" do
15
- BigML::Prediction.all.should == []
15
+ expect(BigML::Prediction.all).to eq([])
16
16
  end
17
17
  end
18
18
  end
19
19
 
20
20
  describe "one prediction" do
21
- before do
22
- @source = BigML::Source.create("spec/fixtures/iris.csv")
23
- @dataset = BigML::Dataset.create(@source.resource)
24
- @model = BigML::Model.create(@dataset.resource)
25
- @prediction = BigML::Prediction.create(@model.resource, { :input_data => { "000001" => 3 }})
26
- end
21
+ let(:source) { BigML::Source.create 'spec/fixtures/iris.csv' }
22
+ let(:dataset) { BigML::Dataset.create source.resource }
23
+ let(:model) { BigML::Model.create dataset.resource }
24
+ let(:prediction) { BigML::Prediction.create model.resource, { input_data: { "000001" => 3 }} }
27
25
 
28
26
  it "was created successfully" do
29
- @prediction.code.should == 201
27
+ expect(prediction.code).to eq(201)
30
28
  end
31
29
 
32
30
  it "must have only one item" do
33
- BigML::Prediction.all.should have(1).predictions
31
+ expect(BigML::Prediction.all.length).to eq(1)
34
32
  end
35
33
 
36
34
  it "must have the same name" do
37
- BigML::Prediction.all.first.name.should == "Prediction for species"
35
+ expect(BigML::Prediction.all.first.name).to eq("Prediction for species")
38
36
  end
39
37
 
40
38
  it "must be able to be find using the reference" do
41
- BigML::Prediction.find(@prediction.id) == @prediction
39
+ expect(BigML::Prediction.find(prediction.id).id).to eq(prediction.id)
42
40
  end
43
41
 
44
42
  it "must be able to update the name" do
45
- BigML::Prediction.update(@prediction.id, { :name => 'foo name' }).code.should == 202
46
- BigML::Prediction.find(@prediction.id).name.should == 'foo name'
43
+ expect(BigML::Prediction.update(prediction.id, { :name => 'foo name' }).code).to eq(202)
44
+ expect(BigML::Prediction.find(prediction.id).name).to eq('foo name')
47
45
  end
48
46
 
49
47
  it "must be able to update the name from the instance" do
50
- @prediction.update( :name => 'foo name' ).code.should == 202
51
- BigML::Prediction.find(@prediction.id).name.should == 'foo name'
48
+ expect(prediction.update(name: 'foo name').code).to eq(202)
49
+ expect(BigML::Prediction.find(prediction.id).name).to eq('foo name')
52
50
  end
53
51
 
54
52
  it "must be able to remove the prediction" do
55
- BigML::Prediction.delete(@prediction.id)
56
- BigML::Prediction.find(@prediction.id).should be_nil
57
- BigML::Prediction.all.should have(0).predictions
53
+ BigML::Prediction.delete prediction.id
54
+ expect(BigML::Prediction.find prediction.id).to be_nil
55
+ expect(BigML::Prediction.all.length).to eq(0)
58
56
  end
59
57
 
60
58
  it "must be able to be deleted using the destroy method" do
61
- prediction_id = @prediction.id
62
- @prediction.destroy
63
- BigML::Prediction.find(prediction_id).should be_nil
59
+ prediction_id = prediction.id
60
+ prediction.destroy
61
+ expect(BigML::Prediction.find prediction_id).to be_nil
64
62
  end
65
63
  end
66
64
  end
@@ -2,67 +2,65 @@ require "spec_helper"
2
2
 
3
3
  describe BigML::Source, :vcr do
4
4
 
5
- before(:each) do
5
+ before do
6
6
  BigML::Source.delete_all
7
7
  end
8
8
 
9
9
  describe "no source" do
10
10
  describe ".all" do
11
11
  it "must be empty" do
12
- BigML::Source.all.should == []
12
+ expect(BigML::Source.all).to eq([])
13
13
  end
14
14
  end
15
15
  end
16
16
 
17
17
  describe "one source" do
18
- before do
19
- @source = BigML::Source.create("spec/fixtures/iris.csv")
20
- end
18
+ let(:source) { BigML::Source.create 'spec/fixtures/iris.csv' }
21
19
 
22
20
  it "was created successfully" do
23
- @source.code.should == 201
21
+ expect(source.code).to eq(201)
24
22
  end
25
23
 
26
24
  it "must have only one item" do
27
- BigML::Source.all.should have(1).sources
25
+ expect(BigML::Source.all.length).to eq(1)
28
26
  end
29
27
 
30
28
  it "must have the same file_name" do
31
- BigML::Source.all.first.file_name.should == "iris.csv"
29
+ expect(BigML::Source.all.first.file_name).to eq("iris.csv")
32
30
  end
33
31
 
34
32
  it "must be able to be find using the reference" do
35
- BigML::Source.find(@source.id) == @source
33
+ expect(BigML::Source.find(source.id).id).to eq(source.id)
36
34
  end
37
35
 
38
36
  it "must be able to update the name" do
39
- BigML::Source.find(@source.id).name.should == 'iris.csv'
40
- BigML::Source.update(@source.id, { :name => 'new name' }).code.should == 202
41
- BigML::Source.find(@source.id).name.should == 'new name'
37
+ expect(BigML::Source.find(source.id).name).to eq('iris.csv')
38
+ expect(BigML::Source.update(source.id, { name: 'new name' }).code).to eq(202)
39
+ expect(BigML::Source.find(source.id).name).to eq('new name')
42
40
  end
43
41
 
44
42
  it "must be able to update the name from the instance" do
45
- BigML::Source.find(@source.id).name.should == 'iris.csv'
46
- @source.update( :name => 'new name' ).code.should == 202
47
- BigML::Source.find(@source.id).name.should == 'new name'
43
+ expect(BigML::Source.find(source.id).name).to eq('iris.csv')
44
+ expect(source.update(name: 'new name').code).to eq(202)
45
+ expect(BigML::Source.find(source.id).name).to eq('new name')
48
46
  end
49
47
 
50
48
  it "must be able to remove the source" do
51
- BigML::Source.delete(@source.id)
52
- BigML::Source.find(@source.id).should be_nil
53
- BigML::Source.all.should have(0).sources
49
+ BigML::Source.delete source.id
50
+ expect(BigML::Source.find source.id).to be_nil
51
+ expect(BigML::Source.all.length).to eq(0)
54
52
  end
55
53
 
56
54
  it "must be able to be deleted using the destroy method" do
57
- source_id = @source.id
58
- @source.destroy
59
- BigML::Source.find(source_id).should be_nil
55
+ source_id = source.id
56
+ source.destroy
57
+ expect(BigML::Source.find source_id).to be_nil
60
58
  end
61
59
 
62
60
  it "can be converted in a dataset" do
63
- dataset = @source.to_dataset
64
- dataset.instance_of?(BigML::Dataset).should be_true
65
- dataset.code.should == 201
61
+ dataset = source.to_dataset
62
+ expect(dataset).to be_instance_of(BigML::Dataset)
63
+ expect(dataset.code).to eq(201)
66
64
  end
67
65
  end
68
66
  end
data/spec/spec_helper.rb CHANGED
@@ -16,7 +16,8 @@ VCR.configure do |c|
16
16
  c.filter_sensitive_data('<API_KEY>') { BigML.api_key }
17
17
  end
18
18
 
19
- RSpec.configure do |c|
20
- c.mock_with :rspec
21
- c.treat_symbols_as_metadata_keys_with_true_values = true
19
+ RSpec.configure do |config|
20
+ config.expect_with :rspec do |c|
21
+ c.syntax = :expect
22
+ end
22
23
  end
@@ -1,81 +1,113 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe BigML::Util::Client do
4
- let(:keys) {
5
- BigML::Util::Config::VALID_OPTIONS_KEYS
6
- }
4
+ let(:keys) { BigML::Util::Config::VALID_OPTIONS_KEYS }
7
5
 
8
6
  context "module configuration" do
9
- before(:each) {
7
+ before do
10
8
  BigML.configure do |config|
11
9
  keys.each { |key| config.send("#{key}=", key) }
12
10
  end
13
- }
11
+ end
14
12
 
15
13
  it "should inherit module configuration" do
16
14
  api = BigML::Util::Client.new
17
- keys.each { |key| api.send(key).should == key }
15
+ keys.each { |key| expect(api.send(key)).to eq(key) }
18
16
  end
19
17
  end
20
18
 
21
19
  context "class configuration" do
22
- let(:config) {
20
+ let(:config) do
23
21
  {
24
- :username => 'user',
25
- :api_key => 'secret',
26
- :dev_mode => true
22
+ username: 'user',
23
+ api_key: 'secret',
24
+ dev_mode: true,
25
+ debug: false
27
26
  }
28
- }
27
+ end
29
28
 
30
29
  context "during initialization" do
31
30
  it "should override module configuration" do
32
31
  api = BigML::Util::Client.new(config)
33
- keys.each { |key| api.send(key).should == config[key] }
32
+ keys.each { |key| expect(api.send(key)).to eq(config[key]) }
34
33
  end
35
34
  end
36
35
 
37
36
  context "after initilization" do
38
- before(:each) {
37
+ before do
39
38
  BigML.configure do |config|
40
39
  keys.each { |key| config.send("#{key}=", key) }
41
40
  end
42
- }
41
+ end
43
42
 
44
43
  it "should override module configuration" do
45
44
  api = BigML::Util::Client.new
46
45
  config.each { |key, value| api.send("#{key}=", value) }
47
- keys.each { |key| api.send(key).should == config[key] }
46
+ keys.each { |key| expect(api.send(key)).to eq(config[key]) }
48
47
  end
49
48
  end
50
49
  end
51
50
 
52
51
  context "reset module configuration" do
53
- let(:api) {
54
- BigML::Util::Client.new
55
- }
52
+ let(:api) { BigML::Util::Client.new }
56
53
 
57
- before(:each) {
54
+ before do
58
55
  BigML.reset
59
- }
56
+ end
60
57
 
61
58
  it "sets default username to nil" do
62
- api.username.should be_nil
59
+ expect(api.username).to be_nil
63
60
  end
64
61
 
65
62
  it "sets default api key to nil" do
66
- api.api_key.should be_nil
63
+ expect(api.api_key).to be_nil
67
64
  end
68
65
  end
69
66
 
70
- context "environemt mode" do
67
+ context "environment mode" do
71
68
  it "uses production mode as default" do
72
- BigML::Util::Client.base_uri.should == BigML::Util::Config::BIGML_PROD_ENDPOINT
69
+ expect(BigML::Util::Client.base_uri).to eq(BigML::Util::Config::BIGML_PROD_ENDPOINT)
73
70
  end
74
71
 
75
72
  it "uses development when dev_mode is enabled" do
76
- BigML::Util::Client.new({:dev_mode => true})
77
- BigML::Util::Client.base_uri.should == BigML::Util::Config::BIGML_DEV_ENDPOINT
73
+ BigML::Util::Client.new({ dev_mode: true })
74
+ expect(BigML::Util::Client.base_uri).to eq(BigML::Util::Config::BIGML_DEV_ENDPOINT)
78
75
  end
79
76
  end
80
77
 
78
+ context 'response handling', :vcr do
79
+ let(:client) { BigML::Util::Client.new config }
80
+ let(:base_config) do
81
+ {
82
+ username: 'bad',
83
+ api_key: 'auth',
84
+ dev_mode: true,
85
+ }
86
+ end
87
+ let(:resource) { BigML::Source }
88
+
89
+ before do
90
+ resource.instance_variable_set :@client, client
91
+ end
92
+
93
+ describe 'debug mode' do
94
+ let(:config) { base_config.merge debug: true}
95
+
96
+ it 'raises on bad request' do
97
+ expect{resource.create 'spec/fixtures/iris.csv'}.to raise_error(BigML::UnsuccessfulRequestError, /unauthorized/i)
98
+ end
99
+ end
100
+
101
+ describe 'normal mode' do
102
+ let(:config) { base_config.merge debug: false}
103
+
104
+ it 'does not raise on bad request' do
105
+ expect{resource.create 'spec/fixtures/iris.csv'}.not_to raise_error
106
+ end
107
+ end
108
+
109
+ after do
110
+ resource.instance_variable_set :@client, nil
111
+ end
112
+ end
81
113
  end