gooddata 0.6.18 → 0.6.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.travis.yml +8 -19
- data/Guardfile +5 -0
- data/README.md +1 -3
- data/bin/gooddata +1 -1
- data/gooddata.gemspec +6 -4
- data/lib/gooddata.rb +1 -1
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +24 -0
- data/lib/gooddata/cli/commands/console_cmd.rb +1 -1
- data/lib/gooddata/cli/commands/project_cmd.rb +29 -9
- data/lib/gooddata/cli/hooks.rb +9 -3
- data/lib/gooddata/commands/datawarehouse.rb +1 -7
- data/lib/gooddata/commands/project.rb +4 -3
- data/lib/gooddata/core/logging.rb +14 -2
- data/lib/gooddata/exceptions/execution_limit_exceeded.rb +9 -0
- data/lib/gooddata/exceptions/uncomputable_report.rb +8 -0
- data/lib/gooddata/exceptions/validation_error.rb +1 -1
- data/lib/gooddata/goodzilla/goodzilla.rb +5 -1
- data/lib/gooddata/helpers/data_helper.rb +40 -9
- data/lib/gooddata/mixins/md_finders.rb +35 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +46 -0
- data/lib/gooddata/models/blueprint/attribute_field.rb +25 -0
- data/lib/gooddata/models/blueprint/blueprint.rb +7 -0
- data/lib/gooddata/models/blueprint/blueprint_field.rb +66 -0
- data/lib/gooddata/models/{dashboard_builder.rb → blueprint/dashboard_builder.rb} +0 -0
- data/lib/gooddata/models/{schema_blueprint.rb → blueprint/dataset_blueprint.rb} +176 -117
- data/lib/gooddata/models/blueprint/date_dimension.rb +10 -0
- data/lib/gooddata/models/blueprint/fact_field.rb +16 -0
- data/lib/gooddata/models/blueprint/label_field.rb +39 -0
- data/lib/gooddata/models/{project_blueprint.rb → blueprint/project_blueprint.rb} +366 -168
- data/lib/gooddata/models/blueprint/project_builder.rb +79 -0
- data/lib/gooddata/models/blueprint/reference_field.rb +39 -0
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +156 -0
- data/lib/gooddata/models/blueprint/schema_builder.rb +85 -0
- data/lib/gooddata/models/{to_manifest.rb → blueprint/to_manifest.rb} +25 -20
- data/lib/gooddata/models/{to_wire.rb → blueprint/to_wire.rb} +33 -52
- data/lib/gooddata/models/datawarehouse.rb +2 -2
- data/lib/gooddata/models/domain.rb +3 -2
- data/lib/gooddata/models/execution.rb +2 -2
- data/lib/gooddata/models/execution_detail.rb +7 -2
- data/lib/gooddata/models/from_wire.rb +60 -71
- data/lib/gooddata/models/from_wire_parse.rb +125 -125
- data/lib/gooddata/models/metadata.rb +14 -0
- data/lib/gooddata/models/metadata/dashboard.rb +2 -2
- data/lib/gooddata/models/metadata/label.rb +1 -1
- data/lib/gooddata/models/metadata/report.rb +6 -5
- data/lib/gooddata/models/metadata/report_definition.rb +44 -59
- data/lib/gooddata/models/model.rb +131 -43
- data/lib/gooddata/models/process.rb +13 -11
- data/lib/gooddata/models/profile.rb +12 -1
- data/lib/gooddata/models/project.rb +223 -19
- data/lib/gooddata/models/project_creator.rb +4 -15
- data/lib/gooddata/models/schedule.rb +1 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +2 -2
- data/lib/gooddata/rest/client.rb +18 -18
- data/lib/gooddata/rest/connection.rb +113 -94
- data/lib/gooddata/version.rb +1 -1
- data/lib/templates/project/model/model.rb.erb +15 -16
- data/spec/data/blueprints/additional_dataset_module.json +32 -0
- data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
- data/spec/data/blueprints/invalid_blueprint.json +103 -0
- data/spec/data/blueprints/m_n_model.json +104 -0
- data/spec/data/blueprints/model_module.json +25 -0
- data/spec/data/blueprints/test_blueprint.json +38 -0
- data/spec/data/blueprints/test_project_model_spec.json +106 -0
- data/spec/data/gd_gse_data_manifest.json +34 -34
- data/spec/data/manifests/test_blueprint.json +32 -0
- data/spec/data/{manifest_test_project.json → manifests/test_project.json} +9 -18
- data/spec/data/wire_models/test_blueprint.json +63 -0
- data/spec/data/wire_test_project.json +5 -5
- data/spec/environment/default.rb +33 -0
- data/spec/environment/develop.rb +26 -0
- data/spec/environment/environment.rb +14 -0
- data/spec/environment/hotfix.rb +17 -0
- data/spec/environment/production.rb +31 -0
- data/spec/environment/release.rb +17 -0
- data/spec/helpers/blueprint_helper.rb +10 -7
- data/spec/helpers/cli_helper.rb +24 -22
- data/spec/helpers/connection_helper.rb +27 -25
- data/spec/helpers/crypto_helper.rb +7 -5
- data/spec/helpers/csv_helper.rb +5 -3
- data/spec/helpers/process_helper.rb +15 -10
- data/spec/helpers/project_helper.rb +40 -33
- data/spec/helpers/schedule_helper.rb +15 -9
- data/spec/helpers/spec_helper.rb +11 -0
- data/spec/integration/blueprint_updates_spec.rb +93 -0
- data/spec/integration/command_datawarehouse_spec.rb +2 -1
- data/spec/integration/command_projects_spec.rb +9 -8
- data/spec/integration/create_from_template_spec.rb +1 -1
- data/spec/integration/create_project_spec.rb +1 -1
- data/spec/integration/full_process_schedule_spec.rb +1 -1
- data/spec/integration/full_project_spec.rb +91 -30
- data/spec/integration/over_to_user_filters_spec.rb +24 -28
- data/spec/integration/partial_md_export_import_spec.rb +4 -4
- data/spec/integration/project_spec.rb +1 -1
- data/spec/integration/rest_spec.rb +1 -1
- data/spec/integration/user_filters_spec.rb +19 -24
- data/spec/integration/variables_spec.rb +7 -9
- data/spec/logging_in_logging_out_spec.rb +1 -1
- data/spec/spec_helper.rb +10 -1
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +47 -0
- data/spec/unit/core/connection_spec.rb +2 -2
- data/spec/unit/core/logging_spec.rb +12 -4
- data/spec/unit/helpers/data_helper_spec.rb +60 -0
- data/spec/unit/models/blueprint/attributes_spec.rb +24 -0
- data/spec/unit/models/blueprint/dataset_spec.rb +116 -0
- data/spec/unit/models/blueprint/labels_spec.rb +39 -0
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +643 -0
- data/spec/unit/models/blueprint/reference_spec.rb +24 -0
- data/spec/unit/models/{schema_builder_spec.rb → blueprint/schema_builder_spec.rb} +12 -4
- data/spec/unit/models/blueprint/to_wire_spec.rb +169 -0
- data/spec/unit/models/domain_spec.rb +13 -2
- data/spec/unit/models/from_wire_spec.rb +277 -98
- data/spec/unit/models/metadata_spec.rb +22 -4
- data/spec/unit/models/model_spec.rb +49 -39
- data/spec/unit/models/profile_spec.rb +1 -0
- data/spec/unit/models/project_spec.rb +7 -7
- data/spec/unit/models/schedule_spec.rb +20 -0
- data/spec/unit/models/to_manifest_spec.rb +31 -11
- data/spec/unit/rest/polling_spec.rb +86 -0
- metadata +102 -30
- data/lib/gooddata/models/project_builder.rb +0 -136
- data/lib/gooddata/models/schema_builder.rb +0 -77
- data/out.txt +0 -0
- data/spec/data/additional_dataset_module.json +0 -18
- data/spec/data/blueprint_invalid.json +0 -38
- data/spec/data/m_n_model/blueprint.json +0 -76
- data/spec/data/model_module.json +0 -18
- data/spec/data/test_project_model_spec.json +0 -76
- data/spec/unit/models/attribute_column_spec.rb +0 -7
- data/spec/unit/models/project_blueprint_spec.rb +0 -239
- data/spec/unit/models/to_wire_spec.rb +0 -71
@@ -1,136 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require_relative 'dashboard_builder'
|
4
|
-
require_relative 'schema_builder'
|
5
|
-
|
6
|
-
module GoodData
|
7
|
-
module Model
|
8
|
-
class ProjectBuilder
|
9
|
-
attr_reader :title, :datasets, :reports, :metrics, :uploads, :users, :assert_report, :date_dimensions
|
10
|
-
|
11
|
-
class << self
|
12
|
-
def create_from_data(blueprint, title = 'Title')
|
13
|
-
pb = ProjectBuilder.new(title)
|
14
|
-
pb.data = blueprint.to_hash
|
15
|
-
pb
|
16
|
-
end
|
17
|
-
|
18
|
-
def create(title, _options = {}, &block)
|
19
|
-
pb = ProjectBuilder.new(title)
|
20
|
-
block.call(pb)
|
21
|
-
pb
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize(title)
|
26
|
-
@title = title
|
27
|
-
@datasets = []
|
28
|
-
@reports = []
|
29
|
-
@assert_tests = []
|
30
|
-
@metrics = []
|
31
|
-
@uploads = []
|
32
|
-
@users = []
|
33
|
-
@dashboards = []
|
34
|
-
@date_dimensions = []
|
35
|
-
end
|
36
|
-
|
37
|
-
def add_date_dimension(name, options = {})
|
38
|
-
dimension = {
|
39
|
-
urn: options[:urn],
|
40
|
-
name: name,
|
41
|
-
title: options[:title]
|
42
|
-
}
|
43
|
-
|
44
|
-
@date_dimensions << dimension
|
45
|
-
end
|
46
|
-
|
47
|
-
def add_dataset(name, &block)
|
48
|
-
builder = GoodData::Model::SchemaBuilder.new(name)
|
49
|
-
block.call(builder)
|
50
|
-
if @datasets.any? { |item| item[:name] == name }
|
51
|
-
ds = @datasets.find { |item| item[:name] == name }
|
52
|
-
index = @datasets.index(ds)
|
53
|
-
stuff = GoodData::Model.merge_dataset_columns(ds, builder.to_hash)
|
54
|
-
@datasets.delete_at(index)
|
55
|
-
@datasets.insert(index, stuff)
|
56
|
-
else
|
57
|
-
@datasets << builder.to_hash
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def add_report(title, options = {})
|
62
|
-
@reports << { :title => title }.merge(options)
|
63
|
-
end
|
64
|
-
|
65
|
-
def add_metric(title, options = {})
|
66
|
-
@metrics << { :title => title }.merge(options)
|
67
|
-
end
|
68
|
-
|
69
|
-
def add_dashboard(title, &block)
|
70
|
-
db = DashboardBuilder.new(title)
|
71
|
-
block.call(db)
|
72
|
-
@dashboards << db.to_hash
|
73
|
-
end
|
74
|
-
|
75
|
-
def load_metrics(file)
|
76
|
-
new_metrics = MultiJson.load(open(file).read, :symbolize_keys => true)
|
77
|
-
@metrics += new_metrics
|
78
|
-
end
|
79
|
-
|
80
|
-
def load_datasets(file)
|
81
|
-
new_metrics = MultiJson.load(open(file).read, :symbolize_keys => true)
|
82
|
-
@datasets += new_metrics
|
83
|
-
end
|
84
|
-
|
85
|
-
def assert_report(report, result)
|
86
|
-
@assert_tests << { :report => report, :result => result }
|
87
|
-
end
|
88
|
-
|
89
|
-
def upload(data, options = {})
|
90
|
-
mode = options[:mode] || 'FULL'
|
91
|
-
dataset = options[:dataset]
|
92
|
-
@uploads << {
|
93
|
-
:source => data,
|
94
|
-
:mode => mode,
|
95
|
-
:dataset => dataset
|
96
|
-
}
|
97
|
-
end
|
98
|
-
|
99
|
-
def add_users(users)
|
100
|
-
@users << users
|
101
|
-
end
|
102
|
-
|
103
|
-
def to_json(options = {})
|
104
|
-
eliminate_empty = options[:eliminate_empty] || false
|
105
|
-
|
106
|
-
if eliminate_empty
|
107
|
-
JSON.pretty_generate(to_hash.reject { |_k, v| v.is_a?(Enumerable) && v.empty? })
|
108
|
-
else
|
109
|
-
JSON.pretty_generate(to_hash)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def to_blueprint
|
114
|
-
GoodData::Model::ProjectBlueprint.new(to_hash)
|
115
|
-
end
|
116
|
-
|
117
|
-
def to_hash
|
118
|
-
{
|
119
|
-
:title => @title,
|
120
|
-
:datasets => @datasets,
|
121
|
-
:uploads => @uploads,
|
122
|
-
:dashboards => @dashboards,
|
123
|
-
:metrics => @metrics,
|
124
|
-
:reports => @reports,
|
125
|
-
:users => @users,
|
126
|
-
:assert_tests => @assert_tests,
|
127
|
-
:date_dimensions => @date_dimensions
|
128
|
-
}
|
129
|
-
end
|
130
|
-
|
131
|
-
def find_dataset(name)
|
132
|
-
datasets.find { |d| d.name == name }
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
module GoodData
|
4
|
-
module Model
|
5
|
-
class SchemaBuilder
|
6
|
-
attr_accessor :data
|
7
|
-
|
8
|
-
class << self
|
9
|
-
def create_from_data(blueprint)
|
10
|
-
sc = SchemaBuilder.new
|
11
|
-
sc.data = blueprint.to_hash
|
12
|
-
sc
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize(name = nil)
|
17
|
-
@data = {
|
18
|
-
:name => name,
|
19
|
-
:columns => []
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
def name
|
24
|
-
data[:name]
|
25
|
-
end
|
26
|
-
|
27
|
-
def columns
|
28
|
-
data[:columns]
|
29
|
-
end
|
30
|
-
|
31
|
-
def add_column(column_def)
|
32
|
-
columns.push(column_def)
|
33
|
-
self
|
34
|
-
end
|
35
|
-
|
36
|
-
def add_anchor(name, options = {})
|
37
|
-
add_column({ :type => :anchor, :name => name }.merge(options))
|
38
|
-
self
|
39
|
-
end
|
40
|
-
|
41
|
-
def add_attribute(name, options = {})
|
42
|
-
add_column({ :type => :attribute, :name => name }.merge(options))
|
43
|
-
self
|
44
|
-
end
|
45
|
-
|
46
|
-
def add_fact(name, options = {})
|
47
|
-
add_column({ :type => :fact, :name => name }.merge(options))
|
48
|
-
self
|
49
|
-
end
|
50
|
-
|
51
|
-
def add_label(name, options = {})
|
52
|
-
add_column({ :type => :label, :name => name }.merge(options))
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
def add_date(name, options = {})
|
57
|
-
add_column({ :type => :date, :name => name }.merge(options))
|
58
|
-
end
|
59
|
-
|
60
|
-
def add_reference(name, options = {})
|
61
|
-
add_column({ :type => :reference, :name => name }.merge(options))
|
62
|
-
end
|
63
|
-
|
64
|
-
def to_json
|
65
|
-
JSON.pretty_generate(to_hash)
|
66
|
-
end
|
67
|
-
|
68
|
-
def to_hash
|
69
|
-
data
|
70
|
-
end
|
71
|
-
|
72
|
-
def to_blueprint
|
73
|
-
GoodData::Model::DatasetBlueprint.new(to_hash)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/out.txt
DELETED
File without changes
|
@@ -1,38 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"title": "x",
|
3
|
-
"datasets": [
|
4
|
-
{
|
5
|
-
"name": "payments",
|
6
|
-
"columns": [
|
7
|
-
{
|
8
|
-
"type": "attribute",
|
9
|
-
"name": "id",
|
10
|
-
"gd_data_type" : "INT",
|
11
|
-
"gd_type" : "GDC.text"
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"type": "fact",
|
15
|
-
"name": "amount"
|
16
|
-
},
|
17
|
-
{
|
18
|
-
"type": "reference",
|
19
|
-
"name": "user_id",
|
20
|
-
"dataset": "users",
|
21
|
-
"reference": "user_id"
|
22
|
-
}
|
23
|
-
]
|
24
|
-
},
|
25
|
-
{
|
26
|
-
"name": "users",
|
27
|
-
"columns": [
|
28
|
-
{
|
29
|
-
"type": "attribute",
|
30
|
-
"name": "user_id"
|
31
|
-
},
|
32
|
-
{
|
33
|
-
"type": "fact",
|
34
|
-
"name": "amount"
|
35
|
-
}
|
36
|
-
]
|
37
|
-
}
|
38
|
-
]}
|
@@ -1,76 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"title": "GD M:N project testing",
|
3
|
-
"datasets": [
|
4
|
-
{
|
5
|
-
"type": "dataset",
|
6
|
-
"name": "visibility",
|
7
|
-
"columns": [
|
8
|
-
{
|
9
|
-
"type": "anchor",
|
10
|
-
"name": "visibility_id"
|
11
|
-
},
|
12
|
-
{
|
13
|
-
"type": "reference",
|
14
|
-
"name": "perm_user_id",
|
15
|
-
"dataset": "permission_users"
|
16
|
-
},
|
17
|
-
{
|
18
|
-
"type": "reference",
|
19
|
-
"name": "commit_id",
|
20
|
-
"dataset": "commits"
|
21
|
-
}
|
22
|
-
]
|
23
|
-
},
|
24
|
-
{
|
25
|
-
"type": "dataset",
|
26
|
-
"name": "users",
|
27
|
-
"columns": [
|
28
|
-
{
|
29
|
-
"type": "anchor",
|
30
|
-
"name": "user_id"
|
31
|
-
},
|
32
|
-
{
|
33
|
-
"type": "label",
|
34
|
-
"name": "email",
|
35
|
-
"reference": "user_id",
|
36
|
-
"default_label" : true
|
37
|
-
}
|
38
|
-
]
|
39
|
-
},
|
40
|
-
{
|
41
|
-
"type": "dataset",
|
42
|
-
"name": "permission_users",
|
43
|
-
"columns": [
|
44
|
-
{
|
45
|
-
"type": "anchor",
|
46
|
-
"name": "perm_user_id"
|
47
|
-
},
|
48
|
-
{
|
49
|
-
"type": "label",
|
50
|
-
"name": "email",
|
51
|
-
"reference": "perm_user_id",
|
52
|
-
"default_label" : true
|
53
|
-
}
|
54
|
-
]
|
55
|
-
},
|
56
|
-
{
|
57
|
-
"type": "dataset",
|
58
|
-
"name": "commits",
|
59
|
-
"columns": [
|
60
|
-
{
|
61
|
-
"type": "anchor",
|
62
|
-
"name": "commit_id"
|
63
|
-
},
|
64
|
-
{
|
65
|
-
"type": "fact",
|
66
|
-
"name": "lines_changed"
|
67
|
-
},
|
68
|
-
{
|
69
|
-
"type": "reference",
|
70
|
-
"name": "user_id",
|
71
|
-
"dataset": "users"
|
72
|
-
}
|
73
|
-
]
|
74
|
-
}
|
75
|
-
]
|
76
|
-
}
|
data/spec/data/model_module.json
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"title": "RubyGem Dev Week test",
|
3
|
-
"datasets": [
|
4
|
-
{
|
5
|
-
"type": "dataset",
|
6
|
-
"name": "repos",
|
7
|
-
"folder": "Foldered Repos",
|
8
|
-
"columns": [
|
9
|
-
{
|
10
|
-
"type": "anchor",
|
11
|
-
"name": "repo_id",
|
12
|
-
"description": "This is anchor description"
|
13
|
-
},
|
14
|
-
{
|
15
|
-
"type": "label",
|
16
|
-
"name": "name",
|
17
|
-
"reference": "repo_id"
|
18
|
-
},
|
19
|
-
{
|
20
|
-
"type": "attribute",
|
21
|
-
"name": "department"
|
22
|
-
}
|
23
|
-
]
|
24
|
-
},
|
25
|
-
{
|
26
|
-
"type": "dataset",
|
27
|
-
"name": "devs",
|
28
|
-
"columns": [
|
29
|
-
{
|
30
|
-
"type": "anchor",
|
31
|
-
"name": "dev_id"
|
32
|
-
},
|
33
|
-
{
|
34
|
-
"type": "label",
|
35
|
-
"name": "email",
|
36
|
-
"reference": "dev_id",
|
37
|
-
"default_label" : true
|
38
|
-
}
|
39
|
-
]
|
40
|
-
},
|
41
|
-
{
|
42
|
-
"type": "dataset",
|
43
|
-
"name": "commits",
|
44
|
-
"columns": [
|
45
|
-
{
|
46
|
-
"type": "fact",
|
47
|
-
"name": "lines_changed",
|
48
|
-
"description": "Fact description"
|
49
|
-
},
|
50
|
-
{
|
51
|
-
"type": "date",
|
52
|
-
"name": "committed_on",
|
53
|
-
"dataset": "committed_on"
|
54
|
-
},
|
55
|
-
{
|
56
|
-
"type": "reference",
|
57
|
-
"name": "dev_id",
|
58
|
-
"dataset": "devs",
|
59
|
-
"reference": "dev_id"
|
60
|
-
},
|
61
|
-
{
|
62
|
-
"type": "reference",
|
63
|
-
"name": "repo_id",
|
64
|
-
"dataset": "repos",
|
65
|
-
"reference": "repo_id"
|
66
|
-
}
|
67
|
-
]
|
68
|
-
}
|
69
|
-
],
|
70
|
-
"date_dimensions": [
|
71
|
-
{
|
72
|
-
"type": "date_dimension",
|
73
|
-
"name": "committed_on"
|
74
|
-
}
|
75
|
-
]
|
76
|
-
}
|