gooddata 1.2.1-java → 1.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.pronto.yml +1 -0
- data/CHANGELOG.md +13 -1
- data/Rakefile +23 -42
- data/lib/gooddata/lcm/actions/collect_segment_clients.rb +5 -12
- data/lib/gooddata/lcm/actions/create_segment_masters.rb +7 -15
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +5 -13
- data/lib/gooddata/lcm/helpers/release_table_helper.rb +29 -0
- data/lib/gooddata/models/blueprint/bridge_field.rb +43 -0
- data/lib/gooddata/models/blueprint/dataset_blueprint.rb +17 -0
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +7 -0
- data/lib/gooddata/models/blueprint/to_wire.rb +14 -2
- data/lib/gooddata/models/from_wire.rb +19 -8
- data/lib/gooddata/models/model.rb +1 -1
- data/lib/gooddata/rest/connection.rb +1 -1
- data/lib/gooddata/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b48905b795b73128a61f84b07810a685a6805b79
|
4
|
+
data.tar.gz: 3cf38bc8e8d47ac4e30270ff04ec4792fab29f96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5adb48ac0a518affbe50f57e693dfc83c3f254caf543c7c32adc552ccef564b9882c207d541067b5682b89b498faa8a201cb91879c90c2fc0068e09099f2be1c
|
7
|
+
data.tar.gz: 217f13bdd340f4190e614f5bb28be027ae98bd44f7cb9f70cdd6fbb8392bb09a175c897a7dedd705e090469bf78dcf1a2505912aea04e34deefd557a24fea980
|
data/.pronto.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
# GoodData Ruby SDK Changelog
|
2
|
+
## 1.3.0
|
3
|
+
- Add changelog for 1.2.1
|
4
|
+
- Automate bumping version (#1243)
|
5
|
+
- TMA-787 added support M:N in LCM
|
6
|
+
- Fix spec for synchronize_ldm=diff_against_master
|
7
|
+
- TRIVIAL: remove the newline character from the CSV header string
|
8
|
+
- TMA-484: Fix getting latest master version (#1258)
|
9
|
+
- minor fixes to the load tests
|
10
|
+
- Enable lcm tests on personal instance
|
11
|
+
- TMA-787 added support M:N in LCM
|
12
|
+
- Fix logging error
|
13
|
+
|
2
14
|
|
3
15
|
## 1.2.1
|
4
16
|
- Document gem release process (#1254)
|
@@ -124,7 +136,7 @@
|
|
124
136
|
- TMA-604: can put metrics in folders
|
125
137
|
- TMA-843: avoid abuse of obj resource in partial md import export
|
126
138
|
- TMA-892: User filters brick dry run (#1156)
|
127
|
-
- * TMA-892: User filters brick dry run
|
139
|
+
- * TMA-892: User filters brick dry run
|
128
140
|
- TMA-761: add support for manual schedule execution
|
129
141
|
- fix recovery from provision clients error
|
130
142
|
- make sso backwards compatible
|
data/Rakefile
CHANGED
@@ -142,53 +142,34 @@ namespace :license do
|
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
puts
|
158
|
-
|
159
|
-
changes
|
160
|
-
|
161
|
-
file.puts changelog_header + "\n"
|
162
|
-
file.puts "## #{new_version}"
|
163
|
-
changes.each { |change| file.puts ' - ' + change }
|
164
|
-
file.puts changelog
|
165
|
-
end
|
166
|
-
# `git add CHANGELOG.md lib/gooddata/version.rb`
|
167
|
-
# `git commit -m "Bump version to #{new_version}"`
|
168
|
-
# `git tag #{new_version}`
|
145
|
+
# Updates the changelog with commit messages
|
146
|
+
def update_changelog(new_version)
|
147
|
+
changelog = File.read('CHANGELOG.md')
|
148
|
+
changelog_header = '# GoodData Ruby SDK Changelog'
|
149
|
+
changelog.slice! changelog_header
|
150
|
+
fail 'the version is already mentioned in the changelog' if changelog =~ /## #{new_version}/
|
151
|
+
puts "Creating changelog for version #{new_version}"
|
152
|
+
current_commit = `git rev-parse HEAD`.chomp
|
153
|
+
last_release = changelog.split("\n").reject(&:empty?).first.delete('## ').chomp
|
154
|
+
last_release_commit = `git rev-parse #{last_release}`.chomp
|
155
|
+
changes = `git log --format=%s --no-merges #{last_release_commit}..#{current_commit}`.split("\n").reject(&:empty?)
|
156
|
+
File.open('CHANGELOG.md', 'w+') do |file|
|
157
|
+
file.puts changelog_header + "\n"
|
158
|
+
file.puts "## #{new_version}"
|
159
|
+
changes.each { |change| file.puts ' - ' + change }
|
160
|
+
file.puts changelog
|
169
161
|
end
|
170
162
|
end
|
171
163
|
|
172
|
-
namespace :
|
173
|
-
desc 'Updates the changelog
|
174
|
-
task :
|
164
|
+
namespace :version do
|
165
|
+
desc 'Updates the changelog, commits and tags the bump'
|
166
|
+
task :bump do
|
175
167
|
require_relative 'lib/gooddata/version'
|
176
168
|
new_version = GoodData::VERSION
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
puts "Creating changelog for version #{new_version}"
|
182
|
-
current_commit = `git rev-parse HEAD`.chomp
|
183
|
-
last_release = changelog.split("\n").reject(&:empty?).first.delete('## ').chomp
|
184
|
-
last_release_commit = `git rev-parse #{last_release}`.chomp
|
185
|
-
changes = `git log --format=%B --no-merges #{last_release_commit}..#{current_commit}`.split("\n").reject(&:empty?)
|
186
|
-
File.open('CHANGELOG.md', 'w+') do |file|
|
187
|
-
file.puts changelog_header + "\n"
|
188
|
-
file.puts "## #{new_version}"
|
189
|
-
changes.each { |change| file.puts ' - ' + change }
|
190
|
-
file.puts changelog
|
191
|
-
end
|
169
|
+
update_changelog(new_version)
|
170
|
+
`git add CHANGELOG.md lib/gooddata/version.rb`
|
171
|
+
`git commit -m "Bump version to #{new_version}"`
|
172
|
+
`git tag #{new_version}`
|
192
173
|
end
|
193
174
|
end
|
194
175
|
|
@@ -35,8 +35,6 @@ module GoodData
|
|
35
35
|
:to_pid
|
36
36
|
]
|
37
37
|
|
38
|
-
DEFAULT_TABLE_NAME = 'LCM_RELEASE'
|
39
|
-
|
40
38
|
class << self
|
41
39
|
def call(params)
|
42
40
|
client = params.gdc_gd_client
|
@@ -49,16 +47,11 @@ module GoodData
|
|
49
47
|
|
50
48
|
raise "Client(s) missing workspace: #{missing_project_clients.join(', ')}. Please make sure all clients have workspace." unless missing_project_clients.empty?
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
path = File.expand_path('../../data/select_from_lcm_release.sql.erb', __FILE__)
|
58
|
-
query = GoodData::Helpers::ErbHelper.template_file(path, replacements)
|
59
|
-
|
60
|
-
res = params.ads_client.execute_select(query)
|
61
|
-
latest_master_id = res.max_by { |row| row[:version] }[:master_project_id]
|
50
|
+
latest_master_id = GoodData::LCM2::Helpers.latest_master_project(
|
51
|
+
params.release_table_name,
|
52
|
+
params.ads_client,
|
53
|
+
segment.segment_id
|
54
|
+
)[:master_project_id]
|
62
55
|
latest_master = client.projects(latest_master_id)
|
63
56
|
|
64
57
|
# TODO: Check res.first.nil? || res.first[:master_project_id].nil?
|
@@ -46,8 +46,6 @@ module GoodData
|
|
46
46
|
param :gdc_logger, instance_of(Type::GdLogger), required: true
|
47
47
|
end
|
48
48
|
|
49
|
-
DEFAULT_TABLE_NAME = 'LCM_RELEASE'
|
50
|
-
|
51
49
|
class << self
|
52
50
|
def call(params)
|
53
51
|
results = []
|
@@ -150,19 +148,13 @@ module GoodData
|
|
150
148
|
end
|
151
149
|
|
152
150
|
def get_project_version(params, segment_id)
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
res = params.ads_client.execute_select(query)
|
162
|
-
|
163
|
-
return 0 if res.empty?
|
164
|
-
|
165
|
-
res[0][:version].to_i
|
151
|
+
current_master = GoodData::LCM2::Helpers.latest_master_project(
|
152
|
+
params.release_table_name,
|
153
|
+
params.ads_client,
|
154
|
+
segment_id
|
155
|
+
)
|
156
|
+
return 0 unless current_master
|
157
|
+
current_master[:version].to_i
|
166
158
|
end
|
167
159
|
end
|
168
160
|
end
|
@@ -44,8 +44,6 @@ module GoodData
|
|
44
44
|
:master_pid
|
45
45
|
]
|
46
46
|
|
47
|
-
DEFAULT_TABLE_NAME = 'LCM_RELEASE'
|
48
|
-
|
49
47
|
class << self
|
50
48
|
def call(params)
|
51
49
|
client = params.gdc_gd_client
|
@@ -63,17 +61,11 @@ module GoodData
|
|
63
61
|
end
|
64
62
|
|
65
63
|
results = segments.map do |segment|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
path = File.expand_path('../../data/select_from_lcm_release.sql.erb', __FILE__)
|
72
|
-
query = GoodData::Helpers::ErbHelper.template_file(path, replacements)
|
73
|
-
|
74
|
-
res = params.ads_client.execute_select(query)
|
75
|
-
sorted = res.sort_by { |row| row[:version] }
|
76
|
-
current_master = sorted.last[:master_project_id]
|
64
|
+
current_master = GoodData::LCM2::Helpers.latest_master_project(
|
65
|
+
params.release_table_name,
|
66
|
+
params.ads_client,
|
67
|
+
segment.segment_id
|
68
|
+
)[:master_project_id]
|
77
69
|
|
78
70
|
# TODO: Check res.first.nil? || res.first[:master_project_id].nil?
|
79
71
|
master = client.projects(current_master)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2018 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
module GoodData
|
8
|
+
module LCM2
|
9
|
+
class Helpers
|
10
|
+
DEFAULT_TABLE_NAME = 'LCM_RELEASE'
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def latest_master_project(release_table_name, ads_client, segment_id)
|
14
|
+
replacements = {
|
15
|
+
table_name: release_table_name || DEFAULT_TABLE_NAME,
|
16
|
+
segment_id: segment_id
|
17
|
+
}
|
18
|
+
|
19
|
+
path = File.expand_path('../../data/select_from_lcm_release.sql.erb', __FILE__)
|
20
|
+
query = GoodData::Helpers::ErbHelper.template_file(path, replacements)
|
21
|
+
|
22
|
+
res = ads_client.execute_select(query)
|
23
|
+
sorted = res.sort_by { |row| row[:version] }
|
24
|
+
sorted.last
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require_relative 'blueprint_field'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
module Model
|
11
|
+
class BridgeBlueprintField < BlueprintField
|
12
|
+
# Returns the schema that is referenced by this ref
|
13
|
+
#
|
14
|
+
# @return [GoodData::Model::SchemaBlueprint] the referencesd schema
|
15
|
+
def dataset
|
16
|
+
dataset_blueprint.find_dataset(bridge, include_date_dimensions: true)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the string bridge of the ref which is string Id of dataset that is bridged.
|
20
|
+
#
|
21
|
+
# @return [String] Id of the bridged dataset
|
22
|
+
def bridge
|
23
|
+
data[:dataset]
|
24
|
+
end
|
25
|
+
|
26
|
+
# Validates the fields in the ref
|
27
|
+
#
|
28
|
+
# @return [Array] returns list of the errors represented by hash structures
|
29
|
+
def validate
|
30
|
+
validate_presence_of(:dataset).map do |e|
|
31
|
+
{ type: :error, message: "Field \"#{e}\" is not defined or empty for bridge \"#{data}\"" }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the md object in associated project or throws error if not present
|
36
|
+
#
|
37
|
+
# @return [GoodData::MdObject] md object that is represented in the blueprint
|
38
|
+
def in_project(_project)
|
39
|
+
fail NotImplementedError, 'Reference does not have representation as an object in datamart'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -166,6 +166,14 @@ module GoodData
|
|
166
166
|
find_columns_by_type(dataset, :reference, :date)
|
167
167
|
end
|
168
168
|
|
169
|
+
# Returns bridges of a dataset
|
170
|
+
#
|
171
|
+
# @param dataset [Hash] Dataset blueprint
|
172
|
+
# @return [Array<Hash>] returns the bridges or an empty array
|
173
|
+
def self.bridges(dataset)
|
174
|
+
find_columns_by_type(dataset, :bridge)
|
175
|
+
end
|
176
|
+
|
169
177
|
# Returns anchor of a dataset
|
170
178
|
#
|
171
179
|
# @return [Hash] returns the anchor or nil
|
@@ -222,6 +230,8 @@ module GoodData
|
|
222
230
|
GoodData::Model::FactBlueprintField.new(c, self)
|
223
231
|
when :label
|
224
232
|
GoodData::Model::LabelBlueprintField.new(c, self)
|
233
|
+
when :bridge
|
234
|
+
GoodData::Model::BridgeBlueprintField.new(c, self)
|
225
235
|
when :reference
|
226
236
|
GoodData::Model::ReferenceBlueprintField.new(c, self)
|
227
237
|
when :date
|
@@ -352,6 +362,13 @@ module GoodData
|
|
352
362
|
find_columns_by_type(:reference, :date)
|
353
363
|
end
|
354
364
|
|
365
|
+
# Returns bridges of a dataset
|
366
|
+
#
|
367
|
+
# @return [Array<Hash>] returns the bridges or an empty array
|
368
|
+
def bridges
|
369
|
+
find_columns_by_type(:bridge)
|
370
|
+
end
|
371
|
+
|
355
372
|
# Removes column from from the blueprint
|
356
373
|
#
|
357
374
|
# @param id [String] Id of the column to be removed
|
@@ -35,6 +35,13 @@ module GoodData
|
|
35
35
|
[]
|
36
36
|
end
|
37
37
|
|
38
|
+
# Returns list of all bridges defined on the schema.
|
39
|
+
#
|
40
|
+
# @return [Array<GoodData::Model::BridgeBlueprintField>] refs on schema
|
41
|
+
def bridges
|
42
|
+
[]
|
43
|
+
end
|
44
|
+
|
38
45
|
# Returns list of all facts defined on the schema.
|
39
46
|
#
|
40
47
|
# @return [Array<GoodData::Model::FactBlueprintField>] facts on schema
|
@@ -98,7 +98,8 @@ module GoodData
|
|
98
98
|
anchor: anchor_to_wire(project, dataset),
|
99
99
|
attributes: attributes_to_wire(project, dataset),
|
100
100
|
facts: DatasetBlueprint.facts(dataset).map { |f| fact_to_wire(dataset, f) },
|
101
|
-
references: references_to_wire(project, dataset)
|
101
|
+
references: references_to_wire(project, dataset),
|
102
|
+
bridges: bridges_to_wire(project, dataset)
|
102
103
|
}
|
103
104
|
}
|
104
105
|
end
|
@@ -108,12 +109,13 @@ module GoodData
|
|
108
109
|
# @param project [Hash] Project blueprint hash represenation
|
109
110
|
# @param dataset [Hash] Dataset blueprint hash represenation
|
110
111
|
# @return [Hash] Manifest for a particular reference
|
111
|
-
def self.date_dimension_to_wire(
|
112
|
+
def self.date_dimension_to_wire(project, dataset)
|
112
113
|
payload = {}.tap do |dd|
|
113
114
|
dd[:name] = dataset[:id]
|
114
115
|
dd[:urn] = dataset[:urn] if dataset[:urn]
|
115
116
|
dd[:title] = GoodData::Model.title(dataset)
|
116
117
|
dd[:identifierPrefix] = dataset[:identifier_prefix] if dataset[:identifier_prefix]
|
118
|
+
dd[:bridges] = bridges_to_wire(project, dataset)
|
117
119
|
end
|
118
120
|
{ dateDimension: payload }
|
119
121
|
end
|
@@ -150,6 +152,16 @@ module GoodData
|
|
150
152
|
end
|
151
153
|
end
|
152
154
|
|
155
|
+
# Converts bridges to wire format.
|
156
|
+
#
|
157
|
+
# @param _project [Hash] Project blueprint hash represenation
|
158
|
+
# @return [Hash] Manifest for a particular bridge
|
159
|
+
def self.bridges_to_wire(_project, bridge)
|
160
|
+
DatasetBlueprint.bridges(bridge).map do |r|
|
161
|
+
r[:dataset]
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
153
165
|
# Entry method. Converts ProjectBlueprint representation into wire format
|
154
166
|
# which is understood by the API
|
155
167
|
#
|
@@ -14,11 +14,10 @@ module GoodData
|
|
14
14
|
def self.dataset_from_wire(dataset)
|
15
15
|
{}.tap do |d|
|
16
16
|
id = dataset['dataset']['identifier']
|
17
|
-
|
18
17
|
d[:type] = :dataset
|
19
18
|
d[:title] = dataset['dataset']['title']
|
20
19
|
d[:id] = id
|
21
|
-
d[:columns] = (parse_anchor(dataset) + parse_attributes(dataset) + parse_facts(dataset) + parse_references(dataset))
|
20
|
+
d[:columns] = (parse_anchor(dataset) + parse_attributes(dataset) + parse_facts(dataset) + parse_references(dataset) + parse_bridges(dataset))
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
@@ -31,7 +30,6 @@ module GoodData
|
|
31
30
|
model = wire_model['projectModelView']['model']['projectModel']
|
32
31
|
datasets = model['datasets'] || []
|
33
32
|
dims = model['dateDimensions'] || []
|
34
|
-
|
35
33
|
ProjectBlueprint.new(
|
36
34
|
include_ca: options[:include_ca],
|
37
35
|
datasets: datasets.map { |ds| dataset_from_wire(ds) },
|
@@ -109,6 +107,7 @@ module GoodData
|
|
109
107
|
d[:title] = date_dim['dateDimension']['title']
|
110
108
|
d[:urn] = date_dim['dateDimension']['urn']
|
111
109
|
d[:identifier_prefix] = date_dim['dateDimension']['identifierPrefix']
|
110
|
+
d[:columns] = parse_bridges(date_dim)
|
112
111
|
end
|
113
112
|
end
|
114
113
|
|
@@ -154,17 +153,29 @@ module GoodData
|
|
154
153
|
# @return [Hash] Manifest for a particular reference
|
155
154
|
def self.parse_references(dataset)
|
156
155
|
references = dataset['dataset']['references'] || []
|
156
|
+
references.map do |ref|
|
157
|
+
{
|
158
|
+
:type => ref =~ /^dataset\./ ? :reference : :date,
|
159
|
+
:dataset => ref
|
160
|
+
}
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
# Converts bridges from wire format into an internal blueprint representation
|
165
|
+
#
|
166
|
+
# @param dataset [Hash] Whatever comes from wire
|
167
|
+
# @return [Hash] Manifest for a particular bridge
|
168
|
+
def self.parse_bridges(dataset)
|
169
|
+
references = !dataset['dataset'].nil? && !dataset['dataset']['bridges'].nil? ? dataset['dataset']['bridges'] : []
|
170
|
+
references = !dataset['dateDimension'].nil? && !dataset['dateDimension']['bridges'].nil? ? dataset['dateDimension']['bridges'] : references
|
157
171
|
references.map do |ref|
|
158
172
|
if ref =~ /^dataset\./
|
159
173
|
{
|
160
|
-
:type => :
|
174
|
+
:type => :bridge,
|
161
175
|
:dataset => ref
|
162
176
|
}
|
163
177
|
else
|
164
|
-
{
|
165
|
-
:type => :date,
|
166
|
-
:dataset => ref
|
167
|
-
}
|
178
|
+
{}
|
168
179
|
end
|
169
180
|
end
|
170
181
|
end
|
data/lib/gooddata/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: java
|
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: 2018-
|
14
|
+
date: 2018-08-27 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
@@ -679,6 +679,7 @@ files:
|
|
679
679
|
- lib/gooddata/lcm/dsl/type_dsl.rb
|
680
680
|
- lib/gooddata/lcm/helpers/check_helper.rb
|
681
681
|
- lib/gooddata/lcm/helpers/helpers.rb
|
682
|
+
- lib/gooddata/lcm/helpers/release_table_helper.rb
|
682
683
|
- lib/gooddata/lcm/helpers/tags_helper.rb
|
683
684
|
- lib/gooddata/lcm/lcm.rb
|
684
685
|
- lib/gooddata/lcm/lcm2.rb
|
@@ -761,6 +762,7 @@ files:
|
|
761
762
|
- lib/gooddata/models/blueprint/attribute_field.rb
|
762
763
|
- lib/gooddata/models/blueprint/blueprint.rb
|
763
764
|
- lib/gooddata/models/blueprint/blueprint_field.rb
|
765
|
+
- lib/gooddata/models/blueprint/bridge_field.rb
|
764
766
|
- lib/gooddata/models/blueprint/dashboard_builder.rb
|
765
767
|
- lib/gooddata/models/blueprint/dataset_blueprint.rb
|
766
768
|
- lib/gooddata/models/blueprint/date_dimension.rb
|