gooddata 0.6.18 → 0.6.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +8 -19
  4. data/Guardfile +5 -0
  5. data/README.md +1 -3
  6. data/bin/gooddata +1 -1
  7. data/gooddata.gemspec +6 -4
  8. data/lib/gooddata.rb +1 -1
  9. data/lib/gooddata/bricks/middleware/aws_middleware.rb +24 -0
  10. data/lib/gooddata/cli/commands/console_cmd.rb +1 -1
  11. data/lib/gooddata/cli/commands/project_cmd.rb +29 -9
  12. data/lib/gooddata/cli/hooks.rb +9 -3
  13. data/lib/gooddata/commands/datawarehouse.rb +1 -7
  14. data/lib/gooddata/commands/project.rb +4 -3
  15. data/lib/gooddata/core/logging.rb +14 -2
  16. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +9 -0
  17. data/lib/gooddata/exceptions/uncomputable_report.rb +8 -0
  18. data/lib/gooddata/exceptions/validation_error.rb +1 -1
  19. data/lib/gooddata/goodzilla/goodzilla.rb +5 -1
  20. data/lib/gooddata/helpers/data_helper.rb +40 -9
  21. data/lib/gooddata/mixins/md_finders.rb +35 -0
  22. data/lib/gooddata/models/blueprint/anchor_field.rb +46 -0
  23. data/lib/gooddata/models/blueprint/attribute_field.rb +25 -0
  24. data/lib/gooddata/models/blueprint/blueprint.rb +7 -0
  25. data/lib/gooddata/models/blueprint/blueprint_field.rb +66 -0
  26. data/lib/gooddata/models/{dashboard_builder.rb → blueprint/dashboard_builder.rb} +0 -0
  27. data/lib/gooddata/models/{schema_blueprint.rb → blueprint/dataset_blueprint.rb} +176 -117
  28. data/lib/gooddata/models/blueprint/date_dimension.rb +10 -0
  29. data/lib/gooddata/models/blueprint/fact_field.rb +16 -0
  30. data/lib/gooddata/models/blueprint/label_field.rb +39 -0
  31. data/lib/gooddata/models/{project_blueprint.rb → blueprint/project_blueprint.rb} +366 -168
  32. data/lib/gooddata/models/blueprint/project_builder.rb +79 -0
  33. data/lib/gooddata/models/blueprint/reference_field.rb +39 -0
  34. data/lib/gooddata/models/blueprint/schema_blueprint.rb +156 -0
  35. data/lib/gooddata/models/blueprint/schema_builder.rb +85 -0
  36. data/lib/gooddata/models/{to_manifest.rb → blueprint/to_manifest.rb} +25 -20
  37. data/lib/gooddata/models/{to_wire.rb → blueprint/to_wire.rb} +33 -52
  38. data/lib/gooddata/models/datawarehouse.rb +2 -2
  39. data/lib/gooddata/models/domain.rb +3 -2
  40. data/lib/gooddata/models/execution.rb +2 -2
  41. data/lib/gooddata/models/execution_detail.rb +7 -2
  42. data/lib/gooddata/models/from_wire.rb +60 -71
  43. data/lib/gooddata/models/from_wire_parse.rb +125 -125
  44. data/lib/gooddata/models/metadata.rb +14 -0
  45. data/lib/gooddata/models/metadata/dashboard.rb +2 -2
  46. data/lib/gooddata/models/metadata/label.rb +1 -1
  47. data/lib/gooddata/models/metadata/report.rb +6 -5
  48. data/lib/gooddata/models/metadata/report_definition.rb +44 -59
  49. data/lib/gooddata/models/model.rb +131 -43
  50. data/lib/gooddata/models/process.rb +13 -11
  51. data/lib/gooddata/models/profile.rb +12 -1
  52. data/lib/gooddata/models/project.rb +223 -19
  53. data/lib/gooddata/models/project_creator.rb +4 -15
  54. data/lib/gooddata/models/schedule.rb +1 -0
  55. data/lib/gooddata/models/user_filters/user_filter_builder.rb +2 -2
  56. data/lib/gooddata/rest/client.rb +18 -18
  57. data/lib/gooddata/rest/connection.rb +113 -94
  58. data/lib/gooddata/version.rb +1 -1
  59. data/lib/templates/project/model/model.rb.erb +15 -16
  60. data/spec/data/blueprints/additional_dataset_module.json +32 -0
  61. data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
  62. data/spec/data/blueprints/invalid_blueprint.json +103 -0
  63. data/spec/data/blueprints/m_n_model.json +104 -0
  64. data/spec/data/blueprints/model_module.json +25 -0
  65. data/spec/data/blueprints/test_blueprint.json +38 -0
  66. data/spec/data/blueprints/test_project_model_spec.json +106 -0
  67. data/spec/data/gd_gse_data_manifest.json +34 -34
  68. data/spec/data/manifests/test_blueprint.json +32 -0
  69. data/spec/data/{manifest_test_project.json → manifests/test_project.json} +9 -18
  70. data/spec/data/wire_models/test_blueprint.json +63 -0
  71. data/spec/data/wire_test_project.json +5 -5
  72. data/spec/environment/default.rb +33 -0
  73. data/spec/environment/develop.rb +26 -0
  74. data/spec/environment/environment.rb +14 -0
  75. data/spec/environment/hotfix.rb +17 -0
  76. data/spec/environment/production.rb +31 -0
  77. data/spec/environment/release.rb +17 -0
  78. data/spec/helpers/blueprint_helper.rb +10 -7
  79. data/spec/helpers/cli_helper.rb +24 -22
  80. data/spec/helpers/connection_helper.rb +27 -25
  81. data/spec/helpers/crypto_helper.rb +7 -5
  82. data/spec/helpers/csv_helper.rb +5 -3
  83. data/spec/helpers/process_helper.rb +15 -10
  84. data/spec/helpers/project_helper.rb +40 -33
  85. data/spec/helpers/schedule_helper.rb +15 -9
  86. data/spec/helpers/spec_helper.rb +11 -0
  87. data/spec/integration/blueprint_updates_spec.rb +93 -0
  88. data/spec/integration/command_datawarehouse_spec.rb +2 -1
  89. data/spec/integration/command_projects_spec.rb +9 -8
  90. data/spec/integration/create_from_template_spec.rb +1 -1
  91. data/spec/integration/create_project_spec.rb +1 -1
  92. data/spec/integration/full_process_schedule_spec.rb +1 -1
  93. data/spec/integration/full_project_spec.rb +91 -30
  94. data/spec/integration/over_to_user_filters_spec.rb +24 -28
  95. data/spec/integration/partial_md_export_import_spec.rb +4 -4
  96. data/spec/integration/project_spec.rb +1 -1
  97. data/spec/integration/rest_spec.rb +1 -1
  98. data/spec/integration/user_filters_spec.rb +19 -24
  99. data/spec/integration/variables_spec.rb +7 -9
  100. data/spec/logging_in_logging_out_spec.rb +1 -1
  101. data/spec/spec_helper.rb +10 -1
  102. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +47 -0
  103. data/spec/unit/core/connection_spec.rb +2 -2
  104. data/spec/unit/core/logging_spec.rb +12 -4
  105. data/spec/unit/helpers/data_helper_spec.rb +60 -0
  106. data/spec/unit/models/blueprint/attributes_spec.rb +24 -0
  107. data/spec/unit/models/blueprint/dataset_spec.rb +116 -0
  108. data/spec/unit/models/blueprint/labels_spec.rb +39 -0
  109. data/spec/unit/models/blueprint/project_blueprint_spec.rb +643 -0
  110. data/spec/unit/models/blueprint/reference_spec.rb +24 -0
  111. data/spec/unit/models/{schema_builder_spec.rb → blueprint/schema_builder_spec.rb} +12 -4
  112. data/spec/unit/models/blueprint/to_wire_spec.rb +169 -0
  113. data/spec/unit/models/domain_spec.rb +13 -2
  114. data/spec/unit/models/from_wire_spec.rb +277 -98
  115. data/spec/unit/models/metadata_spec.rb +22 -4
  116. data/spec/unit/models/model_spec.rb +49 -39
  117. data/spec/unit/models/profile_spec.rb +1 -0
  118. data/spec/unit/models/project_spec.rb +7 -7
  119. data/spec/unit/models/schedule_spec.rb +20 -0
  120. data/spec/unit/models/to_manifest_spec.rb +31 -11
  121. data/spec/unit/rest/polling_spec.rb +86 -0
  122. metadata +102 -30
  123. data/lib/gooddata/models/project_builder.rb +0 -136
  124. data/lib/gooddata/models/schema_builder.rb +0 -77
  125. data/out.txt +0 -0
  126. data/spec/data/additional_dataset_module.json +0 -18
  127. data/spec/data/blueprint_invalid.json +0 -38
  128. data/spec/data/m_n_model/blueprint.json +0 -76
  129. data/spec/data/model_module.json +0 -18
  130. data/spec/data/test_project_model_spec.json +0 -76
  131. data/spec/unit/models/attribute_column_spec.rb +0 -7
  132. data/spec/unit/models/project_blueprint_spec.rb +0 -239
  133. data/spec/unit/models/to_wire_spec.rb +0 -71
