gooddata 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. checksums.yaml +13 -5
  2. data/.rubocop.yml +23 -0
  3. data/.travis.yml +9 -4
  4. data/CLI.md +439 -0
  5. data/Gemfile +0 -1
  6. data/README.md +2 -2
  7. data/Rakefile +60 -8
  8. data/doc/templates/default/module/setup.rb +1 -1
  9. data/examples.rb +2 -0
  10. data/gooddata +2 -0
  11. data/gooddata.gemspec +12 -8
  12. data/lib/gooddata.rb +0 -2
  13. data/lib/gooddata/bricks/base_downloader.rb +52 -47
  14. data/lib/gooddata/bricks/brick.rb +20 -31
  15. data/lib/gooddata/bricks/bricks.rb +1 -1
  16. data/lib/gooddata/bricks/middleware/base_middleware.rb +9 -7
  17. data/lib/gooddata/bricks/middleware/bench_middleware.rb +12 -10
  18. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +28 -28
  19. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +20 -16
  20. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +21 -19
  21. data/lib/gooddata/bricks/middleware/logger_middleware.rb +10 -8
  22. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +36 -34
  23. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +11 -9
  24. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +14 -12
  25. data/lib/gooddata/bricks/pipeline.rb +28 -0
  26. data/lib/gooddata/bricks/utils.rb +10 -8
  27. data/lib/gooddata/cli/cli.rb +1 -6
  28. data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
  29. data/lib/gooddata/cli/commands/console_cmd.rb +7 -5
  30. data/lib/gooddata/cli/commands/domain_cmd.rb +45 -0
  31. data/lib/gooddata/cli/commands/process_cmd.rb +42 -5
  32. data/lib/gooddata/cli/commands/project_cmd.rb +96 -36
  33. data/lib/gooddata/cli/commands/projects_cmd.rb +21 -0
  34. data/lib/gooddata/cli/commands/role_cmd.rb +28 -0
  35. data/lib/gooddata/cli/commands/run_ruby_cmd.rb +5 -5
  36. data/lib/gooddata/cli/commands/scaffold_cmd.rb +1 -1
  37. data/lib/gooddata/cli/commands/{profile_cmd.rb → user_cmd.rb} +7 -9
  38. data/lib/gooddata/cli/shared.rb +3 -2
  39. data/lib/gooddata/client.rb +16 -304
  40. data/lib/gooddata/commands/api.rb +13 -5
  41. data/lib/gooddata/commands/auth.rb +47 -40
  42. data/lib/gooddata/commands/base.rb +4 -2
  43. data/lib/gooddata/commands/commands.rb +1 -1
  44. data/lib/gooddata/commands/datasets.rb +20 -7
  45. data/lib/gooddata/commands/domain.rb +23 -0
  46. data/lib/gooddata/commands/process.rb +23 -117
  47. data/lib/gooddata/commands/project.rb +147 -0
  48. data/lib/gooddata/commands/projects.rb +8 -102
  49. data/lib/gooddata/commands/role.rb +26 -0
  50. data/lib/gooddata/commands/runners.rb +41 -38
  51. data/lib/gooddata/commands/scaffold.rb +46 -43
  52. data/lib/gooddata/commands/user.rb +33 -0
  53. data/lib/gooddata/connection.rb +43 -353
  54. data/lib/gooddata/core/connection.rb +389 -0
  55. data/lib/gooddata/core/core.rb +5 -4
  56. data/lib/gooddata/core/logging.rb +48 -0
  57. data/lib/gooddata/core/nil_logger.rb +13 -0
  58. data/lib/gooddata/core/project.rb +70 -0
  59. data/lib/gooddata/core/rest.rb +120 -0
  60. data/lib/gooddata/core/threaded.rb +14 -0
  61. data/lib/gooddata/core/user.rb +19 -0
  62. data/lib/gooddata/data/data.rb +2 -1
  63. data/lib/gooddata/data/guesser.rb +16 -12
  64. data/lib/gooddata/exceptions/command_failed.rb +1 -1
  65. data/lib/gooddata/exceptions/exceptions.rb +2 -1
  66. data/lib/gooddata/exceptions/no_project_error.rb +11 -0
  67. data/lib/gooddata/exceptions/project_not_found.rb +1 -1
  68. data/lib/gooddata/extensions/big_decimal.rb +6 -2
  69. data/lib/gooddata/extract.rb +10 -8
  70. data/lib/gooddata/goodzilla/goodzilla.rb +61 -59
  71. data/lib/gooddata/helpers.rb +15 -9
  72. data/lib/gooddata/models/account_settings.rb +124 -0
  73. data/lib/gooddata/models/attributes/anchor.rb +37 -0
  74. data/lib/gooddata/models/attributes/attributes.rb +8 -0
  75. data/lib/gooddata/models/attributes/date_attribute.rb +25 -0
  76. data/lib/gooddata/models/attributes/time_attribute.rb +24 -0
  77. data/lib/gooddata/models/columns/attribute.rb +71 -0
  78. data/lib/gooddata/models/columns/columns.rb +8 -0
  79. data/lib/gooddata/models/columns/date_column.rb +63 -0
  80. data/lib/gooddata/models/columns/fact_model.rb +54 -0
  81. data/lib/gooddata/models/columns/label.rb +55 -0
  82. data/lib/gooddata/models/columns/reference.rb +57 -0
  83. data/lib/gooddata/models/dashboard_builder.rb +26 -0
  84. data/lib/gooddata/models/data_result.rb +10 -9
  85. data/lib/gooddata/models/domain.rb +131 -0
  86. data/lib/gooddata/models/empty_result.rb +5 -8
  87. data/lib/gooddata/models/facts/facts.rb +8 -0
  88. data/lib/gooddata/models/facts/time_fact.rb +20 -0
  89. data/lib/gooddata/models/folders/attribute_folder.rb +20 -0
  90. data/lib/gooddata/models/folders/fact_folder.rb +20 -0
  91. data/lib/gooddata/models/folders/folders.rb +8 -0
  92. data/lib/gooddata/models/invitation.rb +78 -0
  93. data/lib/gooddata/models/links.rb +6 -6
  94. data/lib/gooddata/models/md_object.rb +25 -0
  95. data/lib/gooddata/models/metadata.rb +160 -62
  96. data/lib/gooddata/models/metadata/attribute.rb +81 -0
  97. data/lib/gooddata/models/metadata/column.rb +61 -0
  98. data/lib/gooddata/models/{dashboard.rb → metadata/dashboard.rb} +12 -7
  99. data/lib/gooddata/models/{data_set.rb → metadata/data_set.rb} +5 -4
  100. data/lib/gooddata/models/metadata/date_dimension.rb +26 -0
  101. data/lib/gooddata/models/metadata/display_form.rb +61 -0
  102. data/lib/gooddata/models/metadata/fact.rb +36 -0
  103. data/lib/gooddata/models/metadata/folder.rb +24 -0
  104. data/lib/gooddata/models/metadata/metadata.rb +8 -0
  105. data/lib/gooddata/models/metadata/metric.rb +197 -0
  106. data/lib/gooddata/models/metadata/report.rb +115 -0
  107. data/lib/gooddata/models/{report_definition.rb → metadata/report_definition.rb} +16 -10
  108. data/lib/gooddata/models/metadata/schema.rb +227 -0
  109. data/lib/gooddata/models/model.rb +38 -1339
  110. data/lib/gooddata/models/models.rb +5 -2
  111. data/lib/gooddata/models/module_constants.rb +29 -0
  112. data/lib/gooddata/models/process.rb +142 -13
  113. data/lib/gooddata/models/profile.rb +4 -6
  114. data/lib/gooddata/models/project.rb +406 -136
  115. data/lib/gooddata/models/project_blueprint.rb +221 -0
  116. data/lib/gooddata/models/project_builder.rb +136 -0
  117. data/lib/gooddata/models/project_creator.rb +138 -0
  118. data/lib/gooddata/models/project_metadata.rb +11 -10
  119. data/lib/gooddata/models/project_role.rb +92 -0
  120. data/lib/gooddata/models/references/date_reference.rb +44 -0
  121. data/lib/gooddata/models/references/references.rb +8 -0
  122. data/lib/gooddata/models/references/time_reference.rb +13 -0
  123. data/lib/gooddata/models/report_data_result.rb +11 -11
  124. data/lib/gooddata/models/schedule.rb +284 -0
  125. data/lib/gooddata/models/schema_blueprint.rb +158 -0
  126. data/lib/gooddata/models/schema_builder.rb +81 -0
  127. data/lib/gooddata/models/tab_builder.rb +23 -0
  128. data/lib/gooddata/models/user.rb +165 -0
  129. data/lib/gooddata/version.rb +1 -1
  130. data/lib/templates/project/data/devs.csv +1 -1
  131. data/lib/templates/project/data/repos.csv +1 -1
  132. data/lib/templates/project/model/model.rb.erb +7 -11
  133. data/spec/bricks/bricks_spec.rb +2 -0
  134. data/spec/data/test-ci-data.csv +2 -0
  135. data/spec/data/test_project_model_spec.json +7 -27
  136. data/spec/helpers/blueprint_helper.rb +2 -0
  137. data/spec/helpers/cli_helper.rb +2 -0
  138. data/spec/helpers/connection_helper.rb +14 -1
  139. data/spec/helpers/project_helper.rb +16 -0
  140. data/spec/helpers/schema_helper.rb +16 -0
  141. data/spec/integration/command_projects_spec.rb +7 -7
  142. data/spec/integration/create_from_template_spec.rb +2 -2
  143. data/spec/integration/full_project_spec.rb +160 -7
  144. data/spec/integration/partial_md_export_import_spec.rb +3 -3
  145. data/spec/logging_in_logging_out_spec.rb +2 -1
  146. data/spec/spec_helper.rb +26 -4
  147. data/spec/unit/bricks/bricks_spec.rb +15 -7
  148. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +2 -0
  149. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +2 -0
  150. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +2 -0
  151. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +2 -0
  152. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +2 -0
  153. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +2 -0
  154. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +2 -0
  155. data/spec/unit/cli/cli_spec.rb +2 -0
  156. data/spec/unit/cli/commands/cmd_api_spec.rb +23 -15
  157. data/spec/unit/cli/commands/cmd_auth_spec.rb +8 -4
  158. data/spec/unit/cli/commands/cmd_domain_spec.rb +82 -0
  159. data/spec/unit/cli/commands/cmd_process_spec.rb +29 -13
  160. data/spec/unit/cli/commands/cmd_project_spec.rb +51 -30
  161. data/spec/unit/cli/commands/cmd_role_spec.rb +44 -0
  162. data/spec/unit/cli/commands/cmd_run_ruby_spec.rb +8 -4
  163. data/spec/unit/cli/commands/cmd_scaffold_spec.rb +48 -11
  164. data/spec/unit/cli/commands/cmd_user_spec.rb +29 -0
  165. data/spec/unit/commands/command_api_spec.rb +1 -1
  166. data/spec/unit/commands/command_auth_spec.rb +100 -18
  167. data/spec/unit/commands/command_dataset_spec.rb +4 -0
  168. data/spec/unit/commands/command_process_spec.rb +9 -4
  169. data/spec/unit/commands/command_projects_spec.rb +10 -6
  170. data/spec/unit/commands/command_scaffold_spec.rb +5 -1
  171. data/spec/unit/commands/command_user_spec.rb +22 -0
  172. data/spec/unit/core/connection_spec.rb +35 -6
  173. data/spec/unit/core/logging_spec.rb +65 -0
  174. data/spec/unit/core/nil_logger_spec.rb +9 -0
  175. data/spec/unit/core/project_spec.rb +51 -0
  176. data/spec/unit/core/rest_spec.rb +33 -0
  177. data/spec/unit/data/guesser_spec.rb +5 -0
  178. data/spec/unit/godzilla/goodzilla_spec.rb +2 -0
  179. data/spec/unit/models/account_settings_spec.rb +28 -0
  180. data/spec/unit/models/anchor_spec.rb +32 -0
  181. data/spec/unit/models/attribute_column_spec.rb +7 -0
  182. data/spec/unit/models/domain_spec.rb +45 -0
  183. data/spec/unit/models/invitation_spec.rb +13 -0
  184. data/spec/unit/models/md_object_spec.rb +47 -0
  185. data/spec/unit/models/metric.rb +92 -0
  186. data/spec/unit/{model → models}/model_spec.rb +9 -7
  187. data/spec/unit/models/project_blueprint_spec.rb +202 -0
  188. data/spec/unit/models/project_creator.rb +73 -0
  189. data/spec/unit/models/project_role_spec.rb +90 -0
  190. data/spec/unit/models/project_spec.rb +143 -0
  191. data/spec/unit/models/schedule_spec.rb +491 -0
  192. data/spec/unit/{model → models}/schema_builder_spec.rb +2 -0
  193. data/spec/unit/{model → models}/tools_spec.rb +13 -7
  194. data/spec/unit/models/user_spec.rb +16 -0
  195. data/test/test_upload.rb +2 -0
  196. metadata +189 -86
  197. data/lib/gooddata/commands/profile.rb +0 -11
  198. data/lib/gooddata/models/attribute.rb +0 -29
  199. data/lib/gooddata/models/display_form.rb +0 -9
  200. data/lib/gooddata/models/fact.rb +0 -19
  201. data/lib/gooddata/models/metric.rb +0 -99
  202. data/lib/gooddata/models/report.rb +0 -89
  203. data/spec/data/blueprint_valid.json +0 -37
  204. data/spec/unit/cli/commands/cmd_profile_spec.rb +0 -16
  205. data/spec/unit/commands/command_profile_spec.rb +0 -18
  206. data/spec/unit/core/core_spec.rb +0 -7
  207. data/spec/unit/model/blueprint_spec.rb +0 -132
  208. data/spec/unit/model/project_blueprint_spec.rb +0 -44
