Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.7.33
3.7.34
4 changes: 2 additions & 2 deletions lib/gooddata/lcm/actions/synchronize_user_filters.rb
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ def call(params)

GoodData.gd_logger.info("Synchronizing in mode=#{mode}, client_id=#{client_id}, data_rows=#{new_filters.size}")
partial_results = sync_user_filters(current_project, new_filters, run_params.merge(users_brick_input: users), symbolized_config)
results.concat(partial_results[:results]) unless partial_results.nil? && partial_results[:results].empty?
results.concat(partial_results[:results]) unless partial_results.nil? || partial_results[:results].empty?
end

unless run_params[:do_not_touch_filters_that_are_not_mentioned]
Expand All @@ -201,7 +201,7 @@ def call(params)
GoodData.gd_logger.info("Delete all filters in project_id=#{current_project.pid}, client_id=#{c.client_id}")
current_results = sync_user_filters(current_project, [], run_params.merge(users_brick_input: users), symbolized_config)

results.concat(current_results[:results]) unless current_results[:results].empty?
results.concat(current_results[:results]) unless current_results.nil? || current_results[:results].empty?
rescue StandardError => e
params.gdc_logger.error "Failed to clear filters of #{c.client_id} due to: #{e.inspect}"
end
Expand Down
17 changes: 9 additions & 8 deletions lib/gooddata/mixins/md_object_query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,17 @@ def query(query_obj_type, klass, options = { :client => GoodData.connection, :pr

offset = 0
page_limit = 50
Enumerator.new do |y|
loop do
result = client.get(project.md['objects'] + '/query', params: { category: query_obj_type, limit: page_limit, offset: offset })
result['objects']['items'].each do |item|
y << (klass ? client.create(klass, item, project: project) : item)
end
break if result['objects']['paging']['count'] < page_limit
offset += page_limit
all_objects = []
loop do
result = client.get(project.md['objects'] + '/query', params: { category: query_obj_type, limit: page_limit, offset: offset })
result['objects']['items'].each do |item|
all_objects << (klass ? client.create(klass, item, project: project) : item)
end
break if result['objects']['paging']['count'] < page_limit

offset += page_limit
end
all_objects
end

def dependency(uri, key = nil, opts = { :client => GoodData.connection })
Expand Down
51 changes: 25 additions & 26 deletions lib/gooddata/models/metadata/label.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,20 @@ def find_element_value(element_id)
end
end

# Gets valid elements using /validElements? API
# Gets valid elements of a label for a specific paging (:offset and :limit) or get validElements of a specific value (:filter).
# In the case filter a specific value, because the API /validElements only filter by partial match, we need to filter again at client side for exact match.
# @return [Array] Results
def get_valid_elements(*args)
results, params = valid_elements(*args)
# TMA-775 - the validElements API can possibly return more matches than requested (usually 1)
# so we do a preliminary first request to check and then increase the limit if needed
if results['validElements']['paging']['total'].to_i != params[:limit]
if args && !args.empty? && args.first[:filter]
params = args.first
params[:limit] = 100_000
results, = valid_elements params
if params[:filter]
results['validElements']['items'] = results['validElements']['items'].reject do |i|
i['element']['title'] != params[:filter]
end
results['validElements']['items'] = results['validElements']['items'].select do |i|
i['element']['title'] == params[:filter]
end
else
results, = valid_elements(*args)
end

results
end

Expand All @@ -74,24 +72,25 @@ def value?(value)
# @option options [Number] :limit limits the number of values to certain number. Default is 100
# @return [Array]
def values(options = {})
Enumerator.new do |y|
offset = options[:offset] || 0
page_limit = options[:limit] || 100
loop do
results = get_valid_elements(limit: page_limit, offset: offset)

elements = results['validElements']
elements['items'].map do |el|
v = el['element']
y << {
:value => v['title'],
:uri => v['uri']
}
end
break if elements['items'].count < page_limit
offset += page_limit
all_values = []
offset = options[:offset] || 0
page_limit = options[:limit] || 100
loop do
results = get_valid_elements(limit: page_limit, offset: offset)

elements = results['validElements']
elements['items'].map do |el|
v = el['element']
all_values << {
:value => v['title'],
:uri => v['uri']
}
end
break if elements['items'].count < page_limit

offset += page_limit
end
all_values
end

def values_count
Expand Down
2 changes: 1 addition & 1 deletion lib/gooddata/models/user_filters/user_filter_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def self.create_attrs_cache(filters, options = {})
# so it precaches the values and still be able to function for larger ones even
# though that would mean tons of requests
def self.get_small_labels(labels_cache)
labels_cache.values.select { |label| label && label.values_count && label.values_count < 100_000 }
labels_cache.values.select { |label| label &.values_count &. < 100_000 }
end

# Creates a MAQL expression(s) based on the filter defintion.
Expand Down