gazer 0.2.27 → 0.2.28
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/gzr/cli.rb +3 -0
- data/lib/gzr/commands/attribute.rb +149 -0
- data/lib/gzr/commands/attribute/cat.rb +60 -0
- data/lib/gzr/commands/attribute/create.rb +57 -0
- data/lib/gzr/commands/attribute/get_group_value.rb +77 -0
- data/lib/gzr/commands/attribute/import.rb +53 -0
- data/lib/gzr/commands/attribute/ls.rb +73 -0
- data/lib/gzr/commands/attribute/rm.rb +62 -0
- data/lib/gzr/commands/attribute/set_group_value.rb +78 -0
- data/lib/gzr/commands/permissions.rb +21 -0
- data/lib/gzr/modules/attribute.rb +155 -0
- data/lib/gzr/modules/group.rb +39 -0
- data/lib/gzr/templates/attribute/cat/.gitkeep +1 -0
- data/lib/gzr/templates/attribute/create/.gitkeep +1 -0
- data/lib/gzr/templates/attribute/get_group_values/.gitkeep +1 -0
- data/lib/gzr/templates/attribute/import/.gitkeep +1 -0
- data/lib/gzr/templates/attribute/ls/.gitkeep +1 -0
- data/lib/gzr/templates/attribute/rm/.gitkeep +1 -0
- data/lib/gzr/templates/attribute/set_group_values/.gitkeep +1 -0
- data/lib/gzr/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f0cbb4a2a0249acc8a634fb3a813cecdbb60d00
|
4
|
+
data.tar.gz: a0b2d54e41d164fd34c199107f350b5332bf859b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b7eff72d81f4b892e98b3924c1db00613f3819035d4d551718f74094c48857814f2e49d4bf0aaa744e1b9a920fa0ee13386dc549aa12e77114690fb12c0d174
|
7
|
+
data.tar.gz: 54aeaaf8808e134eced33969ff8bf78e82b3270d52a59b5cfb2a8298384af73c83aaf0197281d137d7aedce887ab2471c311f68a802e2162c0ee65c0527b4a2a
|
data/Gemfile.lock
CHANGED
data/lib/gzr/cli.rb
CHANGED
@@ -53,6 +53,9 @@ module Gzr
|
|
53
53
|
end
|
54
54
|
map %w(--version -v) => :version
|
55
55
|
|
56
|
+
require_relative 'commands/attribute'
|
57
|
+
register Gzr::Commands::Attribute, 'attribute', 'attribute [SUBCOMMAND]', 'Command description...'
|
58
|
+
|
56
59
|
require_relative 'commands/permissions'
|
57
60
|
register Gzr::Commands::Permissions, 'permissions', 'permissions [SUBCOMMAND]', 'Command to retrieve available permissions'
|
58
61
|
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require 'thor'
|
25
|
+
|
26
|
+
module Gzr
|
27
|
+
module Commands
|
28
|
+
class Attribute < Thor
|
29
|
+
|
30
|
+
namespace :attribute
|
31
|
+
|
32
|
+
desc 'set_group_value GROUP_ID|GROUP_NAME ATTR_ID|ATTR_NAME VALUE', 'Set a user attribute value for a group'
|
33
|
+
method_option :help, aliases: '-h', type: :boolean,
|
34
|
+
desc: 'Display usage information'
|
35
|
+
def set_group_value(group,attr,value)
|
36
|
+
if options[:help]
|
37
|
+
invoke :help, ['set_group_value']
|
38
|
+
else
|
39
|
+
require_relative 'attribute/set_group_value'
|
40
|
+
Gzr::Commands::Attribute::SetGroupValue.new(group,attr,value,options).execute
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'get_group_value GROUP_ID|GROUP_NAME ATTR_ID|ATTR_NAME', 'Retrieve a user attribute value for a group'
|
45
|
+
method_option :help, aliases: '-h', type: :boolean,
|
46
|
+
desc: 'Display usage information'
|
47
|
+
def get_group_value(group,attr)
|
48
|
+
if options[:help]
|
49
|
+
invoke :help, ['get_group_value']
|
50
|
+
else
|
51
|
+
require_relative 'attribute/get_group_value'
|
52
|
+
Gzr::Commands::Attribute::GetGroupValue.new(group,attr,options).execute
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
desc 'rm ATTR_ID|ATTR_NAME', 'Delete a user attribute'
|
57
|
+
method_option :help, aliases: '-h', type: :boolean,
|
58
|
+
desc: 'Display usage information'
|
59
|
+
method_option :plain, type: :boolean,
|
60
|
+
desc: 'Provide minimal response information'
|
61
|
+
def rm(attr)
|
62
|
+
if options[:help]
|
63
|
+
invoke :help, ['rm']
|
64
|
+
else
|
65
|
+
require_relative 'attribute/rm'
|
66
|
+
Gzr::Commands::Attribute::Rm.new(attr,options).execute
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
desc 'import FILE', 'Import a user attribute from a file'
|
71
|
+
method_option :help, aliases: '-h', type: :boolean,
|
72
|
+
desc: 'Display usage information'
|
73
|
+
method_option :plain, type: :boolean,
|
74
|
+
desc: 'Provide minimal response information'
|
75
|
+
method_option :force, type: :boolean,
|
76
|
+
desc: 'If the user attribute already exists, modify it'
|
77
|
+
def import(file)
|
78
|
+
if options[:help]
|
79
|
+
invoke :help, ['import']
|
80
|
+
else
|
81
|
+
require_relative 'attribute/import'
|
82
|
+
Gzr::Commands::Attribute::Import.new(file,options).execute
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
desc 'create ATTR_NAME [ATTR_LABEL] [OPTIONS]', 'Create or modify an attribute'
|
87
|
+
method_option :help, aliases: '-h', type: :boolean,
|
88
|
+
desc: 'Display usage information'
|
89
|
+
method_option :plain, type: :boolean,
|
90
|
+
desc: 'Provide minimal response information'
|
91
|
+
method_option :force, type: :boolean,
|
92
|
+
desc: 'If the user attribute already exists, modify it'
|
93
|
+
method_option :type, type: :string, default: 'string',
|
94
|
+
desc: '"string", "number", "datetime", "yesno", "zipcode"'
|
95
|
+
method_option :'default-value', type: :string,
|
96
|
+
desc: 'default value to be used if one not otherwise set'
|
97
|
+
method_option :'is-hidden', type: :boolean, default: false,
|
98
|
+
desc: 'can a non-admin user view the value'
|
99
|
+
method_option :'can-view', type: :boolean, default: true,
|
100
|
+
desc: 'can a non-admin user view the value'
|
101
|
+
method_option :'can-edit', type: :boolean, default: true,
|
102
|
+
desc: 'can a user change the value themself'
|
103
|
+
method_option :'domain-whitelist', type: :string,
|
104
|
+
desc: 'what domains can receive the value of a hidden attribute.'
|
105
|
+
def create(attr_name, attr_label=nil)
|
106
|
+
if options[:help]
|
107
|
+
invoke :help, ['create']
|
108
|
+
else
|
109
|
+
require_relative 'attribute/create'
|
110
|
+
Gzr::Commands::Attribute::Create.new(attr_name, attr_label, options).execute
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
desc 'cat ATTR_ID|ATTR_NAME', 'Output json information about an attribute to screen or file'
|
115
|
+
method_option :help, aliases: '-h', type: :boolean,
|
116
|
+
desc: 'Display usage information'
|
117
|
+
method_option :fields, type: :string,
|
118
|
+
desc: 'Fields to display'
|
119
|
+
method_option :dir, type: :string,
|
120
|
+
desc: 'Directory to store output file'
|
121
|
+
def cat(attr)
|
122
|
+
if options[:help]
|
123
|
+
invoke :help, ['cat']
|
124
|
+
else
|
125
|
+
require_relative 'attribute/cat'
|
126
|
+
Gzr::Commands::Attribute::Cat.new(attr,options).execute
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
desc 'ls', 'List all the defined user attributes'
|
131
|
+
method_option :help, aliases: '-h', type: :boolean,
|
132
|
+
desc: 'Display usage information'
|
133
|
+
method_option :fields, type: :string, default: 'id,name,label,type,default_value',
|
134
|
+
desc: 'Fields to display'
|
135
|
+
method_option :plain, type: :boolean, default: false,
|
136
|
+
desc: 'print without any extra formatting'
|
137
|
+
method_option :csv, type: :boolean, default: false,
|
138
|
+
desc: 'output in csv format per RFC4180'
|
139
|
+
def ls(*)
|
140
|
+
if options[:help]
|
141
|
+
invoke :help, ['ls']
|
142
|
+
else
|
143
|
+
require_relative 'attribute/ls'
|
144
|
+
Gzr::Commands::Attribute::Ls.new(options).execute
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/attribute'
|
26
|
+
require_relative '../../modules/filehelper'
|
27
|
+
|
28
|
+
module Gzr
|
29
|
+
module Commands
|
30
|
+
class Attribute
|
31
|
+
class Cat < Gzr::Command
|
32
|
+
include Gzr::Attribute
|
33
|
+
include Gzr::FileHelper
|
34
|
+
def initialize(attr,options)
|
35
|
+
super()
|
36
|
+
@attr = attr
|
37
|
+
@options = options
|
38
|
+
end
|
39
|
+
|
40
|
+
def execute(input: $stdin, output: $stdout)
|
41
|
+
say_warning(@options) if @options[:debug]
|
42
|
+
with_session do
|
43
|
+
f = @options[:fields]
|
44
|
+
id = @attr if /^\d+$/.match @attr
|
45
|
+
attr = nil
|
46
|
+
if id
|
47
|
+
attr = query_user_attribute(id,f)
|
48
|
+
else
|
49
|
+
attr = get_attribute_by_name(@attr,f)
|
50
|
+
end
|
51
|
+
raise(Gzr::CLI::Error, "Attribute #{@attr} does not exist") unless attr
|
52
|
+
write_file(@options[:dir] ? "Attribute_#{attr.id}_#{attr.name}.json" : nil, @options[:dir],nil, output) do |f|
|
53
|
+
f.puts JSON.pretty_generate(attr.to_attrs)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/attribute'
|
26
|
+
|
27
|
+
module Gzr
|
28
|
+
module Commands
|
29
|
+
class Attribute
|
30
|
+
class Create < Gzr::Command
|
31
|
+
include Gzr::Attribute
|
32
|
+
def initialize(name,label,options)
|
33
|
+
super()
|
34
|
+
@name = name
|
35
|
+
@label = label || @name.split(/ |\_|\-/).map(&:capitalize).join(" ")
|
36
|
+
@options = options
|
37
|
+
end
|
38
|
+
|
39
|
+
def execute(input: $stdin, output: $stdout)
|
40
|
+
say_warning(@options) if @options[:debug]
|
41
|
+
with_session do
|
42
|
+
source = { :name=>@name, :label=>@label, :type=>@options[:type] }
|
43
|
+
source[:'default_value'] = @options[:'default-value'] if @options[:'default-value']
|
44
|
+
source[:'value_is_hidden'] = true if @options[:'is-hidden']
|
45
|
+
source[:'user_can_view'] = true if @options[:'can-view']
|
46
|
+
source[:'user_can_edit'] = true if @options[:'can-edit']
|
47
|
+
source[:'hidden_value_domain_whitelist'] = @options[:'domain-whitelist'] if @options[:'is-hidden'] && @options[:'domain-whitelist']
|
48
|
+
|
49
|
+
attr = upsert_user_attribute(source, @options[:force], output: $stdout)
|
50
|
+
output.puts "Imported attribute #{attr.name} #{attr.id}" unless @options[:plain]
|
51
|
+
output.puts attr.id if @options[:plain]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/group'
|
26
|
+
require_relative '../../modules/attribute'
|
27
|
+
|
28
|
+
module Gzr
|
29
|
+
module Commands
|
30
|
+
class Attribute
|
31
|
+
class GetGroupValue < Gzr::Command
|
32
|
+
include Gzr::Attribute
|
33
|
+
include Gzr::Group
|
34
|
+
def initialize(group,attr,options)
|
35
|
+
super()
|
36
|
+
@group = group
|
37
|
+
@attr = attr
|
38
|
+
@options = options
|
39
|
+
end
|
40
|
+
|
41
|
+
def execute(input: $stdin, output: $stdout)
|
42
|
+
say_warning(@options) if @options[:debug]
|
43
|
+
with_session("3.1") do
|
44
|
+
|
45
|
+
group_id = @group if /^\d+$/.match @group
|
46
|
+
group = nil
|
47
|
+
if group_id
|
48
|
+
group = query_group(group_id)
|
49
|
+
else
|
50
|
+
results = search_groups(@group)
|
51
|
+
if results && results.length == 1
|
52
|
+
group = results.first
|
53
|
+
elsif results
|
54
|
+
raise(Gzr::CLI::Error, "Pattern #{@group} matched more than one group")
|
55
|
+
else
|
56
|
+
raise(Gzr::CLI::Error, "Pattern #{@group} did not match any groups")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
attr_id = @attr if /^\d+$/.match @attr
|
61
|
+
attr = nil
|
62
|
+
if attr_id
|
63
|
+
attr = query_user_attribute(attr_id)
|
64
|
+
else
|
65
|
+
attr = get_attribute_by_name(@attr)
|
66
|
+
end
|
67
|
+
raise(Gzr::CLI::Error, "Attribute #{@attr} does not exist") unless attr
|
68
|
+
|
69
|
+
data = query_user_attribute_group_value(group.id,attr.id)
|
70
|
+
say_warning("Attribute #{attr.name} does not have a value set for group #{group.name}", output: output) unless data
|
71
|
+
output.puts data.value if data
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/attribute'
|
26
|
+
require_relative '../../modules/filehelper'
|
27
|
+
|
28
|
+
module Gzr
|
29
|
+
module Commands
|
30
|
+
class Attribute
|
31
|
+
class Import < Gzr::Command
|
32
|
+
include Gzr::Attribute
|
33
|
+
include Gzr::FileHelper
|
34
|
+
def initialize(file,options)
|
35
|
+
super()
|
36
|
+
@file = file
|
37
|
+
@options = options
|
38
|
+
end
|
39
|
+
|
40
|
+
def execute(input: $stdin, output: $stdout)
|
41
|
+
say_warning(@options) if @options[:debug]
|
42
|
+
with_session do
|
43
|
+
read_file(@file) do |source|
|
44
|
+
attr = upsert_user_attribute(source, @options[:force], output: $stdout)
|
45
|
+
output.puts "Imported attribute #{attr.name} #{attr.id}" unless @options[:plain]
|
46
|
+
output.puts attr.id if @options[:plain]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/attribute'
|
26
|
+
require 'tty-table'
|
27
|
+
|
28
|
+
module Gzr
|
29
|
+
module Commands
|
30
|
+
class Attribute
|
31
|
+
class Ls < Gzr::Command
|
32
|
+
include Gzr::Attribute
|
33
|
+
def initialize(options)
|
34
|
+
super()
|
35
|
+
@options = options
|
36
|
+
end
|
37
|
+
|
38
|
+
def execute(input: $stdin, output: $stdout)
|
39
|
+
say_warning(@options) if @options[:debug]
|
40
|
+
with_session do
|
41
|
+
f = @options[:fields]
|
42
|
+
data = query_all_user_attributes(f)
|
43
|
+
begin
|
44
|
+
say_ok "No use attributes found"
|
45
|
+
return nil
|
46
|
+
end unless data && data.length > 0
|
47
|
+
|
48
|
+
table_hash = Hash.new
|
49
|
+
fields = field_names(@options[:fields])
|
50
|
+
table_hash[:header] = fields unless @options[:plain]
|
51
|
+
expressions = fields.collect { |fn| field_expression(fn) }
|
52
|
+
table_hash[:rows] = data.map do |row|
|
53
|
+
expressions.collect do |e|
|
54
|
+
eval "row.#{e}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
table = TTY::Table.new(table_hash)
|
58
|
+
alignments = fields.collect do |k|
|
59
|
+
(k =~ /id$/) ? :right : :left
|
60
|
+
end
|
61
|
+
begin
|
62
|
+
if @options[:csv] then
|
63
|
+
output.puts render_csv(table)
|
64
|
+
else
|
65
|
+
output.puts table.render(if @options[:plain] then :basic else :ascii end, alignments: alignments)
|
66
|
+
end
|
67
|
+
end if table
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/attribute'
|
26
|
+
|
27
|
+
module Gzr
|
28
|
+
module Commands
|
29
|
+
class Attribute
|
30
|
+
class Rm < Gzr::Command
|
31
|
+
include Gzr::Attribute
|
32
|
+
def initialize(attr,options)
|
33
|
+
super()
|
34
|
+
@attr = attr
|
35
|
+
@options = options
|
36
|
+
end
|
37
|
+
|
38
|
+
def execute(input: $stdin, output: $stdout)
|
39
|
+
say_warning(@options) if @options[:debug]
|
40
|
+
with_session do
|
41
|
+
id = @attr if /^\d+$/.match @attr
|
42
|
+
attr = nil
|
43
|
+
if id
|
44
|
+
attr = query_user_attribute(id)
|
45
|
+
else
|
46
|
+
attr = get_attribute_by_name(@attr)
|
47
|
+
end
|
48
|
+
|
49
|
+
raise(Gzr::CLI::Error, "Attribute #{@attr} does not exist") unless attr
|
50
|
+
raise(Gzr::CLI::Error, "Attribute #{attr[:name]} is a system built-in and cannot be deleted ") if attr[:is_system]
|
51
|
+
raise(Gzr::CLI::Error, "Attribute #{attr[:name]} is marked permanent and cannot be deleted ") if attr[:is_permanent]
|
52
|
+
|
53
|
+
delete_user_attribute(attr.id)
|
54
|
+
|
55
|
+
output.puts "Deleted attribute #{attr.name} #{attr.id}" unless @options[:plain]
|
56
|
+
output.puts attr.id if @options[:plain]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
require_relative '../../command'
|
25
|
+
require_relative '../../modules/group'
|
26
|
+
require_relative '../../modules/attribute'
|
27
|
+
|
28
|
+
module Gzr
|
29
|
+
module Commands
|
30
|
+
class Attribute
|
31
|
+
class SetGroupValue < Gzr::Command
|
32
|
+
include Gzr::Attribute
|
33
|
+
include Gzr::Group
|
34
|
+
def initialize(group,attr,value,options)
|
35
|
+
super()
|
36
|
+
@group = group
|
37
|
+
@attr = attr
|
38
|
+
@value = value
|
39
|
+
@options = options
|
40
|
+
end
|
41
|
+
|
42
|
+
def execute(input: $stdin, output: $stdout)
|
43
|
+
say_warning(@options) if @options[:debug]
|
44
|
+
with_session("3.1") do
|
45
|
+
|
46
|
+
group_id = @group if /^\d+$/.match @group
|
47
|
+
group = nil
|
48
|
+
if group_id
|
49
|
+
group = query_group(group_id)
|
50
|
+
else
|
51
|
+
results = search_groups(@group)
|
52
|
+
if results && results.length == 1
|
53
|
+
group = results.first
|
54
|
+
elsif results
|
55
|
+
raise(Gzr::CLI::Error, "Pattern #{@group} matched more than one group")
|
56
|
+
else
|
57
|
+
raise(Gzr::CLI::Error, "Pattern #{@group} did not match any groups")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
attr_id = @attr if /^\d+$/.match @attr
|
62
|
+
attr = nil
|
63
|
+
if attr_id
|
64
|
+
attr = query_user_attribute(attr_id)
|
65
|
+
else
|
66
|
+
attr = get_attribute_by_name(@attr)
|
67
|
+
end
|
68
|
+
raise(Gzr::CLI::Error, "Attribute #{@attr} does not exist") unless attr
|
69
|
+
|
70
|
+
data = update_user_attribute_group_value(group.id,attr.id, @value)
|
71
|
+
say_warning("Attribute #{attr.name} does not have a value set for group #{group.name}", output: output) unless data
|
72
|
+
output.puts "Group attribute #{data.id} set to #{data.value}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -1,3 +1,24 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
1
22
|
# frozen_string_literal: true
|
2
23
|
|
3
24
|
require 'thor'
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# The MIT License (MIT)
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
|
4
|
+
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
# this software and associated documentation files (the "Software"), to deal in
|
7
|
+
# the Software without restriction, including without limitation the rights to
|
8
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
# subject to the following conditions:
|
11
|
+
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# frozen_string_literal: true
|
23
|
+
|
24
|
+
module Gzr
|
25
|
+
module Attribute
|
26
|
+
def query_user_attribute(attr_id,fields=nil)
|
27
|
+
data = nil
|
28
|
+
begin
|
29
|
+
req = {}
|
30
|
+
req[:fields] = fields if fields
|
31
|
+
data = @sdk.user_attribute(attr_id,req)
|
32
|
+
rescue LookerSDK::NotFound => e
|
33
|
+
# do nothing
|
34
|
+
rescue LookerSDK::Error => e
|
35
|
+
say_error "Error querying user_attribute(#{attr_id},#{JSON.pretty_generate(req)})"
|
36
|
+
say_error e.message
|
37
|
+
raise
|
38
|
+
end
|
39
|
+
data
|
40
|
+
end
|
41
|
+
|
42
|
+
def query_all_user_attributes(fields=nil, sorts=nil)
|
43
|
+
data = nil
|
44
|
+
begin
|
45
|
+
req = {}
|
46
|
+
req[:fields] = fields if fields
|
47
|
+
req[:sorts] = sorts if sorts
|
48
|
+
data = @sdk.all_user_attributes(req)
|
49
|
+
rescue LookerSDK::Error => e
|
50
|
+
say_error "Error querying all_user_attributes(#{JSON.pretty_generate(req)})"
|
51
|
+
say_error e.message
|
52
|
+
raise
|
53
|
+
end
|
54
|
+
data
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_attribute_by_name(name, fields = nil)
|
58
|
+
data = query_all_user_attributes(fields).select {|a| a.name == name}
|
59
|
+
return nil if data.empty?
|
60
|
+
data.first
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_attribute_by_label(label, fields = nil)
|
64
|
+
data = query_all_user_attributes(fields).select {|a| a.label == label}
|
65
|
+
return nil if data.empty?
|
66
|
+
data.first
|
67
|
+
end
|
68
|
+
|
69
|
+
def create_attribute(attr)
|
70
|
+
data = nil
|
71
|
+
begin
|
72
|
+
data = @sdk.create_user_attribute(attr)
|
73
|
+
rescue LookerSDK::Error => e
|
74
|
+
say_error "Error creating user_attribute(#{JSON.pretty_generate(attr)})"
|
75
|
+
say_error e.message
|
76
|
+
raise
|
77
|
+
end
|
78
|
+
data
|
79
|
+
end
|
80
|
+
|
81
|
+
def update_attribute(id,attr)
|
82
|
+
data = nil
|
83
|
+
begin
|
84
|
+
data = @sdk.update_user_attribute(id,attr)
|
85
|
+
rescue LookerSDK::Error => e
|
86
|
+
say_error "Error updating user_attribute(#{id},#{JSON.pretty_generate(attr)})"
|
87
|
+
say_error e.message
|
88
|
+
raise
|
89
|
+
end
|
90
|
+
data
|
91
|
+
end
|
92
|
+
|
93
|
+
def delete_user_attribute(id)
|
94
|
+
data = nil
|
95
|
+
begin
|
96
|
+
data = @sdk.delete_user_attribute(id)
|
97
|
+
rescue LookerSDK::Error => e
|
98
|
+
say_error "Error deleting user_attribute(#{id})"
|
99
|
+
say_error e.message
|
100
|
+
raise
|
101
|
+
end
|
102
|
+
data
|
103
|
+
end
|
104
|
+
|
105
|
+
def query_all_user_attribute_group_values(attr_id, fields=nil)
|
106
|
+
begin
|
107
|
+
req = {}
|
108
|
+
req[:fields] = fields if fields
|
109
|
+
return @sdk.all_user_attribute_group_values(attr_id,req)
|
110
|
+
rescue LookerSDK::NotFound => e
|
111
|
+
return nil
|
112
|
+
rescue LookerSDK::Error => e
|
113
|
+
say_error "Error querying all_user_attribute_group_values(#{attr_id},#{JSON.pretty_generate(req)})"
|
114
|
+
say_error e.message
|
115
|
+
raise
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def query_user_attribute_group_value(group_id, attr_id)
|
120
|
+
data = query_all_user_attribute_group_values(attr_id)&.select {|a| a.group_id == group_id}
|
121
|
+
return nil if data.nil? || data.empty?
|
122
|
+
data.first
|
123
|
+
end
|
124
|
+
|
125
|
+
def upsert_user_attribute(source, force=false, output: $stdout)
|
126
|
+
name_used = get_attribute_by_name(source[:name])
|
127
|
+
if name_used
|
128
|
+
raise(Gzr::CLI::Error, "Attribute #{source[:name]} already exists and can't be modified") if name_used[:is_system]
|
129
|
+
raise(Gzr::CLI::Error, "Attribute #{source[:name]} already exists\nUse --force if you want to overwrite it") unless @options[:force]
|
130
|
+
end
|
131
|
+
|
132
|
+
label_used = get_attribute_by_label(source[:label])
|
133
|
+
if label_used
|
134
|
+
raise(Gzr::CLI::Error, "Attribute with label #{source[:label]} already exists and can't be modified") if label_used[:is_system]
|
135
|
+
raise(Gzr::CLI::Error, "Attribute with label #{source[:label]} already exists\nUse --force if you want to overwrite it") unless force
|
136
|
+
end
|
137
|
+
|
138
|
+
existing = name_used || label_used
|
139
|
+
if existing
|
140
|
+
upd_attr = source.select do |k,v|
|
141
|
+
keys_to_keep('update_user_attribute').include?(k) && !(name_used[k] == v)
|
142
|
+
end
|
143
|
+
|
144
|
+
return update_attribute(existing.id,upd_attr)
|
145
|
+
else
|
146
|
+
new_attr = source.select do |k,v|
|
147
|
+
(keys_to_keep('create_user_attribute') - [:hidden_value_domain_whitelist]).include? k
|
148
|
+
end
|
149
|
+
new_attr[:hidden_value_domain_whitelist] = source[:hidden_value_domain_whitelist] if source[:value_is_hidden] && source[:hidden_value_domain_whitelist]
|
150
|
+
|
151
|
+
return create_attribute(new_attr)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
data/lib/gzr/modules/group.rb
CHANGED
@@ -89,5 +89,44 @@ module Gzr
|
|
89
89
|
end
|
90
90
|
data
|
91
91
|
end
|
92
|
+
|
93
|
+
def search_groups(name)
|
94
|
+
req = {:name => name }
|
95
|
+
begin
|
96
|
+
return @sdk.search_groups(req)
|
97
|
+
rescue LookerSDK::NotFound => e
|
98
|
+
return nil
|
99
|
+
rescue LookerSDK::ClientError => e
|
100
|
+
say_error "Unable to search_groups(#{JSON.pretty_generate(req)})"
|
101
|
+
say_error e.message
|
102
|
+
raise
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def query_group(id, fields=nil)
|
107
|
+
req = Hash.new
|
108
|
+
req[:fields] = fields if fields
|
109
|
+
begin
|
110
|
+
return @sdk.group(id,req)
|
111
|
+
rescue LookerSDK::NotFound => e
|
112
|
+
return nil
|
113
|
+
rescue LookerSDK::ClientError => e
|
114
|
+
say_error "Unable to find group(#{id},#{JSON.pretty_generate(req)})"
|
115
|
+
say_error e.message
|
116
|
+
raise
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def update_user_attribute_group_value(group_id, attr_id, value)
|
121
|
+
req = Hash.new
|
122
|
+
req[:value] = value
|
123
|
+
begin
|
124
|
+
return @sdk.update_user_attribute_group_value(group_id,attr_id, req)
|
125
|
+
rescue LookerSDK::ClientError => e
|
126
|
+
say_error "Unable to update_user_attribute_group_value(#{group_id},#{attr_id},#{JSON.pretty_generate(req)})"
|
127
|
+
say_error e.message
|
128
|
+
raise
|
129
|
+
end
|
130
|
+
end
|
92
131
|
end
|
93
132
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
data/lib/gzr/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gazer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike DeAngelo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tty-reader
|
@@ -204,6 +204,14 @@ files:
|
|
204
204
|
- lib/gzr/cli.rb
|
205
205
|
- lib/gzr/command.rb
|
206
206
|
- lib/gzr/commands/.gitkeep
|
207
|
+
- lib/gzr/commands/attribute.rb
|
208
|
+
- lib/gzr/commands/attribute/cat.rb
|
209
|
+
- lib/gzr/commands/attribute/create.rb
|
210
|
+
- lib/gzr/commands/attribute/get_group_value.rb
|
211
|
+
- lib/gzr/commands/attribute/import.rb
|
212
|
+
- lib/gzr/commands/attribute/ls.rb
|
213
|
+
- lib/gzr/commands/attribute/rm.rb
|
214
|
+
- lib/gzr/commands/attribute/set_group_value.rb
|
207
215
|
- lib/gzr/commands/connection.rb
|
208
216
|
- lib/gzr/commands/connection/dialects.rb
|
209
217
|
- lib/gzr/commands/connection/ls.rb
|
@@ -262,6 +270,7 @@ files:
|
|
262
270
|
- lib/gzr/commands/user/enable.rb
|
263
271
|
- lib/gzr/commands/user/ls.rb
|
264
272
|
- lib/gzr/commands/user/me.rb
|
273
|
+
- lib/gzr/modules/attribute.rb
|
265
274
|
- lib/gzr/modules/connection.rb
|
266
275
|
- lib/gzr/modules/dashboard.rb
|
267
276
|
- lib/gzr/modules/filehelper.rb
|
@@ -275,6 +284,13 @@ files:
|
|
275
284
|
- lib/gzr/modules/space.rb
|
276
285
|
- lib/gzr/modules/user.rb
|
277
286
|
- lib/gzr/templates/.gitkeep
|
287
|
+
- lib/gzr/templates/attribute/cat/.gitkeep
|
288
|
+
- lib/gzr/templates/attribute/create/.gitkeep
|
289
|
+
- lib/gzr/templates/attribute/get_group_values/.gitkeep
|
290
|
+
- lib/gzr/templates/attribute/import/.gitkeep
|
291
|
+
- lib/gzr/templates/attribute/ls/.gitkeep
|
292
|
+
- lib/gzr/templates/attribute/rm/.gitkeep
|
293
|
+
- lib/gzr/templates/attribute/set_group_values/.gitkeep
|
278
294
|
- lib/gzr/templates/connection/dialects/.gitkeep
|
279
295
|
- lib/gzr/templates/connection/ls/.gitkeep
|
280
296
|
- lib/gzr/templates/dashboard/cat/.gitkeep
|