Skip to content

Commit

Permalink
feat: show available permissions in tree format (#202)
Browse files Browse the repository at this point in the history
  • Loading branch information
drstrangelooker authored May 15, 2023
1 parent 1b964ca commit c702a64
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 1 deletion.
15 changes: 14 additions & 1 deletion lib/gzr/commands/permissions.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# The MIT License (MIT)

# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
# Copyright (c) 2023 Mike DeAngelo Google, Inc.

# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
Expand Down Expand Up @@ -44,6 +44,19 @@ def ls(*)
Gzr::Commands::Permissions::Ls.new(options).execute
end
end

desc 'tree', 'List all available permissions in a tree'
method_option :help, aliases: '-h', type: :boolean,
desc: 'Display usage information'
def tree(*)
if options[:help]
invoke :help, ['tree']
else
require_relative 'permissions/tree'
Gzr::Commands::Permissions::Tree.new(options).execute
end
end

end
end
end
71 changes: 71 additions & 0 deletions lib/gzr/commands/permissions/tree.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# The MIT License (MIT)

# Copyright (c) 2023 Mike DeAngelo Google, Inc.

# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:

# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# frozen_string_literal: true

require_relative '../../command'
require_relative '../../modules/permissions'
require 'tty-tree'

require_relative '../../command'

module Gzr
module Commands
class Permissions
class Tree < Gzr::Command
include Gzr::Permissions
def initialize(options)
super()
@options = options
end

def execute(input: $stdin, output: $stdout)
say_warning(@options) if @options[:debug]
with_session do
data = query_all_permissions()
begin
say_ok "No permissions found"
return nil
end unless data && data.length > 0

tree_data = Hash.new

data.sort! { |a,b| a[:permission] <=> b[:permission] }
data.select {|e| e[:parent] == nil}.each do |e|
tree_data[e[:permission]] = [recurse_permissions(e[:permission], data)]
end

tree = TTY::Tree.new(tree_data)
output.puts tree.render
end
end

def recurse_permissions(permission, data)
tree_branch = Hash.new
data.select { |e| e[:parent] == permission }.each do |e|
tree_branch[e[:permission]] = [recurse_permissions(e[:permission], data)]
end
tree_branch
end
end
end
end
end

0 comments on commit c702a64

Please sign in to comment.