@@ -1,11 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module GoodData::Command
4
- class Profile
5
- class << self
6
- def show
7
- GoodData.profile.to_json
8
- end
9
- end
10
- end
11
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require_relative 'metadata'
4
-
5
- module GoodData
6
- class Attribute < GoodData::MdObject
7
- root_key :attribute
8
-
9
- class << self
10
- def [](id)
11
- if id == :all
12
- GoodData.get(GoodData.project.md['query'] + '/attributes/')['query']['entries']
13
- else
14
- super
15
- end
16
- end
17
- end
18
-
19
- def display_forms
20
- content['displayForms'].map { |df| GoodData::DisplayForm[df['meta']['uri']] }
21
- end
22
-
23
- alias :labels :display_forms
24
-
25
- def is_attribute?
26
- true
27
- end
28
- end
29
- end
@@ -1,9 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require_relative 'metadata'
4
-
5
- module GoodData
6
- class DisplayForm < GoodData::MdObject
7
- root_key :attributeDisplayForm
8
- end
9
- end
@@ -1,19 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require_relative 'metadata'
4
-
5
- module GoodData
6
- class Fact < GoodData::MdObject
7
- root_key :fact
8
-
9
- class << self
10
- def [](id)
11
- if id == :all
12
- GoodData.get(GoodData.project.md['query'] + '/facts/')['query']['entries']
13
- else
14
- super
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,99 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require_relative 'metadata'
4
- require_relative '../goodzilla/goodzilla'
5
-
6
- module GoodData
7
- # Metric representation
8
- class Metric < GoodData::MdObject
9
- root_key :metric
10
-
11
- class << self
12
- def [](id)
13
- if id == :all
14
- GoodData.get(GoodData.project.md['query'] + '/metrics/')['query']['entries']
15
- else
16
- super
17
- end
18
- end
19
-
20
- def xcreate(options)
21
- if options.is_a?(String)
22
- create({:expression => options, :extended_notation => true})
23
- else
24
- create(options.merge({:extended_notation => true}))
25
- end
26
- end
27
-
28
- def create(options={})
29
- if options.is_a?(String)
30
- expression = options
31
- extended_notation = false
32
- title = nil
33
- else
34
- title = options[:title]
35
- summary = options[:summary]
36
- expression = options[:expression] || fail('Metric has to have its expression defined')
37
- extended_notation = options[:extended_notation] || false
38
- end
39
-
40
- expression = if extended_notation
41
- dict = {
42
- :facts => GoodData::Fact[:all].reduce({}) { |memo, item| memo[item['title']] = item['link']; memo },
43
- :attributes => GoodData::Attribute[:all].reduce({}) { |memo, item| memo[item['title']] = item['link']; memo },
44
- :metrics => GoodData::Metric[:all].reduce({}) { |memo, item| memo[item['title']] = item['link']; memo },
45
- }
46
- interpolated_metric = GoodData::SmallGoodZilla.interpolate_metric(expression, dict)
47
- interpolated_metric
48
- else
49
- expression
50
- end
51
-
52
- Metric.new({
53
- 'metric' => {
54
- 'content' => {
55
- 'format' => '#,##0',
56
- 'expression' => expression
57
- },
58
- 'meta' => {
59
- 'tags' => '',
60
- 'summary' => summary,
61
- 'title' => title,
62
- }
63
- }
64
- })
65
- end
66
-
67
- def execute(expression, options={})
68
- m = if expression.is_a?(String)
69
- GoodData::Metric.create({:title => 'Temporary metric to be deleted', :expression => expression}.merge(options))
70
- else
71
- GoodData::Metric.create({:title => 'Temporary metric to be deleted'}.merge(expression))
72
- end
73
- m.execute
74
- end
75
-
76
- def xexecute(expression)
77
- if expression.is_a?(String)
78
- execute({:expression => expression, :extended_notation => true})
79
- else
80
- execute(expression.merge({:extended_notation => true}))
81
- end
82
- end
83
- end
84
-
85
- def execute
86
- res = GoodData::ReportDefinition.execute(:left => self)
87
- res[0][0]
88
- end
89
-
90
- def validate
91
- fail 'Meric needs to have title' if title.nil?
92
- true
93
- end
94
-
95
- def is_metric?
96
- true
97
- end
98
- end
99
- end
@@ -1,89 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require_relative 'metadata'
4
-
5
- module GoodData
6
- class Report < GoodData::MdObject
7
- root_key :report
8
-
9
- class << self
10
- def [](id)
11
- if id == :all
12
- uri = GoodData.project.md['query'] + '/reports/'
13
- GoodData.get(uri)['query']['entries']
14
- else
15
- super
16
- end
17
- end
18
-
19
- def create(options={})
20
- title = options[:title]
21
- summary = options[:summary] || ''
22
- rd = options[:rd] || ReportDefinition.create(:top => options[:top], :left => options[:left])
23
- rd.save
24
-
25
- report = Report.new({
26
- 'report' => {
27
- 'content' => {
28
- 'domains' => [],
29
- 'definitions' => [rd.uri]
30
- },
31
- 'meta' => {
32
- 'tags' => '',
33
- 'deprecated' => '0',
34
- 'summary' => summary,
35
- 'title' => title
36
- }
37
- }
38
- })
39
- end
40
- end
41
-
42
- def results
43
- content['results']
44
- end
45
-
46
- def get_latest_report_definition_uri
47
- report_result = get_latest_report_result
48
- report_result.content['reportDefinition']
49
- end
50
-
51
- def get_latest_report_definition
52
- GoodData::MdObject[get_latest_report_definition_uri]
53
- end
54
-
55
- def get_latest_report_result_uri
56
- results.last
57
- end
58
-
59
- def get_latest_report_result
60
- GoodData::MdObject[get_latest_report_result_uri]
61
- end
62
-
63
- def execute
64
- result = GoodData.post '/gdc/xtab2/executor3', {'report_req' => {'report' => uri}}
65
- data_result_uri = result['execResult']['dataResult']
66
- result = GoodData.get data_result_uri
67
- while result['taskState'] && result['taskState']['status'] == 'WAIT' do
68
- sleep 10
69
- result = GoodData.get data_result_uri
70
- end
71
- ReportDataResult.new(GoodData.get data_result_uri)
72
- end
73
-
74
- def exportable?
75
- true
76
- end
77
-
78
- def export(format)
79
- result = GoodData.post('/gdc/xtab2/executor3', {'report_req' => {'report' => uri}})
80
- result1 = GoodData.post('/gdc/exporter/executor', {:result_req => {:format => format, :result => result}})
81
- png = GoodData.get(result1['uri'], :process => false)
82
- while (png.code == 202) do
83
- sleep(1)
84
- png = GoodData.get(result1['uri'], :process => false)
85
- end
86
- png
87
- end
88
- end
89
- end
@@ -1,37 +0,0 @@
1
- {
2
- "title": "x",
3
- "datasets": [
4
- {
5
- "name": "payments",
6
- "columns": [
7
- {
8
- "type": "attribute",
9
- "name": "id"
10
- },
11
- {
12
- "type": "fact",
13
- "name": "amount"
14
- },
15
- {
16
- "type": "reference",
17
- "name": "user_id",
18
- "dataset": "users",
19
- "reference": "user_id"
20
- }
21
- ]
22
- },
23
- {
24
- "name": "users",
25
- "columns": [
26
- {
27
- "type": "attribute",
28
- "name": "user_id"
29
- },
30
- {
31
- "type": "fact",
32
- "name": "amount"
33
- }
34
- ]
35
- }
36
- ]
37
- }
@@ -1,16 +0,0 @@
1
- require 'gooddata/cli/cli'
2
-
3
- describe GoodData::CLI do
4
- it "Has working 'profile' command" do
5
- args = %w(profile)
6
-
7
- out = run_cli(args)
8
- out.should include("Command 'profile' requires a subcommand show")
9
- end
10
-
11
- it "Has working 'profile show' command" do
12
- args = %w(profile show)
13
-
14
- run_cli(args)
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- require 'gooddata/commands/profile'
2
-
3
- describe GoodData::Command::Profile do
4
- before(:each) do
5
- ConnectionHelper::create_default_connection
6
- end
7
-
8
- it "Is Possible to create GoodData::Command::Profile instance" do
9
- cmd = GoodData::Command::Profile.new()
10
- cmd.should be_a(GoodData::Command::Profile)
11
- end
12
-
13
- describe "#show" do
14
- it "Shows profile" do
15
- GoodData::Command::Profile.show
16
- end
17
- end
18
- end
@@ -1,7 +0,0 @@
1
- require 'gooddata/core/core'
2
-
3
- describe GoodData::Core do
4
- it "Has GoodData::Core class" do
5
- GoodData::Core.should_not be(nil)
6
- end
7
- end
@@ -1,132 +0,0 @@
1
- require 'pry'
2
- require 'gooddata/models/model'
3
-
4
- describe GoodData::Model::ProjectBlueprint do
5
-
6
- before(:each) do
7
- @valid_blueprint = GoodData::Model::ProjectBlueprint.new(
8
- {
9
- title: 'x',
10
- datasets: [
11
- {
12
- name: 'payments',
13
- columns: [
14
- {
15
- type: 'attribute',
16
- name: 'id'
17
- },
18
- {
19
- type: 'fact',
20
- name: 'amount'
21
- },
22
- {
23
- type: 'reference',
24
- name: 'user_id',
25
- dataset: 'users',
26
- reference: 'user_id'
27
- },
28
- ]
29
- },
30
- {
31
- name: 'users',
32
- columns: [
33
- {
34
- type: 'anchor',
35
- name: 'user_id'
36
- },
37
- {
38
- type: 'fact',
39
- name: 'amount'
40
- }
41
- ]
42
- }
43
- ]})
44
-
45
- @invalid_blueprint = GoodData::Model::ProjectBlueprint.new(
46
- {
47
- title: 'x',
48
- datasets: [
49
- {
50
- name: 'payments',
51
- columns: [
52
- {
53
- type: 'attribute',
54
- name: 'id'
55
- },
56
- {
57
- type: 'fact',
58
- name: 'amount'
59
- },
60
- {
61
- type: 'reference',
62
- name: 'user_id',
63
- dataset: 'users',
64
- reference: 'user_id'
65
- },
66
- ]
67
- },
68
- {
69
- name: 'users',
70
- columns: [
71
- {
72
- type: 'attribute',
73
- name: 'user_id'
74
- },
75
- {
76
- type: 'fact',
77
- name: 'amount'
78
- }
79
- ]
80
- }
81
- ]})
82
-
83
- # @valid_blueprint = blueprint = BlueprintHelper.blueprint_from_file(File.join(File.dirname(__FILE__), '../data', 'blueprint_valid.json'))
84
-
85
- # @invalid_blueprint = BlueprintHelper.blueprint_from_file(File.join(File.dirname(__FILE__), '../data', 'blueprint_valid.json'))
86
- end
87
-
88
- it "valid blueprint should be marked as valid" do
89
- @valid_blueprint.model_valid?.should == true
90
- end
91
-
92
- it "valid blueprint should give you empty array of errors" do
93
- expect(@valid_blueprint.model_validate).to be_empty
94
- end
95
-
96
- it "invalid blueprint should be marked as invalid" do
97
- @invalid_blueprint.model_valid?.should == false
98
- end
99
-
100
- it "invalid blueprint should give you list of violating references" do
101
- errors = @invalid_blueprint.model_validate
102
- errors.size.should == 1
103
- errors.first.should == {
104
- type: 'reference',
105
- name: 'user_id',
106
- dataset: 'users',
107
- reference: 'user_id'
108
- }
109
- end
110
-
111
- it "references return empty array if there is no reference" do
112
- refs = @valid_blueprint.get_dataset("users").references
113
- expect(refs).to be_empty
114
- end
115
-
116
- it "should be able to get dataset by name" do
117
- ds = @valid_blueprint.get_dataset("users")
118
- ds.name.should == "users"
119
- end
120
-
121
- it "should tell you it has anchor when it does" do
122
- ds = @valid_blueprint.get_dataset("users")
123
- ds.has_anchor?.should == true
124
- end
125
-
126
- it "should tell you it does not have anchor when it does not" do
127
- ds = @invalid_blueprint.get_dataset("users")
128
- ds.has_anchor?.should == false
129
- end
130
-
131
-
132
- end