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.15
3.7.16
29 changes: 15 additions & 14 deletions lib/gooddata/models/domain.rb
Original file line number Diff line number Diff line change
Expand Up @@ -222,22 +222,23 @@ def users(domain, id = :all, opts = {})
domain = client.domain(domain)
if id == :all
GoodData.logger.warn("Retrieving all users from domain #{domain.name}")
Enumerator.new do |y|
page_limit = opts[:page_limit] || 1000
offset = opts[:offset] || 0
loop do
begin
tmp = client(opts).get("#{domain.uri}/users", params: { offset: offset, limit: page_limit })
end

tmp['accountSettings']['items'].each do |user_data|
user = client.create(GoodData::Profile, user_data)
y << user if user
end
break if tmp['accountSettings']['items'].count < page_limit
offset += page_limit
all_users = []
page_limit = opts[:page_limit] || 1000
offset = opts[:offset] || 0
loop do
begin
tmp = client(opts).get("#{domain.uri}/users", params: { offset: offset, limit: page_limit })
end

tmp['accountSettings']['items'].each do |user_data|
user = client.create(GoodData::Profile, user_data)
all_users << user if user
end
break if tmp['accountSettings']['items'].count < page_limit
offset += page_limit
end

all_users
else
find_user_by_login(domain, id)
end
Expand Down
35 changes: 18 additions & 17 deletions lib/gooddata/models/project.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1546,26 +1546,27 @@ def uri
# @return [Array<GoodData::User>] List of users
def users(opts = {})
client = client(opts)
Enumerator.new do |y|
offset = opts[:offset] || 0
limit = opts[:limit] || 1_000
loop do
tmp = client.get("/gdc/projects/#{pid}/users", params: { offset: offset, limit: limit })
tmp['users'].each do |user_data|
user = client.create(GoodData::Membership, user_data, project: self)

if opts[:all]
y << user
elsif opts[:disabled]
y << user if user && user.disabled?
else
y << user if user && user.enabled?
end
all_users = []
offset = opts[:offset] || 0
limit = opts[:limit] || 1_000
loop do
tmp = client.get("/gdc/projects/#{pid}/users", params: { offset: offset, limit: limit })
tmp['users'].each do |user_data|
user = client.create(GoodData::Membership, user_data, project: self)

if opts[:all]
all_users << user
elsif opts[:disabled]
all_users << user if user && user.disabled?
else
all_users << user if user && user.enabled?
end
break if tmp['users'].count < limit
offset += limit
end
break if tmp['users'].count < limit
offset += limit
end

all_users
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should return all_users.each which is an enumerator instead of an array.
If we change the returned type, we don't know how it impact to customer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should not have any impact, we mentioned in the documentation return Array.
@return [ArrayGoodData::User] List of users

end

alias_method :members, :users
Expand Down
2 changes: 1 addition & 1 deletion spec/integration/models/domain_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
describe '#users' do
it 'Should list users' do
users = @domain.users
expect(users).to be_instance_of(Enumerator)
expect(users).to be_instance_of(Array)
users.each do |user|
expect(user).to be_an_instance_of(GoodData::Profile)
end
Expand Down
10 changes: 10 additions & 0 deletions spec/integration/models/project_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,16 @@
end
end

describe '#get_all_users' do
it 'Returns all user in project' do
users = @project.users
expect(users).to be_instance_of(Array)
users.each do |user|
expect(user).to be_an_instance_of(GoodData::Membership)
end
end
end

describe '#get_role_by_identifier' do
it 'Looks up for role by identifier' do
role = @project.get_role_by_identifier('readOnlyUserRole')
Expand Down