@@ -10,7 +10,7 @@ RAW_DATA = {
10
10
  'meta' =>
11
11
  {'author'=>'/gdc/account/profile/4e1e8cacc4989228e0ae531b30853248',
12
12
  'uri'=>'/gdc/md/ksjy0nr3goz6k8yrpklz97l0mych7nez/obj/70',
13
- 'tags'=>'a b cg r t',
13
+ 'tags'=>'a a b cg r t',
14
14
  'created'=>'2014-04-30 22:47:57',
15
15
  'identifier'=>'afo7bx1VakCz',
16
16
  'deprecated'=>'0',
@@ -24,7 +24,7 @@ RAW_DATA = {
24
24
 
25
25
  describe GoodData::MdObject do
26
26
  before(:each) do
27
- @instance = GoodData::MdObject.new(RAW_DATA)
27
+ @instance = GoodData::MdObject.new(RAW_DATA.deep_dup)
28
28
  end
29
29
 
30
30
  describe '#identifier=' do
@@ -33,8 +33,26 @@ describe GoodData::MdObject do
33
33
  @instance.identifier = 'new_id'
34
34
  new_identifier = @instance.identifier
35
35
 
36
- new_identifier.should_not == identifier
37
- new_identifier.should == 'new_id'
36
+ expect(new_identifier).to_not eq identifier
37
+ expect(new_identifier).to eq 'new_id'
38
+ end
39
+ end
40
+
41
+ describe '#tag_list' do
42
+ it 'returns tags as list' do
43
+ expect(@instance.tag_set).to eq %w(a b cg r t).to_set
44
+ end
45
+ end
46
+
47
+ describe '#add_tag' do
48
+ it 'adds tag' do
49
+ expect(@instance.add_tag('xx').tag_set).to eq %w(a b cg r t xx).to_set
50
+ end
51
+ end
52
+
53
+ describe '#remove_tag' do
54
+ it 'returns tags as list' do
55
+ expect(@instance.remove_tag('t').tag_set).to eq %w(a b cg r).to_set
38
56
  end
39
57
  end
40
58
  end
@@ -6,63 +6,73 @@ require 'gooddata/models/model'
6
6
  describe GoodData::Model do
7
7
 
8
8
  before(:each) do
9
- @base_blueprint = GoodData::Model::ProjectBlueprint.from_json("./spec/data/test_project_model_spec.json")
10
- @additional_blueprint = GoodData::Model::ProjectBlueprint.from_json("./spec/data/model_module.json")
9
+ @base_blueprint = GoodData::Model::ProjectBlueprint.from_json("./spec/data/blueprints/test_project_model_spec.json")
10
+ @additional_blueprint = GoodData::Model::ProjectBlueprint.from_json("./spec/data/blueprints/model_module.json")
11
11
 
12
12
  @blueprint_with_duplicate = GoodData::Model::ProjectBlueprint.new(
13
- {
14
- :title => "x",
15
- :datasets => [
16
- {
17
- :name => "commits",
18
- :columns => [
19
- {:type => "fact", :name => "lines_changed", :description=>"Fact description"}
20
- ]
21
- }
22
- ]})
13
+ {
14
+ title: "x",
15
+ datasets: [{
16
+ id: "dataset.commits",
17
+ type: :dataset,
18
+ columns: [
19
+ {
20
+ type: "fact",
21
+ id: "fact.lines_changed",
22
+ gd_data_type: 'INT',
23
+ description: "Fact description"
24
+ }
25
+ ]
26
+ }]
27
+ })
23
28
 
24
29
  @conflicting_blueprint = GoodData::Model::ProjectBlueprint.new(
25
- {
26
- :title => "x",
27
- :datasets => [
28
- {
29
- :name => "commits",
30
- :columns => [
31
- {:type => "attribute", :name => "lines_changed"}
32
- ]
33
- }
34
- ]})
30
+ {
31
+ title: 'x',
32
+ datasets: [{
33
+ type: :dataset,
34
+ id: 'dataset.commits',
35
+ columns: [
36
+ {
37
+ type: 'fact',
38
+ id: 'fact.commits.lines_changed'
39
+ }
40
+ ]
41
+ }]
42
+ })
35
43
  end
36
44
 
37
45
  it "should be possible to merge Schema blueprints" do
38
- first_dataset = @base_blueprint.find_dataset("devs").to_hash
39
- additional_blueprint = @additional_blueprint.find_dataset("devs").to_hash
46
+
47
+ first_dataset = @base_blueprint.find_dataset("dataset.devs").to_hash
48
+ additional_blueprint = @additional_blueprint.find_dataset("dataset.devs").to_hash
40
49
  stuff = GoodData::Model.merge_dataset_columns(first_dataset, additional_blueprint)
41
- stuff[:columns].include?({:type => "attribute", :name => "region"}).should == true
42
- stuff[:columns].include?({:type => "anchor", :name => "id"}).should == true
50
+ expect(GoodData::Model::ProjectBlueprint.new(stuff)).to be_valid
51
+
52
+ expect(stuff[:columns].include?({:type => :attribute, :id => "attr.region"})).to be_truthy
53
+ expect(stuff[:columns].include?({:type => :anchor, :id => "attr.devs.dev_id", title: 'Dev', :folder=>"Anchor folder" })).to be_truthy
43
54
  end
44
55
 
45
56
  it "should pass when merging 2 columns with the same name if both columns are identical" do
46
- first_dataset = @base_blueprint.find_dataset("commits").to_hash
47
- additional_blueprint = @blueprint_with_duplicate.find_dataset("commits").to_hash
48
-
57
+ first_dataset = @base_blueprint.find_dataset("dataset.commits").to_hash
58
+ additional_blueprint = @blueprint_with_duplicate.find_dataset("dataset.commits").to_hash
49
59
  stuff = GoodData::Model.merge_dataset_columns(first_dataset, additional_blueprint)
60
+
61
+ expect(GoodData::Model::ProjectBlueprint.new(stuff)).to be_valid
50
62
 
51
- stuff[:columns].count.should == 4
52
- stuff[:columns].include?({:type => "fact", :name => "lines_changed", :description=>"Fact description"}).should == true
53
- stuff[:columns].group_by { |col| col[:name] }["lines_changed"].count.should == 1
63
+ expect(stuff[:columns].count).to eq 6
64
+ expect(stuff[:columns].include?({ type: :fact, id: "fact.lines_changed", gd_data_type: 'INT', description: "Fact description"})).to be_truthy
65
+ expect(stuff[:columns].group_by { |col| col[:id] }["fact.lines_changed"].count).to eq 1
54
66
  end
55
67
 
56
- it "should pass when merging 2 columns with the same name if all attributes are identical" do
57
- first_dataset = @base_blueprint.find_dataset("commits").to_hash
58
- additional_blueprint = @conflicting_blueprint.find_dataset("commits").to_hash
59
-
68
+ it "should fail when merging" do
69
+ first_dataset = @base_blueprint.find_dataset("dataset.commits").to_hash
70
+ additional_blueprint = @conflicting_blueprint.find_dataset("dataset.commits").to_hash
60
71
  expect { GoodData::Model.merge_dataset_columns(first_dataset, additional_blueprint) }.to raise_error
61
72
  end
62
73
 
63
74
  it "should be possible to merge directly whole bleuprints. Blueprint is changed in place when merge! is used" do
64
75
  @base_blueprint.merge!(@additional_blueprint)
65
- @base_blueprint.find_dataset("repos").attributes.include?({:type => "attribute", :name => "department"})
76
+ @base_blueprint.find_dataset("dataset.repos").attributes.include?({ type: "attribute", id: "some_attr_id", :title=>"Repository Name" })
66
77
  end
67
-
68
- end
78
+ end
@@ -9,6 +9,7 @@ describe GoodData::Profile do
9
9
  before(:all) do
10
10
  @client = ConnectionHelper.create_default_connection
11
11
  @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
12
+
12
13
  @user = @domain.get_user(ConnectionHelper::DEFAULT_USERNAME)
13
14
 
14
15
  @users = [
@@ -75,7 +75,7 @@ describe GoodData::Project, :constraint => 'slow' do
75
75
 
76
76
  describe "#member" do
77
77
  it 'Returns GoodData::Membership when looking for existing user using login' do
78
- res = @project.get_user('svarovsky+gem_tester@gooddata.com')
78
+ res = @project.get_user(ConnectionHelper::DEFAULT_USERNAME)
79
79
  expect(res).to be_instance_of(GoodData::Membership)
80
80
  end
81
81
 
@@ -91,14 +91,14 @@ describe GoodData::Project, :constraint => 'slow' do
91
91
  end
92
92
 
93
93
  it 'Returns null for non-existing user' do
94
- res = @project.get_user('john.doe@gooddata.com')
94
+ res = @project.get_user(ConnectionHelper::TEST_USERNAME)
95
95
  expect(res).to be_nil
96
96
  end
97
97
  end
98
98
 
99
99
  describe "#member?" do
100
100
  it 'Returns true when looking for existing user using login' do
101
- res = @project.member?('svarovsky+gem_tester@gooddata.com')
101
+ res = @project.member?(ConnectionHelper::DEFAULT_USERNAME)
102
102
  expect(res).to be_truthy
103
103
  end
104
104
 
@@ -114,19 +114,19 @@ describe GoodData::Project, :constraint => 'slow' do
114
114
  end
115
115
 
116
116
  it 'Returns false for non-existing user' do
117
- res = @project.member?('john.doe@gooddata.com')
117
+ res = @project.member?(ConnectionHelper::TEST_USERNAME)
118
118
  expect(res).to be_falsey
119
119
  end
120
120
 
121
121
  it 'Returns true for existing user when using optional list' do
122
122
  list = @project.members
123
- res = @project.member?('svarovsky+gem_tester@gooddata.com', list)
123
+ res = @project.member?(ConnectionHelper::DEFAULT_USERNAME, list)
124
124
  expect(res).to be_truthy
125
125
  end
126
126
 
127
127
  it 'Returns false for non-existing user when using optional list' do
128
128
  list = []
129
- res = @project.member?('svarovsky+gem_tester@gooddata.com', list)
129
+ res = @project.member?(ConnectionHelper::DEFAULT_USERNAME, list)
130
130
  expect(res).to be_falsey
131
131
  end
132
132
  end
@@ -140,7 +140,7 @@ describe GoodData::Project, :constraint => 'slow' do
140
140
 
141
141
  it 'Support variety of inputs' do
142
142
  users = @project.members.take(1)
143
- res = @project.members?(users + ['john.doe@gooddata.com'])
143
+ res = @project.members?(users + [ConnectionHelper::TEST_USERNAME])
144
144
  expect(res).to eq [true, false]
145
145
  end
146
146
  end
@@ -496,4 +496,24 @@ describe GoodData::Schedule do
496
496
  end
497
497
  end
498
498
  end
499
+
500
+ describe '#name' do
501
+ it 'should be able to get name of the schedule.' do
502
+ begin
503
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
504
+ expect(schedule.name).to eq 'graph.grf'
505
+ ensure
506
+ schedule && schedule.delete
507
+ end
508
+ end
509
+
510
+ it 'should be able to return your name if specified during creation.' do
511
+ begin
512
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param.merge(name: 'My schedule name'))
513
+ expect(schedule.name).to eq 'My schedule name'
514
+ ensure
515
+ schedule && schedule.delete
516
+ end
517
+ end
518
+ end
499
519
  end
@@ -5,20 +5,40 @@ include GoodData::Model
5
5
 
6
6
  describe GoodData::Model::ToManifest do
7
7
 
8
- # before(:each) do
9
- # @spec = JSON.parse(File.read("./spec/data/test_project_model_spec.json"), :symbolize_names => true)
10
- # @result = JSON.parse(File.read("./spec/data/manifest_test_project.json"))
11
- # end
8
+ before(:each) do
9
+ @spec = JSON.parse(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_names => true)
10
+ @result = JSON.parse(File.read("./spec/data/manifests/test_project.json"))
11
+ end
12
12
 
13
13
  it "should parse the model view and return the blueprint" do
14
- spec = JSON.parse(File.read("./spec/data/test_project_model_spec.json"), :symbolize_names => true)
15
- result = JSON.parse(File.read("./spec/data/manifest_test_project.json"))
16
- expect(ToManifest.to_manifest(spec)).to eq result
14
+ expect(ToManifest.to_manifest(@spec)).to eq @result
17
15
  end
18
16
 
19
- it "should parse the model view and return the blueprint" do
20
- spec = JSON.parse(File.read("./spec/data/gd_gse_data_blueprint.json"), :symbolize_names => true)
21
- result = JSON.parse(File.read("./spec/data/gd_gse_data_manifest.json"))
22
- expect(ToManifest.to_manifest(spec)).to eq result
17
+ it 'blueprint can be set with date reference and default format is set' do
18
+ skip('not yet')
19
+ blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
20
+ p.add_date_dimension("committed_on")
21
+
22
+ p.add_dataset("repos") do |d|
23
+ d.add_anchor("repo_id")
24
+ d.add_attribute("name")
25
+ d.add_date('opportunity_comitted', dataset: 'committed_on')
26
+ end
27
+ end
28
+ expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'][2]['constraints']).to eq ({ "date" => GoodData::Model::DEFAULT_DATE_FORMAT })
29
+ end
30
+
31
+ it 'blueprint can be set with date reference and default format is set' do
32
+ skip('not yet')
33
+ blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
34
+ p.add_date_dimension("committed_on")
35
+
36
+ p.add_dataset("repos") do |d|
37
+ d.add_anchor("repo_id")
38
+ d.add_attribute("name")
39
+ d.add_date('opportunity_comitted', dataset: 'committed_on', format: 'yyyy/MM/dd')
40
+ end
41
+ end
42
+ expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'][2]['constraints']).to eq ({ "date" => "yyyy/MM/dd" })
23
43
  end
24
44
  end
@@ -0,0 +1,86 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'gooddata/rest/rest'
4
+
5
+ describe 'Behavior during polling and retries' do
6
+ before :each do
7
+ WebMock.enable!
8
+
9
+ @server = GoodData::Environment::ConnectionHelper::DEFAULT_SERVER
10
+
11
+ @coef = GoodData::Rest::Connection::RETRY_TIME_COEFFICIENT
12
+ @init = GoodData::Rest::Connection::RETRY_TIME_INITIAL_VALUE
13
+ @poll = GoodData::Rest::Client::DEFAULT_SLEEP_INTERVAL
14
+
15
+ GoodData::Rest::Connection.send(:remove_const, :RETRY_TIME_COEFFICIENT) if GoodData::Rest::Connection.const_defined?(:RETRY_TIME_COEFFICIENT)
16
+ GoodData::Rest::Connection.send(:remove_const, :RETRY_TIME_INITIAL_VALUE) if GoodData::Rest::Connection.const_defined?(:RETRY_TIME_INITIAL_VALUE)
17
+ GoodData::Rest::Client.send(:remove_const, :DEFAULT_SLEEP_INTERVAL) if GoodData::Rest::Client.const_defined?(:DEFAULT_SLEEP_INTERVAL)
18
+
19
+ GoodData::Rest::Connection.const_set(:RETRY_TIME_COEFFICIENT, 1)
20
+ GoodData::Rest::Connection.const_set(:RETRY_TIME_INITIAL_VALUE, 0)
21
+ GoodData::Rest::Client.const_set(:DEFAULT_SLEEP_INTERVAL, 0)
22
+
23
+ stub_request(:post, "#{@server}/gdc/account/login")
24
+ .to_return(:body => { :userLogin => { :profile => "/profile/123" }}.to_json, :headers => { 'Content-Type' => "application/json" })
25
+ stub_request(:get, "#{@server}/gdc/account/token")
26
+ .to_return(:body => {}.to_json, :headers => { 'Content-Type' => "application/json" })
27
+ stub_request(:get, "#{@server}/profile/123")
28
+ .to_return(:body => {}.to_json, :headers => { 'Content-Type' => "application/json" })
29
+ stub_request(:get, "#{@server}/poll_test")
30
+ .to_return(:body => {stuff: :aaa}.to_json, :headers => { 'Content-Type' => "application/json"} )
31
+ stub_request(:get, "#{@server}/too_many_reqs")
32
+ .to_return(:body => {}.to_json, :status => 429, :headers => { 'Content-Type' => "application/json"} )
33
+ stub_request(:get, "#{@server}/out_of_service")
34
+ .to_return(:body => {}.to_json, :status => 503, :headers => { 'Content-Type' => "application/json"} )
35
+ stub_request(:get, "#{@server}/internal_error")
36
+ .to_return(:body => {}.to_json, :status => 500, :headers => { 'Content-Type' => "application/json"} )
37
+
38
+ @client = GoodData.connect('aaa', 'bbbb')
39
+ GoodData.logging_on
40
+ end
41
+
42
+ after :each do
43
+ WebMock.disable!
44
+ GoodData::Rest::Connection.send(:remove_const, :RETRY_TIME_COEFFICIENT) if GoodData::Rest::Connection.const_defined?(:RETRY_TIME_COEFFICIENT)
45
+ GoodData::Rest::Connection.send(:remove_const, :RETRY_TIME_INITIAL_VALUE) if GoodData::Rest::Connection.const_defined?(:RETRY_TIME_INITIAL_VALUE)
46
+ GoodData::Rest::Client.send(:remove_const, :DEFAULT_SLEEP_INTERVAL) if GoodData::Rest::Client.const_defined?(:DEFAULT_SLEEP_INTERVAL)
47
+
48
+ GoodData::Rest::Connection.const_set(:RETRY_TIME_COEFFICIENT, @coef)
49
+ GoodData::Rest::Connection.const_set(:RETRY_TIME_INITIAL_VALUE, @init)
50
+ GoodData::Rest::Client.const_set(:DEFAULT_SLEEP_INTERVAL, @poll)
51
+ end
52
+
53
+ it 'should fail a poller after timelimit passes' do
54
+ expect do
55
+ @client.poll_on_response('/poll_test', time_limit: 0.1) { |_| true }
56
+ end.to raise_error(GoodData::ExecutionLimitExceeded)
57
+ end
58
+
59
+ it 'should make MAX_REQUESTS when hitting 429' do
60
+ expect do
61
+ @client.get('/too_many_reqs')
62
+ end.to raise_error(RestClient::TooManyRequests)
63
+ expect(a_request(:get, "#{@server}/too_many_reqs")).to have_been_made.times(10)
64
+ end
65
+
66
+ it 'should make MAX_REQUESTS when hitting 503' do
67
+ expect do
68
+ @client.get('/out_of_service')
69
+ end.to raise_error(RestClient::ServiceUnavailable)
70
+ expect(a_request(:get, "#{@server}/out_of_service")).to have_been_made.times(10)
71
+ end
72
+
73
+ it 'should make 1 additional request when hitting 500' do
74
+ expect do
75
+ @client.get('/internal_error')
76
+ end.to raise_error(RestClient::InternalServerError)
77
+ expect(a_request(:get, "#{@server}/internal_error")).to have_been_made.times(3)
78
+ end
79
+
80
+ it 'Number of requests can be overriden' do
81
+ expect do
82
+ @client.get('/internal_error', :tries => 4)
83
+ end.to raise_error(RestClient::InternalServerError)
84
+ expect(a_request(:get, "#{@server}/internal_error")).to have_been_made.times(4)
85
+ end
86
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gooddata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.18
4
+ version: 0.6.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kolesnikov
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-05-20 00:00:00.000000000 Z
14
+ date: 2015-07-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rake
@@ -99,20 +99,20 @@ dependencies:
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.27'
102
+ version: 0.32.1
103
103
  - - ">="
104
104
  - !ruby/object:Gem::Version
105
- version: 0.27.0
105
+ version: 0.32.1
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
- version: '0.27'
112
+ version: 0.32.1
113
113
  - - ">="
114
114
  - !ruby/object:Gem::Version
115
- version: 0.27.0
115
+ version: 0.32.1
116
116
  - !ruby/object:Gem::Dependency
117
117
  name: simplecov
118
118
  requirement: !ruby/object:Gem::Requirement
@@ -201,6 +201,48 @@ dependencies:
201
201
  - - ">="
202
202
  - !ruby/object:Gem::Version
203
203
  version: 0.7.0
204
+ - !ruby/object:Gem::Dependency
205
+ name: guard
206
+ requirement: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - "~>"
209
+ - !ruby/object:Gem::Version
210
+ version: '2'
211
+ type: :development
212
+ prerelease: false
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - "~>"
216
+ - !ruby/object:Gem::Version
217
+ version: '2'
218
+ - !ruby/object:Gem::Dependency
219
+ name: guard-rspec
220
+ requirement: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - "~>"
223
+ - !ruby/object:Gem::Version
224
+ version: '4'
225
+ type: :development
226
+ prerelease: false
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: '4'
232
+ - !ruby/object:Gem::Dependency
233
+ name: webmock
234
+ requirement: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: 1.21.0
239
+ type: :development
240
+ prerelease: false
241
+ version_requirements: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - "~>"
244
+ - !ruby/object:Gem::Version
245
+ version: 1.21.0
204
246
  - !ruby/object:Gem::Dependency
205
247
  name: debase
206
248
  requirement: !ruby/object:Gem::Requirement
@@ -489,7 +531,7 @@ dependencies:
489
531
  requirements:
490
532
  - - "~>"
491
533
  - !ruby/object:Gem::Version
492
- version: '1.7'
534
+ version: 1.7.2
493
535
  - - ">="
494
536
  - !ruby/object:Gem::Version
495
537
  version: 1.7.2
@@ -499,7 +541,7 @@ dependencies:
499
541
  requirements:
500
542
  - - "~>"
501
543
  - !ruby/object:Gem::Version
502
- version: '1.7'
544
+ version: 1.7.2
503
545
  - - ">="
504
546
  - !ruby/object:Gem::Version
505
547
  version: 1.7.2
@@ -529,20 +571,20 @@ dependencies:
529
571
  requirements:
530
572
  - - "~>"
531
573
  - !ruby/object:Gem::Version
532
- version: '1.4'
574
+ version: '1.5'
533
575
  - - ">="
534
576
  - !ruby/object:Gem::Version
535
- version: 1.4.5
577
+ version: 1.5.1
536
578
  type: :runtime
537
579
  prerelease: false
538
580
  version_requirements: !ruby/object:Gem::Requirement
539
581
  requirements:
540
582
  - - "~>"
541
583
  - !ruby/object:Gem::Version
542
- version: '1.4'
584
+ version: '1.5'
543
585
  - - ">="
544
586
  - !ruby/object:Gem::Version
545
- version: 1.4.5
587
+ version: 1.5.1
546
588
  - !ruby/object:Gem::Dependency
547
589
  name: salesforce_bulk_query
548
590
  requirement: !ruby/object:Gem::Requirement
@@ -591,6 +633,7 @@ files:
591
633
  - CHANGELOG.md
592
634
  - CLI.md
593
635
  - Gemfile
636
+ - Guardfile
594
637
  - LICENSE
595
638
  - README.md
596
639
  - Rakefile
@@ -605,6 +648,7 @@ files:
605
648
  - lib/gooddata/bricks/base_downloader.rb
606
649
  - lib/gooddata/bricks/brick.rb
607
650
  - lib/gooddata/bricks/bricks.rb
651
+ - lib/gooddata/bricks/middleware/aws_middleware.rb
608
652
  - lib/gooddata/bricks/middleware/base_middleware.rb
609
653
  - lib/gooddata/bricks/middleware/bench_middleware.rb
610
654
  - lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb
@@ -661,8 +705,10 @@ files:
661
705
  - lib/gooddata/exceptions/attr_element_not_found.rb
662
706
  - lib/gooddata/exceptions/command_failed.rb
663
707
  - lib/gooddata/exceptions/exceptions.rb
708
+ - lib/gooddata/exceptions/execution_limit_exceeded.rb
664
709
  - lib/gooddata/exceptions/no_project_error.rb
665
710
  - lib/gooddata/exceptions/project_not_found.rb
711
+ - lib/gooddata/exceptions/uncomputable_report.rb
666
712
  - lib/gooddata/exceptions/user_in_different_domain.rb
667
713
  - lib/gooddata/exceptions/validation_error.rb
668
714
  - lib/gooddata/extensions/big_decimal.rb
@@ -714,7 +760,22 @@ files:
714
760
  - lib/gooddata/mixins/root_key_getter.rb
715
761
  - lib/gooddata/mixins/root_key_setter.rb
716
762
  - lib/gooddata/mixins/timestamps.rb
717
- - lib/gooddata/models/dashboard_builder.rb
763
+ - lib/gooddata/models/blueprint/anchor_field.rb
764
+ - lib/gooddata/models/blueprint/attribute_field.rb
765
+ - lib/gooddata/models/blueprint/blueprint.rb
766
+ - lib/gooddata/models/blueprint/blueprint_field.rb
767
+ - lib/gooddata/models/blueprint/dashboard_builder.rb
768
+ - lib/gooddata/models/blueprint/dataset_blueprint.rb
769
+ - lib/gooddata/models/blueprint/date_dimension.rb
770
+ - lib/gooddata/models/blueprint/fact_field.rb
771
+ - lib/gooddata/models/blueprint/label_field.rb
772
+ - lib/gooddata/models/blueprint/project_blueprint.rb
773
+ - lib/gooddata/models/blueprint/project_builder.rb
774
+ - lib/gooddata/models/blueprint/reference_field.rb
775
+ - lib/gooddata/models/blueprint/schema_blueprint.rb
776
+ - lib/gooddata/models/blueprint/schema_builder.rb
777
+ - lib/gooddata/models/blueprint/to_manifest.rb
778
+ - lib/gooddata/models/blueprint/to_wire.rb
718
779
  - lib/gooddata/models/data_result.rb
719
780
  - lib/gooddata/models/datawarehouse.rb
720
781
  - lib/gooddata/models/domain.rb
@@ -744,18 +805,12 @@ files:
744
805
  - lib/gooddata/models/process.rb
745
806
  - lib/gooddata/models/profile.rb
746
807
  - lib/gooddata/models/project.rb
747
- - lib/gooddata/models/project_blueprint.rb
748
- - lib/gooddata/models/project_builder.rb
749
808
  - lib/gooddata/models/project_creator.rb
750
809
  - lib/gooddata/models/project_metadata.rb
751
810
  - lib/gooddata/models/project_role.rb
752
811
  - lib/gooddata/models/report_data_result.rb
753
812
  - lib/gooddata/models/schedule.rb
754
- - lib/gooddata/models/schema_blueprint.rb
755
- - lib/gooddata/models/schema_builder.rb
756
813
  - lib/gooddata/models/tab_builder.rb
757
- - lib/gooddata/models/to_manifest.rb
758
- - lib/gooddata/models/to_wire.rb
759
814
  - lib/gooddata/models/user_filters/mandatory_user_filter.rb
760
815
  - lib/gooddata/models/user_filters/user_filter.rb
761
816
  - lib/gooddata/models/user_filters/user_filter_builder.rb
@@ -777,12 +832,16 @@ files:
777
832
  - lib/templates/project/data/devs.csv
778
833
  - lib/templates/project/data/repos.csv
779
834
  - lib/templates/project/model/model.rb.erb
780
- - out.txt
781
835
  - spec/bricks/bricks_spec.rb
782
836
  - spec/bricks/default-config.json
783
837
  - spec/data/.gooddata
784
- - spec/data/additional_dataset_module.json
785
- - spec/data/blueprint_invalid.json
838
+ - spec/data/blueprints/additional_dataset_module.json
839
+ - spec/data/blueprints/big_blueprint_not_pruned.json
840
+ - spec/data/blueprints/invalid_blueprint.json
841
+ - spec/data/blueprints/m_n_model.json
842
+ - spec/data/blueprints/model_module.json
843
+ - spec/data/blueprints/test_blueprint.json
844
+ - spec/data/blueprints/test_project_model_spec.json
786
845
  - spec/data/cc/data/source/commits.csv
787
846
  - spec/data/cc/data/source/devs.csv
788
847
  - spec/data/cc/data/source/repos.csv
@@ -799,20 +858,25 @@ files:
799
858
  - spec/data/hello_world_process/hello_world.rb
800
859
  - spec/data/hello_world_process/hello_world.zip
801
860
  - spec/data/line_based_permissions.csv
802
- - spec/data/m_n_model/blueprint.json
803
- - spec/data/manifest_test_project.json
804
- - spec/data/model_module.json
861
+ - spec/data/manifests/test_blueprint.json
862
+ - spec/data/manifests/test_project.json
805
863
  - spec/data/ruby_params_process/ruby_params.rb
806
864
  - spec/data/ruby_process/deep_files/deep_stuff.txt
807
865
  - spec/data/ruby_process/process.rb
808
866
  - spec/data/ruby_process/stuff.txt
809
867
  - spec/data/superfluous_titles_view.json
810
868
  - spec/data/test-ci-data.csv
811
- - spec/data/test_project_model_spec.json
812
869
  - spec/data/users.csv
813
870
  - spec/data/wire_models/model_view.json
814
871
  - spec/data/wire_models/nu_model.json
872
+ - spec/data/wire_models/test_blueprint.json
815
873
  - spec/data/wire_test_project.json
874
+ - spec/environment/default.rb
875
+ - spec/environment/develop.rb
876
+ - spec/environment/environment.rb
877
+ - spec/environment/hotfix.rb
878
+ - spec/environment/production.rb
879
+ - spec/environment/release.rb
816
880
  - spec/helpers/blueprint_helper.rb
817
881
  - spec/helpers/cli_helper.rb
818
882
  - spec/helpers/connection_helper.rb
@@ -821,6 +885,8 @@ files:
821
885
  - spec/helpers/process_helper.rb
822
886
  - spec/helpers/project_helper.rb
823
887
  - spec/helpers/schedule_helper.rb
888
+ - spec/helpers/spec_helper.rb
889
+ - spec/integration/blueprint_updates_spec.rb
824
890
  - spec/integration/command_datawarehouse_spec.rb
825
891
  - spec/integration/command_projects_spec.rb
826
892
  - spec/integration/create_from_template_spec.rb
@@ -836,6 +902,7 @@ files:
836
902
  - spec/logging_in_logging_out_spec.rb
837
903
  - spec/spec_helper.rb
838
904
  - spec/unit/bricks/bricks_spec.rb
905
+ - spec/unit/bricks/middleware/aws_middelware_spec.rb
839
906
  - spec/unit/bricks/middleware/bench_middleware_spec.rb
840
907
  - spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb
841
908
  - spec/unit/bricks/middleware/gooddata_middleware_spec.rb
@@ -868,9 +935,16 @@ files:
868
935
  - spec/unit/extensions/hash_spec.rb
869
936
  - spec/unit/godzilla/goodzilla_spec.rb
870
937
  - spec/unit/helpers/csv_helper_spec.rb
938
+ - spec/unit/helpers/data_helper_spec.rb
871
939
  - spec/unit/helpers/global_helpers_spec.rb
872
940
  - spec/unit/helpers_spec.rb
873
- - spec/unit/models/attribute_column_spec.rb
941
+ - spec/unit/models/blueprint/attributes_spec.rb
942
+ - spec/unit/models/blueprint/dataset_spec.rb
943
+ - spec/unit/models/blueprint/labels_spec.rb
944
+ - spec/unit/models/blueprint/project_blueprint_spec.rb
945
+ - spec/unit/models/blueprint/reference_spec.rb
946
+ - spec/unit/models/blueprint/schema_builder_spec.rb
947
+ - spec/unit/models/blueprint/to_wire_spec.rb
874
948
  - spec/unit/models/domain_spec.rb
875
949
  - spec/unit/models/execution_spec.rb
876
950
  - spec/unit/models/from_wire_spec.rb
@@ -881,17 +955,15 @@ files:
881
955
  - spec/unit/models/model_spec.rb
882
956
  - spec/unit/models/params_spec.rb
883
957
  - spec/unit/models/profile_spec.rb
884
- - spec/unit/models/project_blueprint_spec.rb
885
958
  - spec/unit/models/project_creator.rb
886
959
  - spec/unit/models/project_role_spec.rb
887
960
  - spec/unit/models/project_spec.rb
888
961
  - spec/unit/models/schedule_spec.rb
889
- - spec/unit/models/schema_builder_spec.rb
890
962
  - spec/unit/models/to_manifest_spec.rb
891
- - spec/unit/models/to_wire_spec.rb
892
963
  - spec/unit/models/unit_project.rb
893
964
  - spec/unit/models/user_filters_spec.rb
894
965
  - spec/unit/models/variable_spec.rb
966
+ - spec/unit/rest/polling_spec.rb
895
967
  - spec/unit/rest/resource_spec.rb
896
968
  - tmp/.gitkeepme
897
969
  - yard-server.sh